[pktools] 01/07: Imported Upstream version 2.6.4
Sebastiaan Couwenberg
sebastic at moszumanska.debian.org
Wed Jul 1 17:46:18 UTC 2015
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch master
in repository pktools.
commit 40f3b249dc76af1136009144e5687d30c59aff62
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Tue Jun 30 20:50:28 2015 +0200
Imported Upstream version 2.6.4
---
ChangeLog | 65 +-
Makefile.am | 8 +
Makefile.in | 9 +-
configure | 37 +-
configure.ac | 21 +-
doc/Doxyfile | 2303 +++++++++++
doc/Doxyfile.good | 1899 +++++++++
doc/Doxyfile.in~ | 2303 +++++++++++
doc/Doxyfile~ | 1869 +++++++++
doc/Makefile.am | 17 +
doc/apps.dox | 32 +
doc/apps.dox~ | 33 +
doc/createappsdox.sh | 80 +
doc/examples_pkann.dox | 15 +
doc/examples_pkascii2img.dox | 64 +
doc/examples_pkascii2ogr.dox | 7 +
doc/examples_pkcomposite.dox | 32 +
doc/examples_pkcreatect.dox | 36 +
doc/examples_pkcrop.dox | 38 +
doc/examples_pkdiff.dox | 14 +
doc/examples_pkdsm2shadow.dox | 8 +
doc/examples_pkdumpimg.dox | 33 +
doc/examples_pkdumpogr.dox | 45 +
doc/examples_pkextract.dox | 79 +
doc/examples_pkfilter.dox | 61 +
doc/examples_pkgetmask.dox | 11 +
doc/examples_pkinfo.dox | 46 +
doc/examples_pkpolygonize.dox | 5 +
doc/examples_pkreclass.dox | 20 +
doc/examples_pksetmask.dox | 48 +
doc/examples_pksieve.dox | 5 +
doc/examples_pkstatogr.dox | 12 +
doc/examples_pksvm.dox | 19 +
doc/faq_pkcomposite.dox | 33 +
doc/faq_pksetmask.dox | 8 +
doc/footer.html | 33 +
doc/header.dox | 16 +
doc/html/ConfusionMatrix_8cc_source.html | 358 ++
doc/html/ConfusionMatrix_8h_source.html | 272 ++
doc/html/CostFactorySVM_8cc_source.html | 256 ++
doc/html/CostFactorySVM_8h_source.html | 131 +
doc/html/CostFactory_8h_source.html | 137 +
doc/html/Egcs_8cc_source.html | 280 ++
doc/html/Egcs_8h_source.html | 128 +
doc/html/FeatureSelector_8h_source.html | 440 +++
doc/html/FileReaderAscii_8cc_source.html | 313 ++
doc/html/FileReaderAscii_8h_source.html | 374 ++
doc/html/FileReaderLas_8cc_source.html | 253 ++
doc/html/FileReaderLas_8h_source.html | 146 +
doc/html/Filter2d_8cc_source.html | 1379 +++++++
doc/html/Filter2d_8h_source.html | 1432 +++++++
doc/html/Filter_8cc_source.html | 785 ++++
doc/html/Filter_8h_source.html | 919 +++++
doc/html/Filter__old_8h_source.html | 982 +++++
doc/html/ImgReaderGdal_8cc_source.html | 785 ++++
doc/html/ImgReaderGdal_8h_source.html | 384 ++
doc/html/ImgReaderOgr_8cc_source.html | 485 +++
doc/html/ImgReaderOgr_8h_source.html | 1026 +++++
doc/html/ImgRegression_8cc_source.html | 468 +++
doc/html/ImgRegression_8h_source.html | 122 +
doc/html/ImgWriterGdal_8cc_source.html | 727 ++++
doc/html/ImgWriterGdal_8h_source.html | 309 ++
doc/html/ImgWriterOgr_8cc_source.html | 742 ++++
doc/html/ImgWriterOgr_8h_source.html | 154 +
doc/html/IndexValue_8h_source.html | 121 +
doc/html/OptFactory_8h_source.html | 288 ++
doc/html/Optionpk_8cc_source.html | 183 +
doc/html/Optionpk_8h_source.html | 490 +++
doc/html/PosValue_8h_source.html | 122 +
doc/html/ProcessingPktoolsPlugin_8py_source.html | 123 +
doc/html/StatFactory_8h_source.html | 1562 ++++++++
doc/html/Vector2d_8h_source.html | 404 ++
doc/html/____init_____8py_source.html | 103 +
doc/html/annotated.html | 168 +
doc/html/bc_s.png | Bin 0 -> 676 bytes
doc/html/bdwn.png | Bin 0 -> 147 bytes
...gui-gcc-Debug_2moc__mainwindow_8cpp_source.html | 202 +
...e__gui-gcc-Debug_2ui__mainwindow_8h_source.html | 782 ++++
...i-gcc-Release_2moc__mainwindow_8cpp_source.html | 202 +
..._gui-gcc-Release_2ui__mainwindow_8h_source.html | 781 ++++
...gui-gcc-Debug_2moc__mainwindow_8cpp_source.html | 206 +
...p__gui-gcc-Debug_2ui__mainwindow_8h_source.html | 802 ++++
...i-gcc-Release_2moc__mainwindow_8cpp_source.html | 206 +
..._gui-gcc-Release_2ui__mainwindow_8h_source.html | 802 ++++
...gui-gcc-Debug_2moc__mainwindow_8cpp_source.html | 196 +
...f__gui-gcc-Debug_2ui__mainwindow_8h_source.html | 515 +++
...i-gcc-Release_2moc__mainwindow_8cpp_source.html | 196 +
..._gui-gcc-Release_2ui__mainwindow_8h_source.html | 515 +++
...gui-gcc-Debug_2moc__mainwindow_8cpp_source.html | 190 +
...t__gui-gcc-Debug_2ui__mainwindow_8h_source.html | 590 +++
...i-gcc-Release_2moc__mainwindow_8cpp_source.html | 190 +
..._gui-gcc-Release_2ui__mainwindow_8h_source.html | 590 +++
...gui-gcc-Debug_2moc__mainwindow_8cpp_source.html | 205 +
...m__gui-gcc-Debug_2ui__mainwindow_8h_source.html | 740 ++++
...i-gcc-Release_2moc__mainwindow_8cpp_source.html | 205 +
..._gui-gcc-Release_2ui__mainwindow_8h_source.html | 740 ++++
doc/html/classBadConversion-members.html | 75 +
doc/html/classBadConversion.html | 107 +
doc/html/classBadConversion__coll__graph.map | 4 +
doc/html/classBadConversion__coll__graph.md5 | 1 +
doc/html/classBadConversion__coll__graph.png | Bin 0 -> 5729 bytes
doc/html/classBadConversion__inherit__graph.map | 4 +
doc/html/classBadConversion__inherit__graph.md5 | 1 +
doc/html/classBadConversion__inherit__graph.png | Bin 0 -> 5729 bytes
doc/html/classCache-members.html | 78 +
doc/html/classCache.html | 94 +
doc/html/classCompare__IndexValue-members.html | 75 +
doc/html/classCompare__IndexValue.html | 87 +
doc/html/classCompare__PosValue-members.html | 75 +
doc/html/classCompare__PosValue.html | 87 +
doc/html/classCostFactory-members.html | 96 +
doc/html/classCostFactory.html | 162 +
doc/html/classCostFactoryANN-members.html | 99 +
doc/html/classCostFactoryANN.html | 167 +
doc/html/classCostFactoryANN__coll__graph.map | 6 +
doc/html/classCostFactoryANN__coll__graph.md5 | 1 +
doc/html/classCostFactoryANN__coll__graph.png | Bin 0 -> 30326 bytes
doc/html/classCostFactoryANN__inherit__graph.map | 3 +
doc/html/classCostFactoryANN__inherit__graph.md5 | 1 +
doc/html/classCostFactoryANN__inherit__graph.png | Bin 0 -> 3549 bytes
doc/html/classCostFactorySVM-members.html | 99 +
doc/html/classCostFactorySVM.html | 167 +
doc/html/classCostFactorySVM__coll__graph.map | 6 +
doc/html/classCostFactorySVM__coll__graph.md5 | 1 +
doc/html/classCostFactorySVM__coll__graph.png | Bin 0 -> 30811 bytes
doc/html/classCostFactorySVM__inherit__graph.map | 3 +
doc/html/classCostFactorySVM__inherit__graph.md5 | 1 +
doc/html/classCostFactorySVM__inherit__graph.png | Bin 0 -> 3804 bytes
doc/html/classCostFactory__coll__graph.map | 5 +
doc/html/classCostFactory__coll__graph.md5 | 1 +
doc/html/classCostFactory__coll__graph.png | Bin 0 -> 24905 bytes
doc/html/classCostFactory__inherit__graph.map | 4 +
doc/html/classCostFactory__inherit__graph.md5 | 1 +
doc/html/classCostFactory__inherit__graph.png | Bin 0 -> 6085 bytes
doc/html/classDataModel-members.html | 97 +
doc/html/classDataModel.html | 147 +
doc/html/classDecrease__IndexValue-members.html | 75 +
doc/html/classDecrease__IndexValue.html | 87 +
doc/html/classDecrease__PosValue-members.html | 75 +
doc/html/classDecrease__PosValue.html | 87 +
doc/html/classEgcs-members.html | 87 +
doc/html/classEgcs.html | 118 +
doc/html/classFANN_1_1neural__net-members.html | 204 +
doc/html/classFANN_1_1neural__net.html | 465 +++
doc/html/classFANN_1_1training__data-members.html | 103 +
doc/html/classFANN_1_1training__data.html | 165 +
doc/html/classFeatureSelector-members.html | 80 +
doc/html/classFeatureSelector.html | 100 +
doc/html/classFileReaderAscii-members.html | 97 +
doc/html/classFileReaderAscii.html | 161 +
doc/html/classFileReaderAscii__coll__graph.map | 9 +
doc/html/classFileReaderAscii__coll__graph.md5 | 1 +
doc/html/classFileReaderAscii__coll__graph.png | Bin 0 -> 18260 bytes
doc/html/classFileReaderLas-members.html | 100 +
doc/html/classFileReaderLas.html | 173 +
doc/html/classFileReaderLas__coll__graph.map | 9 +
doc/html/classFileReaderLas__coll__graph.md5 | 1 +
doc/html/classFileReaderLas__coll__graph.png | Bin 0 -> 21503 bytes
doc/html/classImgReaderGdal-members.html | 146 +
doc/html/classImgReaderGdal.html | 317 ++
doc/html/classImgReaderGdal__coll__graph.map | 4 +
doc/html/classImgReaderGdal__coll__graph.md5 | 1 +
doc/html/classImgReaderGdal__coll__graph.png | Bin 0 -> 11843 bytes
doc/html/classImgReaderOgr-members.html | 111 +
doc/html/classImgReaderOgr.html | 219 ++
doc/html/classImgReaderOgr__coll__graph.map | 4 +
doc/html/classImgReaderOgr__coll__graph.md5 | 1 +
doc/html/classImgReaderOgr__coll__graph.png | Bin 0 -> 5833 bytes
doc/html/classImgWriterGdal-members.html | 124 +
doc/html/classImgWriterGdal.html | 248 ++
doc/html/classImgWriterGdal__coll__graph.map | 4 +
doc/html/classImgWriterGdal__coll__graph.md5 | 1 +
doc/html/classImgWriterGdal__coll__graph.png | Bin 0 -> 14112 bytes
doc/html/classImgWriterOgr-members.html | 107 +
doc/html/classImgWriterOgr.html | 193 +
doc/html/classImgWriterOgr__coll__graph.map | 4 +
doc/html/classImgWriterOgr__coll__graph.md5 | 1 +
doc/html/classImgWriterOgr__coll__graph.png | Bin 0 -> 5762 bytes
doc/html/classIncrease__IndexValue-members.html | 75 +
doc/html/classIncrease__IndexValue.html | 87 +
doc/html/classIncrease__PosValue-members.html | 75 +
doc/html/classIncrease__PosValue.html | 87 +
doc/html/classKernel-members.html | 82 +
doc/html/classKernel.html | 124 +
doc/html/classKernel__coll__graph.map | 3 +
doc/html/classKernel__coll__graph.md5 | 1 +
doc/html/classKernel__coll__graph.png | Bin 0 -> 2079 bytes
doc/html/classKernel__inherit__graph.map | 6 +
doc/html/classKernel__inherit__graph.md5 | 1 +
doc/html/classKernel__inherit__graph.png | Bin 0 -> 8164 bytes
doc/html/classLastReturnFilter-members.html | 76 +
doc/html/classLastReturnFilter.html | 98 +
doc/html/classLastReturnFilter__coll__graph.map | 2 +
doc/html/classLastReturnFilter__coll__graph.md5 | 1 +
doc/html/classLastReturnFilter__coll__graph.png | Bin 0 -> 2702 bytes
doc/html/classLastReturnFilter__inherit__graph.map | 2 +
doc/html/classLastReturnFilter__inherit__graph.md5 | 1 +
doc/html/classLastReturnFilter__inherit__graph.png | Bin 0 -> 2702 bytes
doc/html/classMainWindow-members.html | 84 +
doc/html/classMainWindow.html | 111 +
doc/html/classMainWindow__coll__graph.map | 2 +
doc/html/classMainWindow__coll__graph.md5 | 1 +
doc/html/classMainWindow__coll__graph.png | Bin 0 -> 5989 bytes
doc/html/classMainWindow__inherit__graph.map | 2 +
doc/html/classMainWindow__inherit__graph.md5 | 1 +
doc/html/classMainWindow__inherit__graph.png | Bin 0 -> 5989 bytes
doc/html/classONE__CLASS__Q-members.html | 84 +
doc/html/classONE__CLASS__Q.html | 125 +
doc/html/classONE__CLASS__Q__coll__graph.map | 4 +
doc/html/classONE__CLASS__Q__coll__graph.md5 | 1 +
doc/html/classONE__CLASS__Q__coll__graph.png | Bin 0 -> 4588 bytes
doc/html/classONE__CLASS__Q__inherit__graph.map | 4 +
doc/html/classONE__CLASS__Q__inherit__graph.md5 | 1 +
doc/html/classONE__CLASS__Q__inherit__graph.png | Bin 0 -> 4588 bytes
doc/html/classOptFactory-members.html | 77 +
doc/html/classOptFactory.html | 87 +
doc/html/classOptionpk-members.html | 104 +
doc/html/classOptionpk.html | 520 +++
doc/html/classOptionpk__coll__graph.map | 3 +
doc/html/classOptionpk__coll__graph.md5 | 1 +
doc/html/classOptionpk__coll__graph.png | Bin 0 -> 4442 bytes
doc/html/classOptionpk__inherit__graph.map | 3 +
doc/html/classOptionpk__inherit__graph.md5 | 1 +
doc/html/classOptionpk__inherit__graph.png | Bin 0 -> 3334 bytes
doc/html/classQMatrix-members.html | 78 +
doc/html/classQMatrix.html | 100 +
doc/html/classQMatrix__inherit__graph.map | 6 +
doc/html/classQMatrix__inherit__graph.md5 | 1 +
doc/html/classQMatrix__inherit__graph.png | Bin 0 -> 8158 bytes
doc/html/classSVC__Q-members.html | 84 +
doc/html/classSVC__Q.html | 125 +
doc/html/classSVC__Q__coll__graph.map | 4 +
doc/html/classSVC__Q__coll__graph.md5 | 1 +
doc/html/classSVC__Q__coll__graph.png | Bin 0 -> 3995 bytes
doc/html/classSVC__Q__inherit__graph.map | 4 +
doc/html/classSVC__Q__inherit__graph.md5 | 1 +
doc/html/classSVC__Q__inherit__graph.png | Bin 0 -> 3995 bytes
doc/html/classSVR__Q-members.html | 84 +
doc/html/classSVR__Q.html | 125 +
doc/html/classSVR__Q__coll__graph.map | 4 +
doc/html/classSVR__Q__coll__graph.md5 | 1 +
doc/html/classSVR__Q__coll__graph.png | Bin 0 -> 3960 bytes
doc/html/classSVR__Q__inherit__graph.map | 4 +
doc/html/classSVR__Q__inherit__graph.md5 | 1 +
doc/html/classSVR__Q__inherit__graph.png | Bin 0 -> 3960 bytes
doc/html/classSolver-members.html | 105 +
doc/html/classSolver.html | 199 +
doc/html/classSolver__NU-members.html | 103 +
doc/html/classSolver__NU.html | 182 +
doc/html/classSolver__NU__coll__graph.map | 4 +
doc/html/classSolver__NU__coll__graph.md5 | 1 +
doc/html/classSolver__NU__coll__graph.png | Bin 0 -> 4294 bytes
doc/html/classSolver__NU__inherit__graph.map | 3 +
doc/html/classSolver__NU__inherit__graph.md5 | 1 +
doc/html/classSolver__NU__inherit__graph.png | Bin 0 -> 2528 bytes
doc/html/classSolver__coll__graph.map | 3 +
doc/html/classSolver__coll__graph.md5 | 1 +
doc/html/classSolver__coll__graph.png | Bin 0 -> 2681 bytes
doc/html/classSolver__inherit__graph.map | 3 +
doc/html/classSolver__inherit__graph.md5 | 1 +
doc/html/classSolver__inherit__graph.png | Bin 0 -> 2565 bytes
doc/html/classUi_1_1MainWindow-members.html | 262 ++
doc/html/classUi_1_1MainWindow.html | 655 ++++
doc/html/classUi_1_1MainWindow__coll__graph.map | 3 +
doc/html/classUi_1_1MainWindow__coll__graph.md5 | 1 +
doc/html/classUi_1_1MainWindow__coll__graph.png | Bin 0 -> 11136 bytes
doc/html/classUi_1_1MainWindow__inherit__graph.map | 3 +
doc/html/classUi_1_1MainWindow__inherit__graph.md5 | 1 +
doc/html/classUi_1_1MainWindow__inherit__graph.png | Bin 0 -> 11136 bytes
doc/html/classUi__MainWindow-members.html | 258 ++
doc/html/classUi__MainWindow.html | 647 ++++
doc/html/classUi__MainWindow__inherit__graph.map | 3 +
doc/html/classUi__MainWindow__inherit__graph.md5 | 1 +
doc/html/classUi__MainWindow__inherit__graph.png | Bin 0 -> 11097 bytes
doc/html/classVector2d-members.html | 101 +
doc/html/classVector2d.html | 181 +
doc/html/classVector2d__coll__graph.map | 3 +
doc/html/classVector2d__coll__graph.md5 | 1 +
doc/html/classVector2d__coll__graph.png | Bin 0 -> 4921 bytes
doc/html/classVector2d__inherit__graph.map | 3 +
doc/html/classVector2d__inherit__graph.md5 | 1 +
doc/html/classVector2d__inherit__graph.png | Bin 0 -> 3799 bytes
...confusionmatrix_1_1ConfusionMatrix-members.html | 117 +
.../classconfusionmatrix_1_1ConfusionMatrix.html | 208 +
doc/html/classes.html | 119 +
doc/html/classfilter2d_1_1Filter2d-members.html | 124 +
doc/html/classfilter2d_1_1Filter2d.html | 239 ++
doc/html/classfilter_1_1Filter-members.html | 151 +
doc/html/classfilter_1_1Filter.html | 323 ++
...lassimgregression_1_1ImgRegression-members.html | 88 +
doc/html/classimgregression_1_1ImgRegression.html | 113 +
...sPlugin_1_1ProcessingPktoolsPlugin-members.html | 82 +
...ngPktoolsPlugin_1_1ProcessingPktoolsPlugin.html | 104 +
...qgis_1_1pkcomposite_1_1pkcomposite-members.html | 101 +
.../classqgis_1_1pkcomposite_1_1pkcomposite.html | 175 +
..._1_1pkcomposite_1_1pkcomposite__coll__graph.map | 2 +
..._1_1pkcomposite_1_1pkcomposite__coll__graph.md5 | 1 +
..._1_1pkcomposite_1_1pkcomposite__coll__graph.png | Bin 0 -> 3748 bytes
...1pkcomposite_1_1pkcomposite__inherit__graph.map | 2 +
...1pkcomposite_1_1pkcomposite__inherit__graph.md5 | 1 +
...1pkcomposite_1_1pkcomposite__inherit__graph.png | Bin 0 -> 3748 bytes
.../classqgis_1_1pkcrop_1_1pkcrop-members.html | 95 +
doc/html/classqgis_1_1pkcrop_1_1pkcrop.html | 157 +
.../classqgis_1_1pkcrop_1_1pkcrop__coll__graph.map | 2 +
.../classqgis_1_1pkcrop_1_1pkcrop__coll__graph.md5 | 1 +
.../classqgis_1_1pkcrop_1_1pkcrop__coll__graph.png | Bin 0 -> 3345 bytes
...assqgis_1_1pkcrop_1_1pkcrop__inherit__graph.map | 2 +
...assqgis_1_1pkcrop_1_1pkcrop__inherit__graph.md5 | 1 +
...assqgis_1_1pkcrop_1_1pkcrop__inherit__graph.png | Bin 0 -> 3345 bytes
...diff__accuracy_1_1pkdiff__accuracy-members.html | 95 +
...is_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html | 157 +
...__accuracy_1_1pkdiff__accuracy__coll__graph.map | 2 +
...__accuracy_1_1pkdiff__accuracy__coll__graph.md5 | 1 +
...__accuracy_1_1pkdiff__accuracy__coll__graph.png | Bin 0 -> 4122 bytes
...ccuracy_1_1pkdiff__accuracy__inherit__graph.map | 2 +
...ccuracy_1_1pkdiff__accuracy__inherit__graph.md5 | 1 +
...ccuracy_1_1pkdiff__accuracy__inherit__graph.png | Bin 0 -> 4122 bytes
...lassqgis_1_1pkextract_1_1pkextract-members.html | 95 +
doc/html/classqgis_1_1pkextract_1_1pkextract.html | 157 +
...qgis_1_1pkextract_1_1pkextract__coll__graph.map | 2 +
...qgis_1_1pkextract_1_1pkextract__coll__graph.md5 | 1 +
...qgis_1_1pkextract_1_1pkextract__coll__graph.png | Bin 0 -> 3693 bytes
...s_1_1pkextract_1_1pkextract__inherit__graph.map | 2 +
...s_1_1pkextract_1_1pkextract__inherit__graph.md5 | 1 +
...s_1_1pkextract_1_1pkextract__inherit__graph.png | Bin 0 -> 3693 bytes
...pkextract__grid_1_1pkextract__grid-members.html | 94 +
...qgis_1_1pkextract__grid_1_1pkextract__grid.html | 154 +
...tract__grid_1_1pkextract__grid__coll__graph.map | 2 +
...tract__grid_1_1pkextract__grid__coll__graph.md5 | 1 +
...tract__grid_1_1pkextract__grid__coll__graph.png | Bin 0 -> 3963 bytes
...ct__grid_1_1pkextract__grid__inherit__graph.map | 2 +
...ct__grid_1_1pkextract__grid__inherit__graph.md5 | 1 +
...ct__grid_1_1pkextract__grid__inherit__graph.png | Bin 0 -> 3963 bytes
...tract__random_1_1pkextract__random-members.html | 94 +
..._1_1pkextract__random_1_1pkextract__random.html | 154 +
...t__random_1_1pkextract__random__coll__graph.map | 2 +
...t__random_1_1pkextract__random__coll__graph.md5 | 1 +
...t__random_1_1pkextract__random__coll__graph.png | Bin 0 -> 4468 bytes
...random_1_1pkextract__random__inherit__graph.map | 2 +
...random_1_1pkextract__random__inherit__graph.md5 | 1 +
...random_1_1pkextract__random__inherit__graph.png | Bin 0 -> 4468 bytes
...lter__spatial_1_1pkfilter__spatial-members.html | 94 +
..._1_1pkfilter__spatial_1_1pkfilter__spatial.html | 154 +
...__spatial_1_1pkfilter__spatial__coll__graph.map | 2 +
...__spatial_1_1pkfilter__spatial__coll__graph.md5 | 1 +
...__spatial_1_1pkfilter__spatial__coll__graph.png | Bin 0 -> 4288 bytes
...patial_1_1pkfilter__spatial__inherit__graph.map | 2 +
...patial_1_1pkfilter__spatial__inherit__graph.md5 | 1 +
...patial_1_1pkfilter__spatial__inherit__graph.png | Bin 0 -> 4288 bytes
...er__spectral_1_1pkfilter__spectral-members.html | 94 +
..._1pkfilter__spectral_1_1pkfilter__spectral.html | 154 +
...spectral_1_1pkfilter__spectral__coll__graph.map | 2 +
...spectral_1_1pkfilter__spectral__coll__graph.md5 | 1 +
...spectral_1_1pkfilter__spectral__coll__graph.png | Bin 0 -> 4449 bytes
...ctral_1_1pkfilter__spectral__inherit__graph.map | 2 +
...ctral_1_1pkfilter__spectral__inherit__graph.md5 | 1 +
...ctral_1_1pkfilter__spectral__inherit__graph.png | Bin 0 -> 4449 bytes
...qgis_1_1pkfilterdem_1_1pkfilterdem-members.html | 91 +
.../classqgis_1_1pkfilterdem_1_1pkfilterdem.html | 145 +
..._1_1pkfilterdem_1_1pkfilterdem__coll__graph.map | 2 +
..._1_1pkfilterdem_1_1pkfilterdem__coll__graph.md5 | 1 +
..._1_1pkfilterdem_1_1pkfilterdem__coll__graph.png | Bin 0 -> 3591 bytes
...1pkfilterdem_1_1pkfilterdem__inherit__graph.map | 2 +
...1pkfilterdem_1_1pkfilterdem__inherit__graph.md5 | 1 +
...1pkfilterdem_1_1pkfilterdem__inherit__graph.png | Bin 0 -> 3591 bytes
...lassqgis_1_1pkgetmask_1_1pkgetmask-members.html | 95 +
doc/html/classqgis_1_1pkgetmask_1_1pkgetmask.html | 157 +
...qgis_1_1pkgetmask_1_1pkgetmask__coll__graph.map | 2 +
...qgis_1_1pkgetmask_1_1pkgetmask__coll__graph.md5 | 1 +
...qgis_1_1pkgetmask_1_1pkgetmask__coll__graph.png | Bin 0 -> 3619 bytes
...s_1_1pkgetmask_1_1pkgetmask__inherit__graph.map | 2 +
...s_1_1pkgetmask_1_1pkgetmask__inherit__graph.md5 | 1 +
...s_1_1pkgetmask_1_1pkgetmask__inherit__graph.png | Bin 0 -> 3619 bytes
...lassqgis_1_1pklas2img_1_1pklas2img-members.html | 98 +
doc/html/classqgis_1_1pklas2img_1_1pklas2img.html | 166 +
...qgis_1_1pklas2img_1_1pklas2img__coll__graph.map | 2 +
...qgis_1_1pklas2img_1_1pklas2img__coll__graph.md5 | 1 +
...qgis_1_1pklas2img_1_1pklas2img__coll__graph.png | Bin 0 -> 3589 bytes
...s_1_1pklas2img_1_1pklas2img__inherit__graph.map | 2 +
...s_1_1pklas2img_1_1pklas2img__inherit__graph.md5 | 1 +
...s_1_1pklas2img_1_1pklas2img__inherit__graph.png | Bin 0 -> 3589 bytes
...lassqgis_1_1pkreclass_1_1pkreclass-members.html | 94 +
doc/html/classqgis_1_1pkreclass_1_1pkreclass.html | 154 +
...qgis_1_1pkreclass_1_1pkreclass__coll__graph.map | 2 +
...qgis_1_1pkreclass_1_1pkreclass__coll__graph.md5 | 1 +
...qgis_1_1pkreclass_1_1pkreclass__coll__graph.png | Bin 0 -> 3554 bytes
...s_1_1pkreclass_1_1pkreclass__inherit__graph.map | 2 +
...s_1_1pkreclass_1_1pkreclass__inherit__graph.md5 | 1 +
...s_1_1pkreclass_1_1pkreclass__inherit__graph.png | Bin 0 -> 3554 bytes
...lassqgis_1_1pksetmask_1_1pksetmask-members.html | 94 +
doc/html/classqgis_1_1pksetmask_1_1pksetmask.html | 154 +
...qgis_1_1pksetmask_1_1pksetmask__coll__graph.map | 2 +
...qgis_1_1pksetmask_1_1pksetmask__coll__graph.md5 | 1 +
...qgis_1_1pksetmask_1_1pksetmask__coll__graph.png | Bin 0 -> 3569 bytes
...s_1_1pksetmask_1_1pksetmask__inherit__graph.map | 2 +
...s_1_1pksetmask_1_1pksetmask__inherit__graph.md5 | 1 +
...s_1_1pksetmask_1_1pksetmask__inherit__graph.png | Bin 0 -> 3569 bytes
doc/html/classqgis_1_1pksvm_1_1pksvm-members.html | 93 +
doc/html/classqgis_1_1pksvm_1_1pksvm.html | 151 +
.../classqgis_1_1pksvm_1_1pksvm__coll__graph.map | 2 +
.../classqgis_1_1pksvm_1_1pksvm__coll__graph.md5 | 1 +
.../classqgis_1_1pksvm_1_1pksvm__coll__graph.png | Bin 0 -> 3243 bytes
...classqgis_1_1pksvm_1_1pksvm__inherit__graph.map | 2 +
...classqgis_1_1pksvm_1_1pksvm__inherit__graph.md5 | 1 +
...classqgis_1_1pksvm_1_1pksvm__inherit__graph.png | Bin 0 -> 3243 bytes
...orithmProvider_1_1pktoolsAlgorithmProvider.html | 251 ++
...toolsAlgorithm_1_1pktoolsAlgorithm-members.html | 81 +
...is_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html | 107 +
...sAlgorithm_1_1pktoolsAlgorithm__coll__graph.map | 2 +
...sAlgorithm_1_1pktoolsAlgorithm__coll__graph.md5 | 1 +
...sAlgorithm_1_1pktoolsAlgorithm__coll__graph.png | Bin 0 -> 4565 bytes
...gorithm_1_1pktoolsAlgorithm__inherit__graph.map | 2 +
...gorithm_1_1pktoolsAlgorithm__inherit__graph.md5 | 1 +
...gorithm_1_1pktoolsAlgorithm__inherit__graph.png | Bin 0 -> 4565 bytes
...is_1_1pktoolsUtils_1_1pktoolsUtils-members.html | 81 +
.../classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html | 101 +
.../classstatfactory_1_1StatFactory-members.html | 161 +
doc/html/classstatfactory_1_1StatFactory.html | 379 ++
doc/html/closed.png | Bin 0 -> 132 bytes
doc/html/config_8h_source.html | 149 +
doc/html/dir_0af1587c8378955de40f48b4bd1869f0.html | 88 +
.../dir_0af1587c8378955de40f48b4bd1869f0_dep.map | 4 +
.../dir_0af1587c8378955de40f48b4bd1869f0_dep.md5 | 1 +
.../dir_0af1587c8378955de40f48b4bd1869f0_dep.png | Bin 0 -> 1811 bytes
doc/html/dir_0d45166ba6790a432639a127a727f02c.html | 80 +
.../dir_0d45166ba6790a432639a127a727f02c_dep.map | 4 +
.../dir_0d45166ba6790a432639a127a727f02c_dep.md5 | 1 +
.../dir_0d45166ba6790a432639a127a727f02c_dep.png | Bin 0 -> 2299 bytes
doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8.html | 82 +
.../dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.map | 4 +
.../dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.md5 | 1 +
.../dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.png | Bin 0 -> 2949 bytes
doc/html/dir_0f63d6441a2c250919e1e8723011eb2f.html | 108 +
.../dir_0f63d6441a2c250919e1e8723011eb2f_dep.map | 18 +
.../dir_0f63d6441a2c250919e1e8723011eb2f_dep.md5 | 1 +
.../dir_0f63d6441a2c250919e1e8723011eb2f_dep.png | Bin 0 -> 6815 bytes
doc/html/dir_2676862852e3d558e3597542a81ecc63.html | 84 +
.../dir_2676862852e3d558e3597542a81ecc63_dep.map | 4 +
.../dir_2676862852e3d558e3597542a81ecc63_dep.md5 | 1 +
.../dir_2676862852e3d558e3597542a81ecc63_dep.png | Bin 0 -> 2481 bytes
doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd.html | 82 +
.../dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.map | 4 +
.../dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.md5 | 1 +
.../dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.png | Bin 0 -> 3342 bytes
doc/html/dir_35acdce8930fac877097c845a64519e5.html | 84 +
.../dir_35acdce8930fac877097c845a64519e5_dep.map | 4 +
.../dir_35acdce8930fac877097c845a64519e5_dep.md5 | 1 +
.../dir_35acdce8930fac877097c845a64519e5_dep.png | Bin 0 -> 2128 bytes
doc/html/dir_41d189c72498e24f979b227eb8e138b1.html | 82 +
.../dir_41d189c72498e24f979b227eb8e138b1_dep.map | 4 +
.../dir_41d189c72498e24f979b227eb8e138b1_dep.md5 | 1 +
.../dir_41d189c72498e24f979b227eb8e138b1_dep.png | Bin 0 -> 3423 bytes
doc/html/dir_457de909e3893805a4d2d0b8c0742bd8.html | 85 +
.../dir_457de909e3893805a4d2d0b8c0742bd8_dep.map | 4 +
.../dir_457de909e3893805a4d2d0b8c0742bd8_dep.md5 | 1 +
.../dir_457de909e3893805a4d2d0b8c0742bd8_dep.png | Bin 0 -> 2113 bytes
doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade.html | 82 +
.../dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.map | 4 +
.../dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.md5 | 1 +
.../dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.png | Bin 0 -> 3167 bytes
doc/html/dir_53adf0b982dc8545998aae3f283a5a58.html | 153 +
.../dir_53adf0b982dc8545998aae3f283a5a58_dep.map | 5 +
.../dir_53adf0b982dc8545998aae3f283a5a58_dep.md5 | 1 +
.../dir_53adf0b982dc8545998aae3f283a5a58_dep.png | Bin 0 -> 2699 bytes
doc/html/dir_5785acc8d2e42f8795bdbe936856f26d.html | 116 +
.../dir_5785acc8d2e42f8795bdbe936856f26d_dep.map | 3 +
.../dir_5785acc8d2e42f8795bdbe936856f26d_dep.md5 | 1 +
.../dir_5785acc8d2e42f8795bdbe936856f26d_dep.png | Bin 0 -> 1083 bytes
doc/html/dir_5f1e10fd305b434def78aaf73fd56d60.html | 82 +
.../dir_5f1e10fd305b434def78aaf73fd56d60_dep.map | 4 +
.../dir_5f1e10fd305b434def78aaf73fd56d60_dep.md5 | 1 +
.../dir_5f1e10fd305b434def78aaf73fd56d60_dep.png | Bin 0 -> 2859 bytes
doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html | 90 +
.../dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map | 9 +
.../dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 | 1 +
.../dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png | Bin 0 -> 3609 bytes
doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html | 94 +
.../dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.map | 4 +
.../dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.md5 | 1 +
.../dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.png | Bin 0 -> 2340 bytes
doc/html/dir_849702d4228bd835bdf1201002937cb3.html | 82 +
.../dir_849702d4228bd835bdf1201002937cb3_dep.map | 4 +
.../dir_849702d4228bd835bdf1201002937cb3_dep.md5 | 1 +
.../dir_849702d4228bd835bdf1201002937cb3_dep.png | Bin 0 -> 2018 bytes
doc/html/dir_89a0bd85ecec8fbb2c320310670be290.html | 82 +
.../dir_89a0bd85ecec8fbb2c320310670be290_dep.map | 4 +
.../dir_89a0bd85ecec8fbb2c320310670be290_dep.md5 | 1 +
.../dir_89a0bd85ecec8fbb2c320310670be290_dep.png | Bin 0 -> 1924 bytes
doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb.html | 84 +
.../dir_ab1bbd5a6b4bd6507847335527b029bb_dep.map | 4 +
.../dir_ab1bbd5a6b4bd6507847335527b029bb_dep.md5 | 1 +
.../dir_ab1bbd5a6b4bd6507847335527b029bb_dep.png | Bin 0 -> 2640 bytes
doc/html/dir_b66e135988e27fdc966ddddb8708f514.html | 84 +
.../dir_b66e135988e27fdc966ddddb8708f514_dep.map | 4 +
.../dir_b66e135988e27fdc966ddddb8708f514_dep.md5 | 1 +
.../dir_b66e135988e27fdc966ddddb8708f514_dep.png | Bin 0 -> 2172 bytes
doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce.html | 84 +
.../dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.map | 4 +
.../dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.md5 | 1 +
.../dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.png | Bin 0 -> 1933 bytes
doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7.html | 82 +
.../dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.map | 4 +
.../dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.md5 | 1 +
.../dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.png | Bin 0 -> 3559 bytes
doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html | 82 +
.../dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.map | 4 +
.../dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.md5 | 1 +
.../dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.png | Bin 0 -> 3237 bytes
doc/html/dir_e28b2035b152bb51229fe7a0fca4e376.html | 84 +
.../dir_e28b2035b152bb51229fe7a0fca4e376_dep.map | 4 +
.../dir_e28b2035b152bb51229fe7a0fca4e376_dep.md5 | 1 +
.../dir_e28b2035b152bb51229fe7a0fca4e376_dep.png | Bin 0 -> 2228 bytes
doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc.html | 82 +
.../dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.map | 4 +
.../dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.md5 | 1 +
.../dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.png | Bin 0 -> 3205 bytes
doc/html/dir_e6df591b0639d4c4807ef64d058833e2.html | 118 +
.../dir_e6df591b0639d4c4807ef64d058833e2_dep.map | 4 +
.../dir_e6df591b0639d4c4807ef64d058833e2_dep.md5 | 1 +
.../dir_e6df591b0639d4c4807ef64d058833e2_dep.png | Bin 0 -> 2355 bytes
doc/html/dir_ed1df9621940d6aa1183c365ad1750d2.html | 82 +
.../dir_ed1df9621940d6aa1183c365ad1750d2_dep.map | 4 +
.../dir_ed1df9621940d6aa1183c365ad1750d2_dep.md5 | 1 +
.../dir_ed1df9621940d6aa1183c365ad1750d2_dep.png | Bin 0 -> 3342 bytes
doc/html/dir_f92e37ed5759424bff98155847b1034b.html | 82 +
.../dir_f92e37ed5759424bff98155847b1034b_dep.map | 4 +
.../dir_f92e37ed5759424bff98155847b1034b_dep.md5 | 1 +
.../dir_f92e37ed5759424bff98155847b1034b_dep.png | Bin 0 -> 3299 bytes
doc/html/doxygen.css | 1366 +++++++
doc/html/doxygen.png | Bin 0 -> 3779 bytes
doc/html/dynsections.js | 104 +
doc/html/files.html | 231 ++
doc/html/ftv2blank.png | Bin 0 -> 86 bytes
doc/html/ftv2cl.png | Bin 0 -> 453 bytes
doc/html/ftv2doc.png | Bin 0 -> 746 bytes
doc/html/ftv2folderclosed.png | Bin 0 -> 616 bytes
doc/html/ftv2folderopen.png | Bin 0 -> 597 bytes
doc/html/ftv2lastnode.png | Bin 0 -> 86 bytes
doc/html/ftv2link.png | Bin 0 -> 746 bytes
doc/html/ftv2mlastnode.png | Bin 0 -> 246 bytes
doc/html/ftv2mnode.png | Bin 0 -> 246 bytes
doc/html/ftv2mo.png | Bin 0 -> 403 bytes
doc/html/ftv2node.png | Bin 0 -> 86 bytes
doc/html/ftv2ns.png | Bin 0 -> 388 bytes
doc/html/ftv2plastnode.png | Bin 0 -> 229 bytes
doc/html/ftv2pnode.png | Bin 0 -> 229 bytes
doc/html/ftv2splitbar.png | Bin 0 -> 314 bytes
doc/html/ftv2vertline.png | Bin 0 -> 86 bytes
doc/html/functions.html | 133 +
doc/html/functions_func.html | 130 +
doc/html/functions_rela.html | 79 +
doc/html/graph_legend.html | 127 +
doc/html/graph_legend.md5 | 1 +
doc/html/graph_legend.png | Bin 0 -> 19871 bytes
doc/html/hierarchy.html | 166 +
doc/html/index.html | 102 +
doc/html/inherit_graph_0.map | 5 +
doc/html/inherit_graph_0.md5 | 1 +
doc/html/inherit_graph_0.png | Bin 0 -> 3556 bytes
doc/html/inherit_graph_1.map | 3 +
doc/html/inherit_graph_1.md5 | 1 +
doc/html/inherit_graph_1.png | Bin 0 -> 965 bytes
doc/html/inherit_graph_10.map | 3 +
doc/html/inherit_graph_10.md5 | 1 +
doc/html/inherit_graph_10.png | Bin 0 -> 844 bytes
doc/html/inherit_graph_11.map | 3 +
doc/html/inherit_graph_11.md5 | 1 +
doc/html/inherit_graph_11.png | Bin 0 -> 1409 bytes
doc/html/inherit_graph_12.map | 3 +
doc/html/inherit_graph_12.md5 | 1 +
doc/html/inherit_graph_12.png | Bin 0 -> 1459 bytes
doc/html/inherit_graph_13.map | 3 +
doc/html/inherit_graph_13.md5 | 1 +
doc/html/inherit_graph_13.png | Bin 0 -> 1343 bytes
doc/html/inherit_graph_14.map | 3 +
doc/html/inherit_graph_14.md5 | 1 +
doc/html/inherit_graph_14.png | Bin 0 -> 1429 bytes
doc/html/inherit_graph_15.map | 3 +
doc/html/inherit_graph_15.md5 | 1 +
doc/html/inherit_graph_15.png | Bin 0 -> 1196 bytes
doc/html/inherit_graph_16.map | 3 +
doc/html/inherit_graph_16.md5 | 1 +
doc/html/inherit_graph_16.png | Bin 0 -> 1100 bytes
doc/html/inherit_graph_17.map | 3 +
doc/html/inherit_graph_17.md5 | 1 +
doc/html/inherit_graph_17.png | Bin 0 -> 721 bytes
doc/html/inherit_graph_18.map | 3 +
doc/html/inherit_graph_18.md5 | 1 +
doc/html/inherit_graph_18.png | Bin 0 -> 1492 bytes
doc/html/inherit_graph_19.map | 3 +
doc/html/inherit_graph_19.md5 | 1 +
doc/html/inherit_graph_19.png | Bin 0 -> 1520 bytes
doc/html/inherit_graph_2.map | 3 +
doc/html/inherit_graph_2.md5 | 1 +
doc/html/inherit_graph_2.png | Bin 0 -> 1840 bytes
doc/html/inherit_graph_20.map | 3 +
doc/html/inherit_graph_20.md5 | 1 +
doc/html/inherit_graph_20.png | Bin 0 -> 1676 bytes
doc/html/inherit_graph_21.map | 3 +
doc/html/inherit_graph_21.md5 | 1 +
doc/html/inherit_graph_21.png | Bin 0 -> 1671 bytes
doc/html/inherit_graph_22.map | 3 +
doc/html/inherit_graph_22.md5 | 1 +
doc/html/inherit_graph_22.png | Bin 0 -> 1481 bytes
doc/html/inherit_graph_23.map | 3 +
doc/html/inherit_graph_23.md5 | 1 +
doc/html/inherit_graph_23.png | Bin 0 -> 1737 bytes
doc/html/inherit_graph_24.map | 3 +
doc/html/inherit_graph_24.md5 | 1 +
doc/html/inherit_graph_24.png | Bin 0 -> 1754 bytes
doc/html/inherit_graph_25.map | 3 +
doc/html/inherit_graph_25.md5 | 1 +
doc/html/inherit_graph_25.png | Bin 0 -> 1346 bytes
doc/html/inherit_graph_26.map | 3 +
doc/html/inherit_graph_26.md5 | 1 +
doc/html/inherit_graph_26.png | Bin 0 -> 1822 bytes
doc/html/inherit_graph_27.map | 3 +
doc/html/inherit_graph_27.md5 | 1 +
doc/html/inherit_graph_27.png | Bin 0 -> 2329 bytes
doc/html/inherit_graph_28.map | 3 +
doc/html/inherit_graph_28.md5 | 1 +
doc/html/inherit_graph_28.png | Bin 0 -> 1572 bytes
doc/html/inherit_graph_29.map | 6 +
doc/html/inherit_graph_29.md5 | 1 +
doc/html/inherit_graph_29.png | Bin 0 -> 7860 bytes
doc/html/inherit_graph_3.map | 3 +
doc/html/inherit_graph_3.md5 | 1 +
doc/html/inherit_graph_3.png | Bin 0 -> 1787 bytes
doc/html/inherit_graph_30.map | 3 +
doc/html/inherit_graph_30.md5 | 1 +
doc/html/inherit_graph_30.png | Bin 0 -> 1411 bytes
doc/html/inherit_graph_31.map | 16 +
doc/html/inherit_graph_31.md5 | 1 +
doc/html/inherit_graph_31.png | Bin 0 -> 60471 bytes
doc/html/inherit_graph_32.map | 3 +
doc/html/inherit_graph_32.md5 | 1 +
doc/html/inherit_graph_32.png | Bin 0 -> 3924 bytes
doc/html/inherit_graph_33.map | 3 +
doc/html/inherit_graph_33.md5 | 1 +
doc/html/inherit_graph_33.png | Bin 0 -> 4628 bytes
doc/html/inherit_graph_34.map | 3 +
doc/html/inherit_graph_34.md5 | 1 +
doc/html/inherit_graph_34.png | Bin 0 -> 1915 bytes
doc/html/inherit_graph_35.map | 3 +
doc/html/inherit_graph_35.md5 | 1 +
doc/html/inherit_graph_35.png | Bin 0 -> 2334 bytes
doc/html/inherit_graph_36.map | 7 +
doc/html/inherit_graph_36.md5 | 1 +
doc/html/inherit_graph_36.png | Bin 0 -> 8435 bytes
doc/html/inherit_graph_37.map | 4 +
doc/html/inherit_graph_37.md5 | 1 +
doc/html/inherit_graph_37.png | Bin 0 -> 1729 bytes
doc/html/inherit_graph_38.map | 3 +
doc/html/inherit_graph_38.md5 | 1 +
doc/html/inherit_graph_38.png | Bin 0 -> 1477 bytes
doc/html/inherit_graph_39.map | 3 +
doc/html/inherit_graph_39.md5 | 1 +
doc/html/inherit_graph_39.png | Bin 0 -> 1721 bytes
doc/html/inherit_graph_4.map | 3 +
doc/html/inherit_graph_4.md5 | 1 +
doc/html/inherit_graph_4.png | Bin 0 -> 2311 bytes
doc/html/inherit_graph_40.map | 3 +
doc/html/inherit_graph_40.md5 | 1 +
doc/html/inherit_graph_40.png | Bin 0 -> 1134 bytes
doc/html/inherit_graph_41.map | 3 +
doc/html/inherit_graph_41.md5 | 1 +
doc/html/inherit_graph_41.png | Bin 0 -> 1161 bytes
doc/html/inherit_graph_42.map | 3 +
doc/html/inherit_graph_42.md5 | 1 +
doc/html/inherit_graph_42.png | Bin 0 -> 1350 bytes
doc/html/inherit_graph_43.map | 3 +
doc/html/inherit_graph_43.md5 | 1 +
doc/html/inherit_graph_43.png | Bin 0 -> 1221 bytes
doc/html/inherit_graph_44.map | 4 +
doc/html/inherit_graph_44.md5 | 1 +
doc/html/inherit_graph_44.png | Bin 0 -> 2164 bytes
doc/html/inherit_graph_5.map | 5 +
doc/html/inherit_graph_5.md5 | 1 +
doc/html/inherit_graph_5.png | Bin 0 -> 4682 bytes
doc/html/inherit_graph_6.map | 3 +
doc/html/inherit_graph_6.md5 | 1 +
doc/html/inherit_graph_6.png | Bin 0 -> 1234 bytes
doc/html/inherit_graph_7.map | 3 +
doc/html/inherit_graph_7.md5 | 1 +
doc/html/inherit_graph_7.png | Bin 0 -> 1350 bytes
doc/html/inherit_graph_8.map | 3 +
doc/html/inherit_graph_8.md5 | 1 +
doc/html/inherit_graph_8.png | Bin 0 -> 1948 bytes
doc/html/inherit_graph_9.map | 3 +
doc/html/inherit_graph_9.md5 | 1 +
doc/html/inherit_graph_9.png | Bin 0 -> 1636 bytes
doc/html/inherits.html | 255 ++
doc/html/logo.png | Bin 0 -> 2661 bytes
doc/html/md_apps.html | 98 +
doc/html/md_examples_pkann.html | 69 +
doc/html/md_examples_pkascii2img.html | 116 +
doc/html/md_examples_pkascii2ogr.html | 67 +
doc/html/md_examples_pkcomposite.html | 75 +
doc/html/md_examples_pkcreatect.html | 80 +
doc/html/md_examples_pkcrop.html | 78 +
doc/html/md_examples_pkdiff.html | 69 +
doc/html/md_examples_pkdsm2shadow.html | 67 +
doc/html/md_examples_pkdumpimg.html | 82 +
doc/html/md_examples_pkdumpogr.html | 87 +
doc/html/md_examples_pkextract.html | 95 +
doc/html/md_examples_pkfilter.html | 92 +
doc/html/md_examples_pkgetmask.html | 69 +
doc/html/md_examples_pkinfo.html | 83 +
doc/html/md_examples_pkpolygonize.html | 67 +
doc/html/md_examples_pkreclass.html | 73 +
doc/html/md_examples_pksetmask.html | 89 +
doc/html/md_examples_pksieve.html | 67 +
doc/html/md_examples_pkstatogr.html | 69 +
doc/html/md_examples_pksvm.html | 71 +
doc/html/md_faq_pkcomposite.html | 87 +
doc/html/md_faq_pksetmask.html | 68 +
doc/html/md_header.html | 75 +
doc/html/md_installation_linux.html | 161 +
doc/html/md_installation_windows.html | 82 +
doc/html/md_mainpage.html | 63 +
doc/html/myfann__cpp_8h_source.html | 4061 ++++++++++++++++++++
doc/html/nav_f.png | Bin 0 -> 153 bytes
doc/html/nav_g.png | Bin 0 -> 95 bytes
doc/html/nav_h.png | Bin 0 -> 98 bytes
doc/html/open.png | Bin 0 -> 123 bytes
doc/html/pages.html | 126 +
doc/html/pkann.html | 160 +
doc/html/pkann_8cc_source.html | 1274 ++++++
doc/html/pkascii2img.html | 108 +
doc/html/pkascii2img_8cc_source.html | 244 ++
doc/html/pkascii2ogr.html | 106 +
doc/html/pkascii2ogr_8cc_source.html | 191 +
doc/html/pkcomposite.html | 167 +
doc/html/pkcomposite_8cc_source.html | 1101 ++++++
doc/html/pkcomposite_8py_source.html | 249 ++
doc/html/pkcomposite__gui_2main_8cc_source.html | 104 +
.../pkcomposite__gui_2mainwindow_8cc_source.html | 332 ++
.../pkcomposite__gui_2mainwindow_8h_source.html | 145 +
doc/html/pkcreatect.html | 106 +
doc/html/pkcreatect_8cc_source.html | 280 ++
doc/html/pkcrop.html | 142 +
doc/html/pkcrop_8cc_source.html | 795 ++++
doc/html/pkcrop_8py_source.html | 216 ++
doc/html/pkcrop__gui_2main_8cc_source.html | 104 +
doc/html/pkcrop__gui_2mainwindow_8cc_source.html | 379 ++
doc/html/pkcrop__gui_2mainwindow_8h_source.html | 153 +
doc/html/pkdiff.html | 136 +
doc/html/pkdiff_8cc_source.html | 971 +++++
doc/html/pkdiff__accuracy_8py_source.html | 277 ++
doc/html/pkdiff__gui_2main_8cpp_source.html | 103 +
doc/html/pkdiff__gui_2mainwindow_8cpp_source.html | 281 ++
doc/html/pkdiff__gui_2mainwindow_8h_source.html | 141 +
doc/html/pkdsm2shadow.html | 106 +
doc/html/pkdsm2shadow_8cc_source.html | 220 ++
doc/html/pkdumpimg.html | 113 +
doc/html/pkdumpimg_8cc_source.html | 421 ++
doc/html/pkdumpogr.html | 99 +
doc/html/pkdumpogr_8cc_source.html | 307 ++
doc/html/pkdumpogr_8h_source.html | 205 +
doc/html/pkeditogr_8cc_source.html | 361 ++
doc/html/pkegcs.html | 97 +
doc/html/pkegcs_8cc_source.html | 176 +
doc/html/pkenhance_8cc_source.html | 274 ++
doc/html/pkextract.html | 136 +
doc/html/pkextract_8cc_source.html | 2517 ++++++++++++
doc/html/pkextract_8py_source.html | 278 ++
doc/html/pkextract__grid_8py_source.html | 262 ++
doc/html/pkextract__gui_2main_8cpp_source.html | 84 +
.../pkextract__gui_2mainwindow_8cpp_source.html | 278 ++
doc/html/pkextract__gui_2mainwindow_8h_source.html | 119 +
doc/html/pkextract__random_8py_source.html | 265 ++
doc/html/pkfillnodata.html | 95 +
doc/html/pkfillnodata_8cc_source.html | 224 ++
doc/html/pkfilter.html | 172 +
doc/html/pkfilter_8cc_source.html | 1044 +++++
doc/html/pkfilter__spatial_8py_source.html | 199 +
doc/html/pkfilter__spectral_8py_source.html | 193 +
doc/html/pkfilterascii.html | 113 +
doc/html/pkfilterascii_8cc_source.html | 385 ++
doc/html/pkfilterdem.html | 107 +
doc/html/pkfilterdem_8cc_source.html | 462 +++
doc/html/pkfilterdem_8py_source.html | 179 +
doc/html/pkfsann.html | 131 +
doc/html/pkfsann_8cc_source.html | 724 ++++
doc/html/pkfsann_8h_source.html | 121 +
doc/html/pkfssvm.html | 143 +
doc/html/pkfssvm_8cc_source.html | 754 ++++
doc/html/pkgetmask.html | 109 +
doc/html/pkgetmask_8cc_source.html | 302 ++
doc/html/pkgetmask_8py_source.html | 211 +
doc/html/pkinfo.html | 151 +
doc/html/pkinfo_8cc_source.html | 460 +++
doc/html/pkkalman.html | 133 +
doc/html/pkkalman_8cc_source.html | 1662 ++++++++
doc/html/pklas2img.html | 126 +
doc/html/pklas2img_8cc_source.html | 629 +++
doc/html/pklas2img_8py_source.html | 222 ++
doc/html/pkndvi_8cc_source.html | 404 ++
doc/html/pkoptsvm.html | 147 +
doc/html/pkoptsvm_8cc_source.html | 680 ++++
doc/html/pkpolygonize.html | 98 +
doc/html/pkpolygonize_8cc_source.html | 203 +
doc/html/pkreclass.html | 108 +
doc/html/pkreclass_8cc_source.html | 434 +++
doc/html/pkreclass_8py_source.html | 211 +
doc/html/pkregann.html | 110 +
doc/html/pkregann_8cc_source.html | 444 +++
doc/html/pksensormodel_8h_source.html | 155 +
doc/html/pksetmask.html | 109 +
doc/html/pksetmask_8cc_source.html | 405 ++
doc/html/pksetmask_8py_source.html | 203 +
doc/html/pksieve.html | 102 +
doc/html/pksieve_8cc_source.html | 196 +
doc/html/pkstat.html | 140 +
doc/html/pkstat_8cc_source.html | 1060 +++++
doc/html/pkstatascii.html | 149 +
doc/html/pkstatascii_8cc_source.html | 488 +++
doc/html/pkstatogr.html | 117 +
doc/html/pkstatogr_8cc_source.html | 283 ++
doc/html/pksvm.html | 178 +
doc/html/pksvm_8cc_source.html | 1397 +++++++
doc/html/pksvm_8py_source.html | 214 ++
doc/html/pksvm__gui_2main_8cpp_source.html | 103 +
doc/html/pksvm__gui_2mainwindow_8cpp_source.html | 353 ++
doc/html/pksvm__gui_2mainwindow_8h_source.html | 151 +
doc/html/pktestOption_8cc_source.html | 129 +
doc/html/pktoolsAlgorithmProvider_8py_source.html | 200 +
doc/html/pktoolsAlgorithm_8py_source.html | 130 +
doc/html/pktoolsUtils_8py_source.html | 166 +
doc/html/structIndexValue-members.html | 76 +
doc/html/structIndexValue.html | 90 +
doc/html/structPosValue-members.html | 77 +
doc/html/structPosValue.html | 93 +
doc/html/structSolver_1_1SolutionInfo-members.html | 83 +
doc/html/structSolver_1_1SolutionInfo.html | 103 +
doc/html/structdecision__function-members.html | 76 +
doc/html/structdecision__function.html | 90 +
doc/html/structsvm__model-members.html | 85 +
doc/html/structsvm__model.html | 124 +
doc/html/structsvm__model__coll__graph.map | 4 +
doc/html/structsvm__model__coll__graph.md5 | 1 +
doc/html/structsvm__model__coll__graph.png | Bin 0 -> 5210 bytes
doc/html/structsvm__node-members.html | 76 +
doc/html/structsvm__node.html | 90 +
doc/html/structsvm__parameter-members.html | 90 +
doc/html/structsvm__parameter.html | 132 +
doc/html/structsvm__problem-members.html | 77 +
doc/html/structsvm__problem.html | 100 +
doc/html/structsvm__problem__coll__graph.map | 3 +
doc/html/structsvm__problem__coll__graph.md5 | 1 +
doc/html/structsvm__problem__coll__graph.png | Bin 0 -> 3027 bytes
doc/html/svm_8cpp_source.html | 3212 ++++++++++++++++
doc/html/svm_8h_source.html | 178 +
doc/html/sync_off.png | Bin 0 -> 853 bytes
doc/html/sync_on.png | Bin 0 -> 845 bytes
doc/html/tab_a.png | Bin 0 -> 142 bytes
doc/html/tab_b.png | Bin 0 -> 169 bytes
doc/html/tab_h.png | Bin 0 -> 177 bytes
doc/html/tab_s.png | Bin 0 -> 184 bytes
doc/html/tabs.css | 60 +
doc/html/vis__studio_2config_8h_source.html | 153 +
doc/installation_linux.dox | 145 +
doc/installation_windows.dox | 24 +
doc/logo.odg | Bin 0 -> 12241 bytes
doc/logo.png | Bin 0 -> 2661 bytes
doc/mainpage.dox | 53 +
ltmain.sh | 4 +-
m4/libtool.m4 | 12 +-
src/algorithms/ConfusionMatrix.cc | 4 +-
src/algorithms/ConfusionMatrix.h | 108 +-
src/algorithms/CostFactory.h | 2 +-
src/algorithms/FeatureSelector.h | 8 +-
src/algorithms/Filter.cc | 4 +
src/algorithms/Filter.h | 29 +-
src/algorithms/Filter2d.cc | 48 +-
src/algorithms/Filter2d.h | 29 +-
src/algorithms/StatFactory.h | 248 +-
src/apps/Makefile.am | 14 +-
src/apps/Makefile.in | 67 +-
src/apps/pkann.cc | 220 +-
src/apps/pkascii2img.cc | 46 +
src/apps/pkascii2ogr.cc | 44 +
src/apps/pkcomposite.cc | 347 +-
src/apps/pkcreatect.cc | 46 +
src/apps/pkcrop.cc | 288 +-
src/apps/pkdiff.cc | 112 +-
src/apps/pkdsm2shadow.cc | 46 +
src/apps/pkdumpimg.cc | 50 +
src/apps/pkdumpogr.cc | 135 +-
src/apps/pkeditogr.cc | 286 --
src/apps/pkegcs.cc | 28 +
src/apps/pkenhance.cc | 199 -
src/apps/pkextract.cc | 130 +-
src/apps/pkfillnodata.cc | 37 +
src/apps/pkfilter.cc | 627 ++-
src/apps/pkfilterascii.cc | 45 +
src/apps/pkfilterdem.cc | 43 +
src/apps/pkfsann.cc | 56 +
src/apps/pkfssvm.cc | 62 +
src/apps/pkgetmask.cc | 45 +
src/apps/pkinfo.cc | 63 +
src/apps/pkkalman.cc | 663 ++--
src/apps/pklas2img.cc | 85 +-
src/apps/pkndvi.cc | 329 --
src/apps/pkoptsvm.cc | 316 +-
src/apps/pkpolygonize.cc | 39 +
src/apps/pkreclass.cc | 47 +-
src/apps/pkregann.cc | 44 +
src/apps/pksetmask.cc | 58 +-
src/apps/pksieve.cc | 39 +
src/apps/pkstat.cc | 390 +-
src/apps/pkstatascii.cc | 63 +
src/apps/pkstatogr.cc | 47 +
src/apps/pksvm.cc | 228 +-
src/base/Optionpk.h | 32 +-
src/imageclasses/ImgReaderGdal.cc | 99 +-
src/imageclasses/ImgReaderGdal.h | 2 +-
src/imageclasses/ImgReaderOgr.cc | 107 +-
src/imageclasses/ImgReaderOgr.h | 6 +-
src/imageclasses/ImgWriterGdal.cc | 47 +
src/imageclasses/ImgWriterGdal.h | 3 +-
921 files changed, 106925 insertions(+), 2189 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index dad167d..4188a7e 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,7 +6,7 @@ version 2.1
- Introduction of configure options
--with-fann (when FANN is installed, needed for pkclassify_nn)
--with-las (when LIBLAS is installed, needed for pklas2img)
- - Introduction of new tools, now includes:
+ - Introduction of new utilities, now includes:
pkascii2img
pkclassify_nn
pkcreatect
@@ -85,15 +85,15 @@ version 2.4
support of cross validation
adding some short options
- pkfs_svm (added)
- feature selection tool for svm classification
+ feature selection utility for svm classification
- pkfs_nn (added)
- feature selection tool for nn classification
+ feature selection utility for nn classification
- pkopt_svm (added)
- optimization tool for svm classification (optimize ccost and gamma using NLOPT)
+ optimization utility for svm classification (optimize ccost and gamma using NLOPT)
- pkascii2ogr
- tool to create simple vector files from coordinates in ASCII file (points or polygon)
+ utility to create simple vector files from coordinates in ASCII file (points or polygon)
- pksensormodel
- tool to model pushbroom sensor (with optimization of boresight angles using NLOPT)
+ utility to model pushbroom sensor (with optimization of boresight angles using NLOPT)
- pkascii2ogr
support csv input file
- pklas2img
@@ -348,6 +348,8 @@ version 2.6.2
- command line help info (change request #43845)
version 2.6.3
+ - configuration of autotools
+ add doc directory in release tarballs (ticket #44484)
- pksvm
solved bug in mask handling
- pkann
@@ -355,14 +357,63 @@ version 2.6.3
- pkcomposite
Advanced option -file supports two modes: 1 (total number of files used) and 2 (sequence number of selected file)
No default for option -srcnodata
+ Support of stdev composite rule (ticket #)
- pkstat
New utility for calculating statistics on raster datasets (regression, histograms, etc.)
+ minor documentation fixes (ticket #44486)
+ support histogram with multiple inputs (sum the values in each bin)
- pkinfo
Removed hist from pkinfo (now in pkstat)
- pkdiff
support double data types for input, but cast to unsigned short in case of accuracy assessment
-
+ - pkkalman
+ minor documentation fixes (ticket #44486)
+ - pkextract
+ support for percentile rule (ticket #108771)
+ close virtual vector writer dataset before opening reader dataset (random and grid sampling)
+ - pklas2img
+ support for percentile composite rule
+ - pkfilter
+ solved bug in spectral response filtering
+ family_opt was not processed for command line argument
+ - pksetmask
+ option mskband
+ - added GUI processing in QGIS
+
+version 2.6.4
+ - ConfusionMatrix.h
+ namespace confusionmatrix
+ support ascii and latex output
+ - Filter.cc
+ do not remove line from buffer stack if dimY==1
+ - pkextract
+ circ option half pixel shift
+ polygon buffer was not created with point or centroid
+ - pkdumpogr
+ support field separator as option (feature request #108834)
+ check for empty input (feature request #108836)
+ - pkcomposite
+ check for empty input
+ image2geo was in assert (did not work in Win Release mode)
+ support mask
+ support extent to cutline
+ - pkdiff
+ support ascii and latex output for confusion matrix
+ - pkfilter
+ bug in close and open vsimem virtual driver does not support metadata
+ - pkcrop
+ support mask
+ support extent to cutline
+ - pksvm
+ support extent to cutline (change request #108835)
+ - pkann
+ support extent to cutline (change request #108835)
+ - FeatureSelector.h
+ compilation error due to redeclaration with default arguments
+ patch from Bas Couwenberg (ticket #45416)
Todo:
+ - pkann
+ support extent to cutline (similar to pksvm, change request #108835)
- todo for API
ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: http://searchcode.com/codesearch/view/18938404)
Img[Reader|Writer]Ogr replace OGRDataSource with GDALDataset conform to GDAL API 2.x
diff --git a/Makefile.am b/Makefile.am
index 81d7d64..de912ef 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,6 +7,7 @@ SUBDIRS = src/base \
src/algorithms \
src/fileclasses \
$(LASCLASSES_OPT) \
+ $(DOX_OPT) \
src/apps
## The generated configuration header is installed in its own subdirectory of
@@ -31,4 +32,11 @@ nodist_pktools_libinclude_HEADERS = config.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = pktools.pc
+########################################################################
+# Additional files to be included in tarball #
+########################################################################
+
+# Here we need include all files that are not mentioned in other Makefiles
+
+EXTRA_DIST = doc
#bin_SCRIPTS = pktools-config
diff --git a/Makefile.in b/Makefile.in
index 3246c9a..a727548 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -379,12 +379,20 @@ SUBDIRS = src/base \
src/algorithms \
src/fileclasses \
$(LASCLASSES_OPT) \
+ $(DOX_OPT) \
src/apps
pktools_libincludedir = $(libdir)/pktools/include
nodist_pktools_libinclude_HEADERS = config.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = pktools.pc
+
+########################################################################
+# Additional files to be included in tarball #
+########################################################################
+
+# Here we need include all files that are not mentioned in other Makefiles
+EXTRA_DIST = doc
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -917,7 +925,6 @@ uninstall-am: uninstall-nodist_pktools_libincludeHEADERS \
uninstall-am uninstall-nodist_pktools_libincludeHEADERS \
uninstall-pkgconfigDATA
-
#bin_SCRIPTS = pktools-config
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/configure b/configure
index 3ab8c93..b5c4ba2 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pktools 2.6.3.
+# Generated by GNU Autoconf 2.69 for pktools 2.6.4.
#
# Report bugs to <kempenep at gmail.com>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='pktools'
PACKAGE_TARNAME='pktools'
-PACKAGE_VERSION='2.6.3'
-PACKAGE_STRING='pktools 2.6.3'
+PACKAGE_VERSION='2.6.4'
+PACKAGE_STRING='pktools 2.6.4'
PACKAGE_BUGREPORT='kempenep at gmail.com'
PACKAGE_URL=''
@@ -1366,7 +1366,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures pktools 2.6.3 to adapt to many kinds of systems.
+\`configure' configures pktools 2.6.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1436,7 +1436,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of pktools 2.6.3:";;
+ short | recursive ) echo "Configuration of pktools 2.6.4:";;
esac
cat <<\_ACEOF
@@ -1562,7 +1562,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-pktools configure 2.6.3
+pktools configure 2.6.4
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2323,7 +2323,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by pktools $as_me 2.6.3, which was
+It was created by pktools $as_me 2.6.4, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3187,7 +3187,7 @@ fi
# Define the identity of the package.
PACKAGE='pktools'
- VERSION='2.6.3'
+ VERSION='2.6.4'
cat >>confdefs.h <<_ACEOF
@@ -7520,7 +7520,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -7545,7 +7545,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -7564,7 +7567,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
@@ -18981,6 +18987,9 @@ fi
done
+
+
+
# Check whether --enable-fann was given.
if test "${enable_fann+set}" = set; then :
enableval=$enable_fann;
@@ -19588,7 +19597,7 @@ fi
# For information on how to properly maintain the library version information,
# refer to the libtool manual, section "Updating library version information":
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-PKTOOLS_SO_VERSION=1:3:0
+PKTOOLS_SO_VERSION=1:4:0
# files to generate via autotools (.am or .in source files)
@@ -20166,7 +20175,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by pktools $as_me 2.6.3, which was
+This file was extended by pktools $as_me 2.6.4, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20232,7 +20241,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-pktools config.status 2.6.3
+pktools config.status 2.6.4
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 98bef35..d6bb620 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([pktools], [2.6.3], [kempenep at gmail.com])
+AC_INIT([pktools], [2.6.4], [kempenep at gmail.com])
#AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AM_INIT_AUTOMAKE([-Wall -Wno-extra-portability foreign])
#AM_INIT_AUTOMAKE([subdir-objects]) #not working due to bug in autoconf, see Debian list: Bug #752993)
@@ -26,6 +26,23 @@ AX_LIB_GDAL([1.10.0]) dnl uncomment if gdal version 1.10.0 is required
AC_CHECK_HEADERS([gdal.h])
+dnl uncomment if there is a need to compile doc in distro
+dnl check if doxygen is installed
+
+dnl AC_CHECK_PROGS([DOXYGEN], [doxygen])
+dnl if test -z "$DOXYGEN";
+dnl then AC_MSG_WARN([Doxygen not found - continuing without Doxygen support])
+dnl fi
+
+dnl Check to see if we have Doxygen and if so, add some files to later be processed.
+dnl AM_CONDITIONAL([HAVE_DOXYGEN],[test -n "$DOXYGEN"])
+dnl #AM_COND_IF([HAVE_DOXYGEN],
+dnl DOX_OPT="doc"
+ dnl AC_SUBST([DOX_OPT])
+ dnl [AC_CONFIG_FILES([
+ dnl doc/Doxyfile
+ dnl doc/Makefile])])
+
dnl Default-disabled features
AC_ARG_ENABLE([fann],
AS_HELP_STRING([--enable-fann], [Enable feature fann]))
@@ -97,7 +114,7 @@ AC_SUBST([LIBS])
# For information on how to properly maintain the library version information,
# refer to the libtool manual, section "Updating library version information":
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-AC_SUBST([PKTOOLS_SO_VERSION], [1:3:0])
+AC_SUBST([PKTOOLS_SO_VERSION], [1:4:0])
# files to generate via autotools (.am or .in source files)
AC_CONFIG_HEADERS([config.h])
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644
index 0000000..56fb28b
--- /dev/null
+++ b/doc/Doxyfile
@@ -0,0 +1,2303 @@
+# Doxyfile 1.8.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = pktools
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = 2.6.3
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "Processing Kernel for geospatial data"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO = logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING += dox=md
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = ..
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+# defined cascading style sheet that is included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet file to the output directory. For an example
+# see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavours of web server based searching depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools. See
+# the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+# replace them by respectively the title of the page, the current date and time,
+# only the current date, the version number of doxygen, the project name (see
+# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = YES
+
+# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all refrences to function-like macros that are alone on a line, have an
+# all uppercase name, and do not end with a semicolon. Such function macros are
+# typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have an unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font n the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP = YES
diff --git a/doc/Doxyfile.good b/doc/Doxyfile.good
new file mode 100644
index 0000000..526a058
--- /dev/null
+++ b/doc/Doxyfile.good
@@ -0,0 +1,1899 @@
+# Doxyfile 1.8.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = pktools
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = 2.6.3
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "Processing Kernel for remote sensing data"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO = logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING += dox=md
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if section-label ... \endif
+# and \cond section-label ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path. Do not use
+# file names with spaces, bibtex cannot handle them.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page (index.html).
+# This can be useful if you have a project on for instance GitHub and want reuse
+# the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
+# SVG. The default value is HTML-CSS, which is slower, but has the best
+# compatibility.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript.
+# There are two flavours of web server based search depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools.
+# See the manual for details.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain
+# the search results. Doxygen ships with an example indexer (doxyindexer) and
+# search engine (doxysearch.cgi) which are based on the open source search engine
+# library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will returned the search results when EXTERNAL_SEARCH is enabled.
+# Doxygen ships with an example search engine (doxysearch) which is based on
+# the open source search engine library Xapian. See the manual for configuration
+# details.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
+# of to a relative location where the documentation can be found.
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/doc/Doxyfile.in~ b/doc/Doxyfile.in~
new file mode 100644
index 0000000..137facb
--- /dev/null
+++ b/doc/Doxyfile.in~
@@ -0,0 +1,2303 @@
+# Doxyfile 1.8.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = "My Project"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+# defined cascading style sheet that is included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet file to the output directory. For an example
+# see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavours of web server based searching depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools. See
+# the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+# replace them by respectively the title of the page, the current date and time,
+# only the current date, the version number of doxygen, the project name (see
+# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = YES
+
+# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
+# validating XML parser to check the syntax of the XML files.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all refrences to function-like macros that are alone on a line, have an
+# all uppercase name, and do not end with a semicolon. Such function macros are
+# typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have an unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font n the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP = YES
diff --git a/doc/Doxyfile~ b/doc/Doxyfile~
new file mode 100644
index 0000000..92987e3
--- /dev/null
+++ b/doc/Doxyfile~
@@ -0,0 +1,1869 @@
+# Doxyfile 1.8.3.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME =
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "Processing Kernel for remote sensing data"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO = doc/logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING += dox=md
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if section-label ... \endif
+# and \cond section-label ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path. Do not use
+# file names with spaces, bibtex cannot handle them.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page (index.html).
+# This can be useful if you have a project on for instance GitHub and want reuse
+# the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = doc/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
+# SVG. The default value is HTML-CSS, which is slower, but has the best
+# compatibility.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript.
+# There are two flavours of web server based search depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools.
+# See the manual for details.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain
+# the search results. Doxygen ships with an example indexer (doxyindexer) and
+# search engine (doxysearch.cgi) which are based on the open source search engine
+# library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will returned the search results when EXTERNAL_SEARCH is enabled.
+# Doxygen ships with an example search engine (doxysearch) which is based on
+# the open source search engine library Xapian. See the manual for configuration
+# details.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
+# of to a relative location where the documentation can be found.
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..e604c94
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,17 @@
+if HAVE_DOXYGEN
+#directory = $(top_srcdir)/doc/man/man3/
+#dist_man_MANS = $(directory)/man_page_1.3 $(directory)/man_page_2.3
+#$(directory)/man_page_1.3: doxyfile.stamp
+#$(directory)/man_page_2.3: doxyfile.stamp
+
+doxyfile.stamp:
+# $(top_srcdir)/doc/createappsdox.sh $(top_srcdir)
+ $(DOXYGEN) Doxyfile
+ echo Timestamp > doxyfile.stamp
+
+CLEANFILES = doxyfile.stamp
+
+all-local: doxyfile.stamp
+clean-local:
+ rm -rf $(top_srcdir)/doc/html
+endif
diff --git a/doc/apps.dox b/doc/apps.dox
new file mode 100644
index 0000000..b30b3f2
--- /dev/null
+++ b/doc/apps.dox
@@ -0,0 +1,32 @@
+\section available_tools Available tools
+- \ref pkann classify raster image using Artificial Neural Network
+- \ref pkascii2img program to create raster image based on ascii file
+- \ref pkascii2ogr program to create vector points or polygons from text file
+- \ref pkcomposite program to mosaic and composite geo-referenced images
+- \ref pkcreatect program to create and import colour table to GTiff image
+- \ref pkcrop perform raster data operations on image such as crop, extract and stack bands
+- \ref pkdiff program to compare two raster image files
+- \ref pkdsm2shadow program to calculate sun shadow based on digital surface model and sun angles
+- \ref pkdumpimg program to dump image content to ascii or std out
+- \ref pkdumpogr dump ogr file to text file or standard output
+- \ref pkegcs Utility for raster files in European Grid Coordinate System
+- \ref pkextract extract pixel values from raster image from a (vector or raster) sample
+- \ref pkfillnodata program to fill holes in raster image
+- \ref pkfilterascii program to filter data in an ASCII file
+- \ref pkfilter program to filter raster images
+- \ref pkfilterdem Filter digital elevation model raster datasets
+- \ref pkfsann feature selection for artificial neural network classifier pkann
+- \ref pkfssvm feature selection for support vector machine classifier pksvm
+- \ref pkgetmask program to create mask image based on values in input raster image
+- \ref pkinfo Report basic information from raster datasets (similar to gdalinfo)
+- \ref pklas2img Rasterize LAS/LAZ point clouds with filtering/compositing options
+- \ref pkoptsvm program to optimize parameters for support vector machine classifier pksvm
+- \ref pkpolygonize program to make vector file from raster image
+- \ref pkreclass program to replace pixel values in raster image
+- \ref pkregann regression with artificial neural network (multi-layer perceptron)
+- \ref pksetmask program to apply mask image (set invalid values) to raster image
+- \ref pksieve program to sieve filter raster image
+- \ref pkstatascii program to calculate basic statistics from text file
+- \ref pkstat program to calculate basic statistics from raster dataset
+- \ref pkstatogr program to calculate basic statistics from vector file
+- \ref pksvm classify raster image using Support Vector Machine
diff --git a/doc/apps.dox~ b/doc/apps.dox~
new file mode 100644
index 0000000..5c06efc
--- /dev/null
+++ b/doc/apps.dox~
@@ -0,0 +1,33 @@
+\section available_tools Available tools
+- \ref pkann classify raster image using Artificial Neural Network
+- \ref pkascii2img program to create raster image based on ascii file
+- \ref pkascii2ogr program to create vector points or polygons from text file
+- \ref pkcomposite program to mosaic and composite geo-referenced images
+- \ref pkcreatect program to create and import colour table to GTiff image
+- \ref pkcrop perform raster data operations on image such as crop, extract and stack bands
+- \ref pkdiff program to compare two raster image files
+- \ref pkdsm2shadow program to calculate sun shadow based on digital surface model and sun angles
+- \ref pkdumpimg program to dump image content to ascii or std out
+- \ref pkdumpogr dump ogr file to text file or standard output
+- \ref pkegcs Utility for raster files in European Grid Coordinate System
+- \ref pkextract extract pixel values from raster image from a (vector or raster) sample
+- \ref pkfillnodata program to fill holes in raster image
+- \ref pkfilterascii program to filter data in an ASCII file
+- \ref pkfilter program to filter raster images
+- \ref pkfilterdem Filter digital elevation model raster datasets
+- \ref pkfsann feature selection for artificial neural network classifier pkann
+- \ref pkfssvm feature selection for support vector machine classifier pksvm
+- \ref pkgetmask program to create mask image based on values in input raster image
+- \ref pkinfo Report basic information from raster datasets (similar to gdalinfo)
+- \ref pkkalman program to kalman raster images
+- \ref pklas2img Rasterize LAS/LAZ point clouds with filtering/compositing options
+- \ref pkoptsvm program to optimize parameters for support vector machine classifier pksvm
+- \ref pkpolygonize program to make vector file from raster image
+- \ref pkreclass program to replace pixel values in raster image
+- \ref pkregann regression with artificial neural network (multi-layer perceptron)
+- \ref pksetmask program to apply mask image (set invalid values) to raster image
+- \ref pksieve program to sieve filter raster image
+- \ref pkstatascii program to calculate basic statistics from text file
+- \ref pkstat program to calculate basic statistics from raster dataset
+- \ref pkstatogr program to calculate basic statistics from vector file
+- \ref pksvm classify raster image using Support Vector Machine
diff --git a/doc/createappsdox.sh b/doc/createappsdox.sh
new file mode 100755
index 0000000..6cbd81b
--- /dev/null
+++ b/doc/createappsdox.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+if [ "$#" -eq 1 ];then
+ SRCDIR=$1
+else
+ SRCDIR=../src
+fi
+
+# echo "create header"
+
+# echo "create dox files for applications"
+# for file in ${SRCDIR}/apps/pk*.cc;do
+# THETOOL=$(basename $file .cc)
+# echo ${THETOOL}
+
+# THESHORTDESCRIPTION=$(grep "${THETOOL}.cc: " $file | awk -v FS=':' '{print $2}')
+# USAGE=$(${THETOOL} -h|grep Usage)
+# cat > ${SRCDIR}/../doc/${THETOOL}.dox <<EOF
+# \section $THETOOL $THETOOL
+# $THESHORTDESCRIPTION
+# ## SYNOPSIS
+
+# <code>
+# ${USAGE}
+# </code>
+
+# EOF
+
+# #create description if not exists
+# if [ ! -f ../doc/description_${THETOOL}.dox ];then
+# touch ../doc/description_${THETOOL}.dox
+# fi
+# cat ../doc/description_${THETOOL}.dox >> ../doc/${THETOOL}.dox
+
+# ## OPTIONS ##
+# cat >> ../doc/${THETOOL}.dox <<EOF
+# \section ${THETOOL}_options Options
+# - use either \`-short\` or \`--long\` options (both \`--long=value\` and \`--long value\` are supported)
+# - short option \`-h\` shows basic options only, long option \`--help\` shows all options
+# |short|long|type|default|description|
+# |-----|----|----|-------|-----------|
+# EOF
+
+# ${THETOOL} --doxygen|sed '$d' >> ../doc/${THETOOL}.dox
+# echo >> ../doc/${THETOOL}.dox
+# if [ -f examples_${THETOOL}.dox ];then
+# echo "Examples" >> ../doc/${THETOOL}.dox
+# echo "========" >> ../doc/${THETOOL}.dox
+# echo "Some examples how to use ${THETOOL} can be found \\ref examples_${THETOOL} \"here\"" >> ../doc/${THETOOL}.dox
+# fi
+# if [ -f faq_${THETOOL}.dox ];then
+# echo "FAQ" >> ../doc/${THETOOL}.dox
+# echo "========" >> ../doc/${THETOOL}.dox
+# echo "Frequently asked questions on ${THETOOL} can be found \\ref faq_${THETOOL} \"here\"" >> ../doc/${THETOOL}.dox
+# fi
+# done
+
+echo "create general dox file for aps list"
+echo "\section available_tools Available tools" > ../doc/apps.dox
+for file in ${SRCDIR}/apps/pk*.cc;do
+ THETOOL=$(basename $file .cc)
+ THESHORTDESCRIPTION=$(grep "${THETOOL}.cc: " $file | awk -v FS=':' '{print $2}')
+ echo "- \\ref ${THETOOL} ${THESHORTDESCRIPTION}";
+done >> ../doc/apps.dox
+
+#remove depricated utilities and those not ready to publish"
+
+echo "Savannah repository for homepage can only be maintained via cvs"
+#mkdir ~/tmp
+#cd ~/tmp
+#cvs -z3 -d:ext:kempenep at cvs.sv.gnu.org:/web/pktools co pktools
+#cd pktools/html
+#rm *
+#cvs rm *
+#rsync -avz <orig html>/ ~/tmp/pktools/html
+#cvs add *.*
+#cvs commit -m "update of repository homepage"
+#rm -r ~/tmp/pktools
+echo "ftp to downloads"
+#sftp kempenep at download.savannah.gnu.org:/releases/pktools
diff --git a/doc/examples_pkann.dox b/doc/examples_pkann.dox
new file mode 100644
index 0000000..3ea589f
--- /dev/null
+++ b/doc/examples_pkann.dox
@@ -0,0 +1,15 @@
+\section examples_pkann Examples of pkann
+
+Classify input image input.tif with an Artificial Neural Network using one hidden layer with 5 neurons. A training sample that is provided as an OGR vector dataset. It contains all features (same dimensionality as input.tif) in its fields (please check \ref pkextract "pkextract" on how to obtain such a file from a "clean" vector file containing locations only). A two-fold cross validation (cv) is performed (output on screen).
+
+\code
+pkann -i input.tif -t training.sqlite -o output.tif --nneuron 5 -cv 2
+\endcode
+
+Same example as above, but use two hidden layers with 15 and 5 neurons respectively
+
+\code
+pkann -i input.tif -t training.sqlite -o output.tif --nneuron 15 --neuron 5 -cv 2
+\endcode
+
+
diff --git a/doc/examples_pkascii2img.dox b/doc/examples_pkascii2img.dox
new file mode 100644
index 0000000..887417e
--- /dev/null
+++ b/doc/examples_pkascii2img.dox
@@ -0,0 +1,64 @@
+\section examples_pkascii2img Examples of pkascii2img
+
+We create a 5x5 raster dataset containing all 0 values except for its center (value=1)
+
+\code
+cat input.txt
+
+0 0 0 0 0
+0 0 0 0 0
+0 0 1 0 0
+0 0 0 0 0
+0 0 0 0 0
+\endcode
+
+We define a pixel size of 25 by 25 m and and a projected in the European projection system ETS89/LAEA. The location of the upper left pixel is also set:
+
+\code
+pkascii2img -i input.txt -o output.tif -of GTiff -a_srs epsg:3035 -dx 25 -dy 25 -ulx 1000000 -uly 1000000
+\endcode
+
+We check the output GeoTIFF using gdalinfo :
+
+\code
+gdalinfo output.tif
+
+Driver: GTiff/GeoTIFF
+Files: output.tif
+Size is 5, 5
+Coordinate System is:
+PROJCS["ETRS89 / LAEA Europe",
+ GEOGCS["ETRS89",
+ DATUM["European_Terrestrial_Reference_System_1989",
+ SPHEROID["GRS 1980",6378137,298.2572221010042,
+ AUTHORITY["EPSG","7019"]],
+ TOWGS84[0,0,0,0,0,0,0],
+ AUTHORITY["EPSG","6258"]],
+ PRIMEM["Greenwich",0],
+ UNIT["degree",0.0174532925199433],
+ AUTHORITY["EPSG","4258"]],
+ PROJECTION["Lambert_Azimuthal_Equal_Area"],
+ PARAMETER["latitude_of_center",52],
+ PARAMETER["longitude_of_center",10],
+ PARAMETER["false_easting",4321000],
+ PARAMETER["false_northing",3210000],
+ UNIT["metre",1,
+ AUTHORITY["EPSG","9001"]],
+ AUTHORITY["EPSG","3035"]]
+Origin = (1000000.000000000000000,1000000.000000000000000)
+Pixel Size = (25.000000000000000,-25.000000000000000)
+Metadata:
+ AREA_OR_POINT=Area
+ TIFFTAG_DATETIME=2014:11:08 11:33:52
+ TIFFTAG_DOCUMENTNAME=output.tif
+ TIFFTAG_SOFTWARE=pktools 2.5.4 by Pieter Kempeneers
+Image Structure Metadata:
+ INTERLEAVE=BAND
+Corner Coordinates:
+Upper Left ( 1000000.000, 1000000.000) ( 23d13' 9.44"W, 25d30'21.01"N)
+Lower Left ( 1000000.000, 999875.000) ( 23d13' 8.02"W, 25d30'17.24"N)
+Upper Right ( 1000125.000, 1000000.000) ( 23d13' 5.27"W, 25d30'22.72"N)
+Lower Right ( 1000125.000, 999875.000) ( 23d13' 3.85"W, 25d30'18.95"N)
+Center ( 1000062.500, 999937.500) ( 23d13' 6.65"W, 25d30'19.98"N)
+Band 1 Block=5x5 Type=Byte, ColorInterp=Gray
+\endcode
\ No newline at end of file
diff --git a/doc/examples_pkascii2ogr.dox b/doc/examples_pkascii2ogr.dox
new file mode 100644
index 0000000..92a2ac9
--- /dev/null
+++ b/doc/examples_pkascii2ogr.dox
@@ -0,0 +1,7 @@
+\section examples_pkascii2ogr Examples of pkascii2ogr
+
+Create a vector shape file (output.shp) from input ASCII file (input.txt). The coordinates x (longitude) and y (latitude) can be found in input.txt as columns 3 and 2 respectively (columns start counting from 0). The remaining 2 columns in input.txt are used as fields (attributes) of type integer: id (column 0) and label (column 3). The projection is set to lat lon (epsg:4326).
+
+\code
+pkascii2ogr -i input.txt -o output.shp -x 2 -y 1 -n id -ot Integer -n label -ot Integer -a_srs epsg:4326
+\endcode
diff --git a/doc/examples_pkcomposite.dox b/doc/examples_pkcomposite.dox
new file mode 100644
index 0000000..01d8f4d
--- /dev/null
+++ b/doc/examples_pkcomposite.dox
@@ -0,0 +1,32 @@
+\section examples_pkcomposite Examples of pkcomposite
+
+Create a composit from two input images. If images overlap, keep only last image (default rule)
+
+\code
+pkcomposite -i input1.tif -i input2.tif -o output.tif
+\endcode
+
+Create a composit from two input images. Values of 255 in band 1 (starting from 0) are masked as invalid. Typically used when second band of input image is a cloud mask
+
+\code
+pkcomposite -i input1.tif -i input2.tif -srcnodata 255 -bndnodata 1 -dstnodata 0 -o output.tif
+\endcode
+
+Create a maximum NDVI (normalized difference vegetation index) composit. Values of 255 in band 0 are masked as invalid and flagged as 0 if no other valid coverage. Typically used for (e.g., MODIS) images where red and near infrared spectral bands are stored in bands 0 and 1 respectively. In this particular case, a value of 255 in the first input band indicates a nodata value (e.g., cloud mask is coded within the data values).
+
+\code
+pkcomposite -i input1.tif -i input2.tif -cr maxndvi -cb 0 -cb 1 -srcnodata 255 -bndnodata 0 -dstnodata 0 -o output.tif
+\endcode
+
+Create a composite image using weighted mean: output=(3/4*input1+6/4*input2+3/4*input2)/3.0
+
+\code
+pkcomposite -i input1.tif -i input2.tif -i input3.tif -o output.tif -cr mean -w 0.75 -w 1.5 -w 0.75
+\endcode
+
+Create a median composit of all GTiff images found in current directory that cover (at least part of) the image coverage.tif. Values smaller or equal to 0 are set as nodata 0 (default value for -dstnodata)
+
+\code
+pkcomposite -i large.tif $(for IMAGE in *.tif;do pkinfo -i $IMAGE --cover $(pkinfo -i coverage.tif -bb);done) -cr median -min 0 -o output.tif
+\endcode
+
diff --git a/doc/examples_pkcreatect.dox b/doc/examples_pkcreatect.dox
new file mode 100644
index 0000000..24c9aa4
--- /dev/null
+++ b/doc/examples_pkcreatect.dox
@@ -0,0 +1,36 @@
+\section examples_pkcreatect Examples of pkcreatect
+
+Attach a color table to image with values between 0 and 50
+
+\code
+pkcreatect -i image.tif -o image_ct.tif -min 0 -max 50
+\endcode
+
+Attach a grey scale "color" table to image with values between 0 and 100 and create a legend image (annotation needs to be drawn manually)
+
+\code
+pkcreatect -i image.tif -o image_ct.tif -min 0 -max 100 -l legend.tif -g
+\endcode
+
+Attach a predefined color table to image.tif. The colortable has 5 entries for the values 0 (black), 1 (red), 2 (green), 3 (blue) and 4 (grey)
+
+\code
+cat colortable.txt
+
+0 0 0 0 255
+1 255 0 0 255
+2 0 255 0 255
+3 0 0 255 255
+4 100 100 100 255
+\endcode
+
+\code
+pkcreatect -i image.tif -o image_ct.tif -ct colortable.txt
+\endcode
+
+Remove the color table from an image
+
+\code
+pkcreatect -i image.tif -o image_noct.tif -ct none
+\endcode
+
diff --git a/doc/examples_pkcrop.dox b/doc/examples_pkcrop.dox
new file mode 100644
index 0000000..46d5d6f
--- /dev/null
+++ b/doc/examples_pkcrop.dox
@@ -0,0 +1,38 @@
+\section examples_pkcrop Examples of pkcrop
+
+Crop the input image to the given bounding box
+
+\code
+pkcrop -i input.tif -ulx 100 -uly 1000 -lrx 600 -lry 100 -o output.tif
+\endcode
+
+Crop the input image to the envelop of the given polygon and mask all pixels outside polygon as 0 (using gdal_rasterize)
+
+\code
+pkcrop -i input.tif -e extent.shp -o output.tif
+gdal_rasterize -i -burn 0 -l extent extent.shp output.tif
+\endcode
+
+Extract bands 3,2,1 (starting from 0) in that order from multi-band raster image input.tif
+
+\code
+pkcrop -i input.tif -b 3 -b 2 -b 1 -o output.tif
+\endcode
+
+Scale raster floating point image fimage.tif with factor 100 and write as single byte image with the given colourtable (for auto scaling, see next example)
+
+\code
+pkcrop -i fimage.tif -s 100 -ot Byte -o bimage.tif -ct colortable.txt
+\endcode
+
+Automatically scale raster floating point image fimage.tif to [0:100] and write the output as a single byte image with the given colourtable
+
+\code
+pkcrop -i fimage.tif -as 0 -as 100 -ot Byte -o bimage.tif -ct colortable.txt
+\endcode
+
+Crop raster image large.tif to the bounding box of raster image small.tif and use the same pixel size.
+
+\code
+pkcrop -i large.tif $(pkinfo -i small.tif -bb -dx -dy) -o output.tif
+\endcode
diff --git a/doc/examples_pkdiff.dox b/doc/examples_pkdiff.dox
new file mode 100644
index 0000000..f089f9b
--- /dev/null
+++ b/doc/examples_pkdiff.dox
@@ -0,0 +1,14 @@
+\section examples_pkdiff Examples of pkdiff
+
+Check if two raster images are different (reports only if images are different or not)
+
+\code
+pkdiff -i input.tif -ref reference.tif
+\endcode
+
+Validate a classification map using points from a reference sample and report confusion matrix
+
+\code
+pkdiff -i classificationMap.tif -ref referencePoints.shp -cm
+\endcode
+
diff --git a/doc/examples_pkdsm2shadow.dox b/doc/examples_pkdsm2shadow.dox
new file mode 100644
index 0000000..abe657f
--- /dev/null
+++ b/doc/examples_pkdsm2shadow.dox
@@ -0,0 +1,8 @@
+\section examples_pkdsm2shadow Examples of pkdsm2shadow
+
+Create a shadow mask for the input raster dataset dsm.tif, using Sun zenith angle of 10 degrees and a Sun azimuth angle of 135 degrees (South-South-East). All shadow pixels are set to a value of 1.
+
+\code
+pkdsm2shadow -i dsm.tif -sza 10 -saa 170 -f 1 -o shadow.tif
+\endcode
+
diff --git a/doc/examples_pkdumpimg.dox b/doc/examples_pkdumpimg.dox
new file mode 100644
index 0000000..c2fe0c1
--- /dev/null
+++ b/doc/examples_pkdumpimg.dox
@@ -0,0 +1,33 @@
+\section examples_pkdumpimg Examples of pkdumpimg
+
+We create a 5x5 raster dataset containing all 0 values except for its center (value=1)
+
+\code
+cat input.txt
+
+0 0 0 0 0
+0 0 0 0 0
+0 0 1 0 0
+0 0 0 0 0
+0 0 0 0 0
+\endcode
+
+Use \ref pkascii2img "pkascii2img" to create an raster dataset from input.txt
+
+\code
+pkascii2img -i input.txt -o output.tif -of GTiff -a_srs epsg:3035 -dx 25 -dy 25 -ulx 1000000 -uly 1000000
+\endcode
+
+Dump the image content of output.tif to screen
+
+\code
+pkdumpimg -i output.tif
+\endcode
+
+\code
+0 0 0 0 0
+0 0 0 0 0
+0 0 1 0 0
+0 0 0 0 0
+0 0 0 0 0
+\endcode
diff --git a/doc/examples_pkdumpogr.dox b/doc/examples_pkdumpogr.dox
new file mode 100644
index 0000000..e869e47
--- /dev/null
+++ b/doc/examples_pkdumpogr.dox
@@ -0,0 +1,45 @@
+\section examples_pkdumpogr Examples of pkdumpogr
+
+Dump the attributes label and description for the vector dataset sample.sqlite to standard output (screen)
+
+\code
+pkdumpogr -i sample.sqlite -n label -n description
+\endcode
+
+\code
+0 2 noforest
+1 2 noforest
+2 2 noforest
+3 2 noforest
+4 2 noforest
+5 2 noforest
+6 2 noforest
+7 2 noforest
+8 2 noforest
+9 2 noforest
+10 1 forest
+11 2 noforest
+\endcode
+
+Similar to previous example, but transpose output (does not work without explicitly defining options -n for attributes)
+
+\code
+pkdumpogr -i sample.sqlite -n label -n description -t
+\endcode
+
+\code
+0 2 2 2 2 2 2 2 2 2 2 1 2
+1 noforest noforest noforest noforest noforest noforest noforest noforest noforest noforest forest noforest
+\endcode
+
+Dump the entire content of vector dataset input.sqlite to standard output
+
+\code
+pkdumpogr -i input.sqlite
+\endcode
+
+Dump only ATTRIBUTE of vector dataset input.sqlite including x and y position and output to ASCII file output.txt
+
+\code
+pkdumpogr -i input.sqlite -o output.txt -n ATTRIBUTE -pos
+\endcode
diff --git a/doc/examples_pkextract.dox b/doc/examples_pkextract.dox
new file mode 100644
index 0000000..2397f84
--- /dev/null
+++ b/doc/examples_pkextract.dox
@@ -0,0 +1,79 @@
+\section examples_pkextract Examples of pkextract
+
+\subsection example_pkextract_vector Using vector samples
+
+Extract all points for all layers read in points.sqlite from input.tif. Create a new point vector dataset named extracted.sqlite, where each point will contain an attribute for the individual input bands in input.tif. Notice that the default vector format is Spatialite (.sqlite).
+
+\code
+pkextract -i input.tif -s points.sqlite -o extracted.sqlite
+\endcode
+
+Same example as above, but only extract the points for the layer in points.sqlite named "valid"
+
+\code
+pkextract -i input.tif -s points.sqlite -ln valid -o extracted.sqlite
+\endcode
+
+Extract points and write output in ESRI Shapefile format
+
+\code
+pkextract -i input.tif -s points.shp -f "ESRI Shapefile" -o extracted.shp
+\endcode
+
+Extract the standard deviation for each input band in a 3 by 3 window, centered around the points in the sample vector dataset points.sqlite. The output vector dataset will contain polygon features defined by the buffered points (3x3 window). Use the option -circ to define a circular buffer.
+
+\code
+pkextract -i input.tif -s points.sqlite -o extracted.sqlite -r stdev -buf 3 -polygon
+\endcode
+
+Extract all pixels from input.tif covered by the polygons in locations.sqlite. Each polygon can thus result in multiple point features with attributes for each input band. Write the extracted points to a point vector dataset training.sqlite.
+
+\code
+pkextract -i input.tif -s polygons.sqlite -o training.sqlite -r point
+\endcode
+
+Extract the first band from input.tif at the centroids of the polygons in vector dataset polygons.sqlite. Assign the extracted point value to a new attribute of the polygon and write to the vector dataset extracted.sqlite.
+
+\code
+pkextract -i input.tif -b 0 -s polygons.sqlite -r centroid -o extracted.sqlite -polygon
+\endcode
+Extract the mean values for the second band in input.tif covered by each polygon in polygons.sqlite. The mean values are written to a copy of the polygons in output vector dataset extracted.sqlite
+
+\code
+pkextract -i input.tif -b 1 -s polygons.sqlite -r mean -o extracted.sqlite -polygon
+\endcode
+
+Extract the majority class in each polygon for the input land cover map. The land cover map contains five valid classes, labeled 1-5. Other class values (e.g., labeled as 0) are not taken into account in the voting.
+
+\code
+pkextract -i landcover.tif -s polygons.sqlite -r maxvote -o majority.sqlite -polygon -c 1 -c 2 -c 3 -c 4 -c 5
+\endcode
+
+\subsection example_pkextract_random Using random and grid samples
+
+Extract 100 sample units following a simple random sampling design. For each sample unit, the median value is extracted from the input raster dataset in a window of 3 by 3 pixels and written to an attribute of the output vector dataset. The output vector dataset contains polygon features defined by the windows centered at the random selected sample units.
+
+\code
+pkextract -i input.tif -o random.sqlite -rand 100 -r median -buf 3 -polygon
+\endcode
+
+Extract points following a systematic grid with grid cell size of 100 m. Discard pixels that have a value 0 in the input raster dataset.
+
+\code
+pkextract -i input.tif -o systematic.sqlite -grid 100 -srcnodata 0
+\endcode
+
+\subsection example_pkextract_raster Using raster samples
+
+Typical use where pixels are extracted based on a land cover map (sample.tif). Extract all bands for a random sample of 10 percent of the pixels in the land cover map sample.tif where the land cover classes are either 1,2 or 3 (class values). Write output to the point vector dataset extracted.sqlite.
+
+\code
+pkextract -i input.tif -s sample.tif -o extracted.sqlite -t 10 -c 1 -c 2 -c 3
+\endcode
+
+Extract all bands for the first 5000 pixels encountered in sample.tif where pixels have a value equal to 1. Write output to point vector dataset extracted.sqlite.
+
+\code
+pkextract -i input.tif -s sample.tif -o extracted.sqlite -t -5000 -c 1
+\endcode
+
diff --git a/doc/examples_pkfilter.dox b/doc/examples_pkfilter.dox
new file mode 100644
index 0000000..d4e04af
--- /dev/null
+++ b/doc/examples_pkfilter.dox
@@ -0,0 +1,61 @@
+\section examples_pkfilter Examples of pkfilter
+
+\subsection examples_pkfilter_spatial Filtering in spatial domain
+
+Filter input.tif with morphological dilation filter. Use a circular kernel (instead of rectangular) of size 3x3.
+
+\code
+pkfilter -i input.tif -o filter.tif -dx 3 -dy 3 -f dilate -circ
+\endcode
+
+Similar to previous example, but consider only values of 255 for filtering operation. Typical usage: dilate cloud values in input image that are flagged as 255
+
+\code
+pkfilter -i input.tif -o filter.tif -dx 3 -dy 3 -class 255 -f dilate -circ
+\endcode
+
+\subsection examples_pkfilter_spectral Filtering in spectral/temporal domain
+
+\subsubsection examples_pkfilter_spectral_moving_window Applications with moving window
+
+Calculate the median value for each pixel, calculated on a moving window of width 3 (-dz 3) over all input bands. The output raster dataset will contain as many bands as the input raster dataset.
+
+\code
+pkfilter -i input.tif -o filter_stdev.tif -dz 3 -f median
+\endcode
+
+\subsubsection examples_pkfilter_spectral_no_moving_window Applications without moving window
+
+Calculate the standard deviation for each pixel, calculated on all input bands. The output raster dataset will contain a single band only, no moving window is used (-dz 1).
+
+\code
+pkfilter -i input.tif -o filter_stdev.tif -dz 1 -f stdev
+\endcode
+
+"Smooth" (interpolate) nodata in spectral/temporal domain (-dz 1), using a linear interpolation. The following interpolation types are supported: akima (default), linear, polynomial, cspline, cspline_periodic, akima_periodic (please check <a href="http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html">gsl</a> page for more information on the interpolation types).
+
+\code
+pkfilter -i input.tif -o input_smoothed.tif -dz 1 -f smoothnodata -interp linear
+\endcode
+
+\subsubsection examples_pkfilter_srf Filter with spectral response functions
+
+The following two examples show how to use pkfilter for spectral filtering a high dimensional input (hyperspectral image) to a lower dimensional output (multi-spectral image). Notice that the input wavelenghts must be provided as -win value1 -win value2 -win value3 ... To save typing, we assume the input wavelengths are listed in a text file wavelengths.txt (single column ASCII file with all wavelenghts listed in nanometer).
+
+\code
+cat wavelengths.txt | while read W;do echo " -win $W";done
+\endcode
+
+In the first example, the hyperspectral image is filtered with a spectral response function. For each spectral response function provided, a separate output band is created. The spectral response function(s) must be listed in two column ASCII file(s) with the wavelengths and response listed in the first and second column respectively. The response functions can but must not be normalized (this is taken care of by the filter utility).
+
+In this example, the input is a hyperspectral image with N>>1 spectral wavelengths (bands). The output is a multispectral image with 3 bands, where a spectral response function is provided for each output band.
+
+\code
+pkfilter -i hyperspectral.tif -o multispectral.tif -srf srf1.txt -srf srf2.txt -srf srf3.txt $(cat wavelengths.txt | while read W;do echo " -win $W";done)
+\endcode
+
+The next example is similar to the previous. Instead of providing a spectral response function for each output band, you can also provide the center wavelengths and full width half max values. Here, a three band (red, green, blue) output image is produced.
+
+\code
+pkfilter -i hyperspectral.tif -o multispectral.tif -wout 650 -wout 510 -wout 475 -fwhm 50 -fwhm 50 -fwhm 50 $(cat wavelengths.txt | while read W;do echo " -win $W";done)
+\endcode
diff --git a/doc/examples_pkgetmask.dox b/doc/examples_pkgetmask.dox
new file mode 100644
index 0000000..fd37ac9
--- /dev/null
+++ b/doc/examples_pkgetmask.dox
@@ -0,0 +1,11 @@
+\section examples_pkgetmask Examples of pkgetmask
+\code
+pkgetmask -i input.tif -o output.tif -min 0 -nodata 0 -data 1
+\endcode
+create mask, setting all negative values to 0 (rest to 1)
+
+\code
+pkgetmask -i input.tif -o output.tif -min 0 -max 10 -min 0 -max 250 -b 0 -b 1
+\endcode
+create mask. Mask is set to 0 (default value for -nodata) if either band 0 is not between 0 and 10 OR (default operator) band 1 is not between 0 and 250. Else mask is set to 1 (default value for -data)
+
diff --git a/doc/examples_pkinfo.dox b/doc/examples_pkinfo.dox
new file mode 100644
index 0000000..7d83b73
--- /dev/null
+++ b/doc/examples_pkinfo.dox
@@ -0,0 +1,46 @@
+\section examples_pkinfo Examples of pkinfo
+\code
+pkinfo -i image.tif -nb
+\endcode
+show number of bands in raster image.tif
+
+
+\code
+pkinfo -i image.tif -max -b 1
+\endcode
+show maximum value of band 1 (starting from 0) of raster image.tif
+
+\code
+pkinfo -i image.tif -x 0 -y 0 -r -b 3 -b 2 -b 1
+\endcode
+read (dump) upper left pixel value for bands 3,2,1
+
+\code
+pkinfo -i image.tif -x 3528120 -y 4329681 -geo -r -b 3 -b 2 -b 1
+\endcode
+read (dump) pixel value at this geographic location (x,y) for bands 3,2,1
+
+\code
+pkinfo -i image1.tif -b
+\endcode
+show bounding box (-ulx -uly -lrx -lry) in geo coordinates for image1.tif
+
+\code
+pkinfo -i image1.tif -i image2.tif -i image3.tif -b
+\endcode
+show bounding box (-ulx -uly -lrx -lry) in geo coordinates for each image (and union and intersect)
+
+\code
+pkinfo -i image1.tif --mask 0 --mask 255 -ref
+\endcode
+show the reference pixel (centre of gravity) for image1.tif, treating 0 and 255 as NO VALUE
+
+\code
+pkinfo -i image.tif $(pkinfo -i image.tif -c) -geo -r
+\endcode
+read (dump) pixel value at image centre for band 0
+
+\code
+pkinfo $(for IMAGE in modis_2010*.tif; do pkinfo -i $IMAGE --cover -x 4215500 -y 2534000;done) -x 4215500 -y 253400
+\endcode
+read (dump) pixel value in band 0 (default) for all images in current directory that cover this geographic location
diff --git a/doc/examples_pkpolygonize.dox b/doc/examples_pkpolygonize.dox
new file mode 100644
index 0000000..96d3fd8
--- /dev/null
+++ b/doc/examples_pkpolygonize.dox
@@ -0,0 +1,5 @@
+\section examples_pkpolygonize Examples of pkpolygonize
+\code
+pkpolygonize -i input.tif -m input.tif -o ouput.shp
+\endcode
+create vector file from raster image (typically a classification image), based on pixel (land cover class) values.
\ No newline at end of file
diff --git a/doc/examples_pkreclass.dox b/doc/examples_pkreclass.dox
new file mode 100644
index 0000000..9d47528
--- /dev/null
+++ b/doc/examples_pkreclass.dox
@@ -0,0 +1,20 @@
+\section examples_pkreclass Examples of pkreclass
+\code
+pkreclass -i input1.tif -o output.tif -c 1 -r 0 -c 2 -r 0
+\endcode
+replace pixel values 1 and 2 with value 0
+
+\code
+pkreclass -i vector.shp -o output.shp -c FROM -r TO -n INFIELD
+\endcode
+replace FROM with TO in field INFIELD (of type string) in vector file vector.shp and write to new vector output.shp
+
+\code
+for((i=0;i<256;++i));do if(($i<100));then echo "$i 1";else echo "$i 0";fi;done > code.txt; pkreclass -i input1.tif -o output.tif --code code.txt
+\endcode
+replace all values smaller than 100 with 1, all other values with 0
+
+\code
+pkreclass -i input1.tif -o output.tif $(for((i=0;i<256;++i));do if(($i<100));then echo -n " -c $i " " -r 1";else echo " -c $i " " -r 0";fi;done)
+\endcode
+same as previous but without temporary file
\ No newline at end of file
diff --git a/doc/examples_pksetmask.dox b/doc/examples_pksetmask.dox
new file mode 100644
index 0000000..22083ed
--- /dev/null
+++ b/doc/examples_pksetmask.dox
@@ -0,0 +1,48 @@
+\section examples_pksetmask Examples of pksetmask
+
+\section single_mask Using a single mask
+
+With a single mask you can provide as many triples (--operator, --msknodata, --nodata) as you wish. All operators work simultaneously on that mask. Caution: the first operator that tests true will be selected. This is explained in the next example:
+
+\code
+pksetmask -i input.tif -m mask.tif --operator='>' --msknodata 0 --nodata 0 --operator='>' --msknodata 10 --nodata 10 -o output.tif
+\endcode
+Warning: second operator will never test true as first will supersede!
+\code
+pksetmask -i input.tif -m mask.tif --operator='>' --msknodata 10 --nodata 10 --operator='>' --msknodata 0 --nodata 1 -output.tif
+\endcode
+OK: values above 10 will be 10, values between 0 and 10 will be 1
+
+\section multiple_masks Using multiple masks
+With multiple masks, you can use one triple (--operator, --msknodata, --nodata) for each corresponding mask (following the same order of input). If the number of triples is not equal to the number of masks, then only the first triple is used for all masks simultaneously
+\code
+pksetmask -i input.tif -m mask1.tif --operator '>' --msknodata 250 --nodata 1 -m mask2.tif --operator '>' --msknodata 100 --nodata 2 -o output.tif
+\endcode
+If mask1.tif is above 250, the output will be 1. If mask2 is above 100, the output will be 2. If both operators test true, the first will supersede (output will be 1)
+
+\code
+pksetmask -i input.tif -m mask1.tif -m mask2.tif --operator '>' --msknodata 250 --nodata 1 -o output.tif
+\endcode
+If either mask1.tif or mask2.tif is above 250, the output will be 1
+
+\section more_examples More examples
+
+\code
+pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 0 -nodata 255
+\endcode
+copy pixel values from input.tif to output.tif, applying mask.tif, setting all values to 255 where mask is 0.
+
+\code
+pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 1 -nodata 255 --operator '!'
+\endcode
+copy values from input.tif to output.tif, but set all values to 255 if mask is not 1
+
+\code
+pksetmask -i input.tif -m mask1.tif -m mask2.tif -o output.tif -ot Byte --msknodata 0 -nodata 255
+\endcode
+Application of two masks. Copy pixel values from input.tif to output.tif, setting all values to 255 where either mask is 0.
+
+\code
+pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 0 --msknodata 1 -nodata 255 -nodata 255
+\endcode
+copy pixel values from input.tif to output.tif, applying single masks, setting all values to 255 where mask is either 0 or 1.
\ No newline at end of file
diff --git a/doc/examples_pksieve.dox b/doc/examples_pksieve.dox
new file mode 100644
index 0000000..d545038
--- /dev/null
+++ b/doc/examples_pksieve.dox
@@ -0,0 +1,5 @@
+\section examples_pksieve Examples of pksieve
+\code
+pksieve -i input.tif -c 8 -s 5 -o ouput.shp
+\endcode
+merge all patches smaller than 5 pixels into bigger classes, using 8 connectivity (horizontal, vertical and diagonal)
diff --git a/doc/examples_pkstatogr.dox b/doc/examples_pkstatogr.dox
new file mode 100644
index 0000000..0e4ca4b
--- /dev/null
+++ b/doc/examples_pkstatogr.dox
@@ -0,0 +1,12 @@
+\section examples_pkstatogr Examples of pkstatogr
+\code
+pkstatogr -i input.shp -f FIELDID -n 100
+\endcode
+report histogram of values in FIELDID (to standard output)
+
+\code
+pkstatogr -i input.shp -f FIELDID -min -max -mean -stdev
+\endcode
+report min, max, mean and standard deviation of values in FIELDID (to standard output)
+
+
diff --git a/doc/examples_pksvm.dox b/doc/examples_pksvm.dox
new file mode 100644
index 0000000..efafe22
--- /dev/null
+++ b/doc/examples_pksvm.dox
@@ -0,0 +1,19 @@
+\section examples_pksvm Examples of pksvm
+
+Classify input image input.tif with a support vector machine. A training sample that is provided as an OGR vector dataset. It contains all features (same dimensionality as input.tif) in its fields (please check \ref pkextract "pkextract" on how to obtain such a file from a "clean" vector file containing locations only). A two-fold cross validation (cv) is performed (output on screen). The parameters cost and gamma of the support vector machine are set to 1000 and 0.1 respectively. A colo [...]
+
+\code
+pksvm -i input.tif -t training.sqlite -o output.tif -cv 2 -ct colourtable.txt -cc 1000 -g 0.1
+\endcode
+
+Classification using bootstrap aggregation. The training sample is randomly split in three subsamples (33% of the original sample each).
+
+\code
+pksvm -i input.tif -t training.sqlite -o output.tif -bs 33 -bag 3
+\endcode
+
+Classification using prior probabilities for each class. The priors are automatically normalized. The order in which the options -p are provide should respect the alphanumeric order of the class names (class 10 comes before 2...)
+
+\code
+pksvm -i input.tif -t training.sqlite -o output.tif -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 0.2 -p 1 -p 1 -p 1
+\endcode
diff --git a/doc/faq_pkcomposite.dox b/doc/faq_pkcomposite.dox
new file mode 100644
index 0000000..6e6d4e6
--- /dev/null
+++ b/doc/faq_pkcomposite.dox
@@ -0,0 +1,33 @@
+\section faq_pkcomposite Frequently asked questions about pkcomposite
+
+ - How to use different nodata values in input images?
+
+ For individual invalid value(s) in input image, use -srcnodata
+
+ Usage: use unique value for each invalid bands set in -vb (--bndnodata) or use a single value that will be applied to all invalid bands
+
+ Example:
+
+\code
+pkcomposite -i input1.tif -i input2.tif -o output.tif -srcnodata 0 -srcnodata 255 -bndnodat 0 -bndnodata 1
+\endcode
+will consider 0 in band 0 and 255 in band 1 of input images as no value
+
+\code
+pkcomposite -i input1.tif -i input2.tif -o output.tif -srcnodata 0 -bndnodata 0 -bndnodata 1
+\endcode
+will consider 0 in both bands 0 and 1 of input images as no value
+
+ - How to use a range of nodata values in input images?
+
+ For range(s) of invalid values in input images: use -min (--min) and -max (--max) Usage: use unique range set for each invalid bands set in -bndnodata
+
+ Example:
+\code
+pkcomposite -i input1.tif -i input2.tif -o output.tif -min 0 -max 200 -min 0 -max 2 -bndnodata 0 -bndnodata 1
+\endcode
+will consider all negative values in band 0 and 1 of input images as invalid. Values larger or equal to 200 in band 0 will be invalid, as well as values larger or equal to 2 in band 1
+
+ - If I take the mean value as composit rule for multi-band input images, will the output image contain the mean value of overlapping images in each band?
+
+ Yes
\ No newline at end of file
diff --git a/doc/faq_pksetmask.dox b/doc/faq_pksetmask.dox
new file mode 100644
index 0000000..f87e284
--- /dev/null
+++ b/doc/faq_pksetmask.dox
@@ -0,0 +1,8 @@
+\section faq_pksetmask Frequently asked questions about pksetmask
+
+ Q1. I want to mask my input image (a byte image with values between 0 and 254) with a mask that only covers a spatial subset of the input image. Within the spatial subset of the primary mask, all pixels must be set to 0 where the primary mask equals 1. Outside the spatial subset I want to set all pixel values to 255.
+
+ A1. This can be done using two masks, selecting the input image as the secondary mask. Choose the secondary operator acting on the secondary mask such that the condition is always true (e.g, < 255 ).
+\code
+pksetmask -i input.tif -m mask.tif -t 1 -f 0 --operator '=' -m input.tif -t 255 -f 255 --operator '<' -o output.tif
+\endcode
diff --git a/doc/footer.html b/doc/footer.html
new file mode 100644
index 0000000..98baf06
--- /dev/null
+++ b/doc/footer.html
@@ -0,0 +1,33 @@
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ $navpath
+ <li class="footer">$generatedby
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+ </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+
+</script>
+
+</body>
+</html>
diff --git a/doc/header.dox b/doc/header.dox
new file mode 100644
index 0000000..72e0d33
--- /dev/null
+++ b/doc/header.dox
@@ -0,0 +1,16 @@
+\section thetool thetool
+theshortdescription
+
+## SYNOPSIS
+<code>
+thesynopsis
+</code>
+
+## DESCRIPTION ##
+thelongdescription
+
+## OPTIONS ##
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
diff --git a/doc/html/ConfusionMatrix_8cc_source.html b/doc/html/ConfusionMatrix_8cc_source.html
new file mode 100644
index 0000000..ee9a0b1
--- /dev/null
+++ b/doc/html/ConfusionMatrix_8cc_source.html
@@ -0,0 +1,358 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/ConfusionMatrix.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ConfusionMatrix.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ConfusionMatrix.cc: class for (classification accuracy) confusion matrix</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <numeric></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">using namespace </span>confusionmatrix;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">bool</span> compareClass(<span class="keyword">const</span> std::string& string1, <span class="keyword">const</span> std::string& string2){</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">int</span> int1=string2type<int>(string1);</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">int</span> int2=string2type<int>(string2);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span>(int1<int2);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> };</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> ConfusionMatrix::ConfusionMatrix()</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> : m_classes(),m_results(),m_se95(true),m_format(ASCII)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> ConfusionMatrix::~ConfusionMatrix()</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">//constructor where class names are 0,1,...,nclass-1</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> ConfusionMatrix::ConfusionMatrix(<span class="keywordtype">short</span> nclass){</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> resize(nclass);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> ConfusionMatrix::ConfusionMatrix(<span class="keyword">const</span> std::vector<std::string>& classNames){</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> setClassNames(classNames);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">//copy constructor</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> ConfusionMatrix::ConfusionMatrix(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& cm){</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> setClassNames(cm.m_classes);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> setResults(cm.m_results);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">//assignment operator</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& ConfusionMatrix::operator=(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& cm){</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//check for self-assignment by comparing the address of the implicit object and parameter</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span>(<span class="keyword">this</span>==&cm)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> setClassNames(cm.m_classes);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> setResults(cm.m_results);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& ConfusionMatrix::operator+=(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span>(cm.m_classes.size()!=this->m_classes.size()){</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> std::cerr << <span class="stringliteral">"error0: "</span><< cm.m_classes.size() << <span class="stringliteral">"!="</span> << this->m_classes.size() << std::endl;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> exit(0);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span>(cm.m_results.size()!=this->m_results.size()){</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> std::cerr << <span class="stringliteral">"error1: "</span><< cm.m_results.size() << <span class="stringliteral">"!="</span> << this->m_results.size() << std::endl;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> exit(1);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<m_results.size();++irow){</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(cm.m_results[irow].size()!=this->m_results[irow].size()){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> std::cerr << <span class="stringliteral">"error2: "</span> << cm.m_results[irow].size() << <span class="stringliteral">"!="</span> << this->m_results[irow].size() << std::endl;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(2);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<m_results[irow].size();++icol)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> this->m_results[irow][icol]+=cm.m_results[irow][icol];</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& ConfusionMatrix::operator*=(<span class="keywordtype">double</span> weight)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<m_results.size();++irow){</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<m_results[irow].size();++icol)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> m_results[irow][icol]*=weight;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> ConfusionMatrix::sortClassNames(){</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> sort(m_classes.begin(),m_classes.end(),compareClass);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> ConfusionMatrix::operator*(<span class="keywordtype">double</span> weight)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> result = *<span class="keyword">this</span>;<span class="comment">//make a copy of myself</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> result*=weight;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> ConfusionMatrix::resize(<span class="keywordtype">short</span> nclass){</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> m_classes.resize(nclass);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> std::ostringstream osclass;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> osclass << iclass;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> m_classes[iclass]=osclass.str();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> m_results.resize(nclass,nclass);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> ConfusionMatrix::setClassNames(<span class="keyword">const</span> std::vector<std::string>& classNames, <span class="keywordtype">bool</span> doSort){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> m_classes=classNames;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(doSort)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> sortClassNames();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(m_results.size()!=m_classes.size())</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> m_results.resize(m_classes.size(),m_classes.size());</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> ConfusionMatrix::pushBackClassName(<span class="keyword">const</span> std::string& className, <span class="keywordtype">bool</span> doSort){</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> m_classes.push_back(className);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(doSort)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> sortClassNames();</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(m_results.size()!=m_classes.size())</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> m_results.resize(m_classes.size(),m_classes.size());</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> } </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> ConfusionMatrix::setResults(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& theResults){</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> m_results=theResults;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">void</span> ConfusionMatrix::clearResults(){</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> m_results.clear();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> m_results.resize(m_classes.size(),m_classes.size());</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> ConfusionMatrix::setResult(<span class="keyword">const</span> std::string& theRef, <span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span> theResult){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// int ir=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theRef));</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// int ic=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theClass));</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// assert(ir>=0);</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// assert(ir<m_results.size());</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// assert(ic>=0);</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// assert(ic<m_results[ir].size());</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">int</span> ir=getClassIndex(theRef);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">int</span> ic=getClassIndex(theClass);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> m_results[ir][ic]=theResult;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> ConfusionMatrix::incrementResult(<span class="keyword">const</span> std::string& theRef, <span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span> theIncrement){</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// int ir=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theRef));</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// int ic=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theClass));</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">int</span> ir=getClassIndex(theRef);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">int</span> ic=getClassIndex(theClass);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> assert(ir>=0);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(ir>=m_results.size())</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> std::cerr << <span class="stringliteral">"Error: "</span> << theRef << <span class="stringliteral">" not found in class ConfusionMatrix when incrementing for class "</span> << theClass << std::endl;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> assert(ir<m_results.size());</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> assert(ic>=0);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> assert(ic<m_results[ir].size());</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> m_results[ir][ic]+=theIncrement;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">double</span> ConfusionMatrix::nReference(<span class="keyword">const</span> std::string& theRef)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// int ir=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theRef));</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">int</span> ir=getClassIndex(theRef);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">return</span> accumulate(m_results[ir].begin(),m_results[ir].end(),0);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">double</span> ConfusionMatrix::nReference()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">double</span> nref=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ir=0;ir<m_classes.size();++ir)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> nref+=accumulate(m_results[ir].begin(),m_results[ir].end(),0);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> nref;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">double</span> ConfusionMatrix::nClassified(<span class="keyword">const</span> std::string& theClass)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// int ic=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theClass));</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">int</span> ic=getClassIndex(theClass);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">double</span> nclassified=0;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iref=0;iref<m_results.size();++iref){</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> assert(ic<m_results[iref].size());</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> nclassified+=m_results[iref][ic];</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">return</span>(nclassified);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> ConfusionMatrix::pa(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> assert(m_results.size());</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> assert(m_results.size()==m_classes.size());</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">double</span> producer=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// int ir=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theClass));</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">int</span> ir=getClassIndex(theClass);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> assert(ir>=0);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> assert(ir<m_results.size());</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> assert(!theClass.compare(m_classes[ir]));</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_results.size();++iclass){</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> assert(iclass<m_results[ir].size());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> producer+=m_results[ir][iclass];</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">double</span> dpa=(producer>0)? static_cast<double>(m_results[ir][ir])/producer : 0;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">double</span> dqa=1.0-dpa;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> *se95=(dpa<1&&dpa>0)? sqrt(dpa*dqa/(producer-1)) : 0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">return</span> dpa;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">int</span> ConfusionMatrix::pa_pct(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">double</span> dpa=pa(theClass,se95);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> *se95=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+1000*(*se95)))/10.0;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+100.0*dpa);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">double</span> ConfusionMatrix::ua(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> assert(m_results.size());</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> assert(m_results.size()==m_classes.size());</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">double</span> user=0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// int ic=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),theClass));</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">int</span> ic=getClassIndex(theClass);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> assert(ic>=0);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> assert(ic<m_results.size());</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> assert(!theClass.compare(m_classes[ic]));</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iref=0;iref<m_results.size();++iref){</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> assert(ic<m_results[iref].size());</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> user+=m_results[iref][ic];</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordtype">double</span> dua=(user>0)? static_cast<double>(m_results[ic][ic])/user : 0;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">double</span> dva=1.0-dva;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> *se95=(dua<1&&dua>0)? sqrt(dua*dva/(user-1)) : 0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">return</span> dua;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">int</span> ConfusionMatrix::ua_pct(<span class="keyword">const</span> std::string& theClass,<span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordtype">double</span> dua=ua(theClass,se95);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> *se95=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+1000*(*se95)))/10.0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+100.0*dua);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">double</span> ConfusionMatrix::oa(<span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">double</span> ntotal=m_results.sum();</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">double</span> pChance=0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">double</span> pCorrect=0;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_classes.size();++iclass)</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> pCorrect+=static_cast<double>(m_results[iclass][iclass])/ntotal;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">double</span> qCorrect=1-pCorrect;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> *se95=(pCorrect<1&&pCorrect>0)? sqrt(pCorrect*qCorrect/(ntotal-1)) : 0;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(ntotal>0)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span>(pCorrect);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> ConfusionMatrix::oa_pct(<span class="keywordtype">double</span>* se95)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">double</span> doa=oa(se95);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>(se95!=NULL)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> *se95=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+1000*(*se95)))/10.0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+100.0*doa);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">double</span> ConfusionMatrix::kappa()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordtype">double</span> ntotal=m_results.sum();</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">double</span> pChance=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">double</span> pCorrect=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_classes.size();++iclass){</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> pChance+=nClassified(m_classes[iclass])*nReference(m_classes[iclass])/ntotal/ntotal;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> pCorrect+=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(m_results[iclass][iclass])/ntotal;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(pChance<1)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">return</span>((pCorrect-pChance)/(1-pChance));</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ConfusionMatrix_8h_source.html b/doc/html/ConfusionMatrix_8h_source.html
new file mode 100644
index 0000000..b34319d
--- /dev/null
+++ b/doc/html/ConfusionMatrix_8h_source.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/ConfusionMatrix.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ConfusionMatrix.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ConfusionMatrix.h: class for (classification accuracy) confusion matrix</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _CONFUSIONMATRIX_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _CONFUSIONMATRIX_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span>confusionmatrix</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">enum</span> CM_FORMAT { ASCII = 0, LATEX = 1, HTML = 2 };</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classconfusionmatrix_1_1ConfusionMatrix.html"> 32</a></span> <span class="keyword">class </span><a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>{</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>(<span class="keywordtype">short</span> nclass);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>(<span class="keyword">const</span> std::vector<std::string>& classNames);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& cm);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& operator=(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& cm);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">short</span> size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_results.size();};</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> resize(<span class="keywordtype">short</span> nclass);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> setClassNames(<span class="keyword">const</span> std::vector<std::string>& classNames, <span class="keywordtype">bool</span> doSort=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> pushBackClassName(<span class="keyword">const</span> std::string& className, <span class="keywordtype">bool</span> doSort=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> setResults(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& theResults);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> setResult(<span class="keyword">const</span> std::string& theRef, <span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span> theResult);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> incrementResult(<span class="keyword">const</span> std::string& theRef, <span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span> theIncrement);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> clearResults();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> nReference(<span class="keyword">const</span> std::string& theRef) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> nReference() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">double</span> nClassified(<span class="keyword">const</span> std::string& theRef) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> nClasses()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_classes.size();};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> std::string getClass(<span class="keywordtype">int</span> iclass)<span class="keyword"> const </span>{assert(iclass>=0);assert(iclass<m_classes.size());<span class="keywordflow">return</span> m_classes[iclass];};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> getClassIndex(std::string className)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> index=0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">for</span>(index=0;index<m_classes.size();++index){</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span>(m_classes[index]==className)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span>(index>=m_classes.size())</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> index=-1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> index;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// int index=distance(m_classes.begin(),find(m_classes.begin(),m_classes.end(),className));</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// assert(index>=0);</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// if(index<m_results.size())</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// return(index);</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// return(-1);</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> std::vector<std::string> getClassNames()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_classes;};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> ~<a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>();</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">double</span> pa(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">double</span> ua(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">double</span> oa(<span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">int</span> pa_pct(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> ua_pct(<span class="keyword">const</span> std::string& theClass, <span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> oa_pct(<span class="keywordtype">double</span>* se95=NULL) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">double</span> kappa() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& operator*=(<span class="keywordtype">double</span> weight);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> operator*(<span class="keywordtype">double</span> weight);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>& operator+=(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> operator+(<span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm){</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a>(*<span class="keyword">this</span>)+=cm;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> sortClassNames();</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> reportSE95(<span class="keywordtype">bool</span> doReport) {m_se95=doReport;};</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> setFormat(<span class="keyword">const</span> CM_FORMAT& theFormat) {m_format=theFormat;};</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> setFormat(<span class="keyword">const</span> std::string theFormat) {m_format=getFormat(theFormat);};</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> CM_FORMAT getFormat()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_format;};</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">static</span> <span class="keyword">const</span> CM_FORMAT getFormat(<span class="keyword">const</span> std::string theFormat){</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span>(theFormat==<span class="stringliteral">"ascii"</span>) <span class="keywordflow">return</span>(ASCII);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(theFormat==<span class="stringliteral">"latex"</span>) <span class="keywordflow">return</span>(LATEX);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> std::string errorString=<span class="stringliteral">"Format not supported: "</span>;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> errorString+=theFormat;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> errorString+=<span class="stringliteral">" use ascii or latex"</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> };</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">friend</span> std::ostream& operator<<(std::ostream& os, <span class="keyword">const</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm){</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> std::ostringstream streamLine;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">/* streamosclass << iclass; */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/* m_classes[iclass]=osclass.str(); */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> std::string fieldSeparator=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::string lineSeparator=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> std::string mathMode=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">switch</span>(cm.getFormat()){</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">case</span>(LATEX):</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> fieldSeparator=<span class="stringliteral">" & "</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> lineSeparator=<span class="stringliteral">"\\\\"</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> mathMode=<span class="stringliteral">"$"</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">case</span>(ASCII):</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> fieldSeparator=<span class="stringliteral">"\t"</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> lineSeparator=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> mathMode=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">double</span> se95_ua=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">double</span> se95_pa=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">double</span> se95_oa=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">double</span> dua=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> dpa=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">double</span> doa=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> doa = cm.oa(&se95_oa);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(cm.getFormat()==LATEX){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> os << <span class="stringliteral">"\\documentclass{article}"</span> << std::endl;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> os << <span class="stringliteral">"\\begin{document}"</span> << std::endl;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> os << <span class="stringliteral">"Kappa = "</span> << mathMode << cm.kappa() << mathMode ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> os << <span class="stringliteral">", Overall Acc. = "</span> << mathMode << 100.0*cm.oa() << mathMode ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(cm.m_se95)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> os << <span class="stringliteral">" ("</span> << mathMode << se95_oa << mathMode << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> os << std::endl;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> os << std::endl;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span>(cm.getFormat()==LATEX){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> os << <span class="stringliteral">"\\begin{tabular}{@{}l"</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass)</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> os << <span class="stringliteral">"l"</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> os << <span class="stringliteral">"}"</span> << std::endl;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> os << <span class="stringliteral">"\\hline"</span> << std::endl;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> os << <span class="stringliteral">"Class"</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> os << fieldSeparator << cm.m_classes[iclass];</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> os << lineSeparator << std::endl;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(cm.getFormat()==LATEX)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> os << <span class="stringliteral">"\\hline"</span> << std::endl;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> assert(cm.m_classes.size()==cm.m_results.size());</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<cm.m_results.size();++irow){</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> os << cm.m_classes[irow];</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<cm.m_results[irow].size();++icol)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> os << fieldSeparator << cm.m_results[irow][icol];</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> os << lineSeparator<< std::endl;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(cm.getFormat()==LATEX){</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> os << <span class="stringliteral">"\\hline"</span> << std::endl;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> os << std::endl;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> os << <span class="stringliteral">"User' Acc."</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> dua=cm.ua_pct(cm.m_classes[iclass],&se95_ua);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> os << fieldSeparator << dua;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(cm.m_se95)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> os << <span class="stringliteral">" ("</span> << se95_ua << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> os << lineSeparator<< std::endl;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> os << <span class="stringliteral">"Prod. Acc."</span>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> dpa=cm.pa_pct(cm.m_classes[iclass],&se95_ua);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> os << fieldSeparator << dpa;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(cm.m_se95)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> os << <span class="stringliteral">" ("</span> << se95_pa << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> os << lineSeparator<< std::endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(cm.getFormat()==LATEX){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> os << <span class="stringliteral">"\\end{tabular}"</span> << std::endl;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> os << <span class="stringliteral">"\\end{document}"</span> << std::endl;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">return</span> os;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> };</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> std::vector<std::string> m_classes;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <a class="code" href="classVector2d.html">Vector2d<double></a> m_results;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> CM_FORMAT m_format;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">bool</span> m_se95;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> };</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor">#endif </span><span class="comment">/* _CONFUSIONMATRIX_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/CostFactorySVM_8cc_source.html b/doc/html/CostFactorySVM_8cc_source.html
new file mode 100644
index 0000000..e250aaa
--- /dev/null
+++ b/doc/html/CostFactorySVM_8cc_source.html
@@ -0,0 +1,256 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/CostFactorySVM.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactorySVM.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">CostFactorySVM.cc: select features, typical use: feature selection for classification</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "CostFactorySVM.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "svm.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#define Malloc(type,n) (type *)malloc((n)*sizeof(type))</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> CostFactorySVM::CostFactorySVM()</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> : <a class="code" href="classCostFactory.html">CostFactory</a>(2,0), m_svm_type(<span class="stringliteral">"C_SVC"</span>), m_kernel_type(<span class="stringliteral">"radial"</span>), m_kernel_degree(3), m_gamma(1.0), m_coef0(0), m_ccost(1000), m_nu(0.5), m_epsilon_loss(100), m_cache(100), m_epsilon_tol(0.001), m_shrinking(false), m_prob_est(true){</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> CostFactorySVM::~CostFactorySVM(){</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> CostFactorySVM::CostFactorySVM(std::string svm_type, std::string kernel_type, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> kernel_degree, <span class="keywordtype">float</span> gamma, <span class="keywordtype">float</span> coef0, <span class="keywordtype">float</span> ccost, <span class="keywordtype">float</span> nu, <span class="keywordtype">float</span> epsilon_loss, <span [...]
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> : <a class="code" href="classCostFactory.html">CostFactory</a>(cv,verbose), m_svm_type(svm_type), m_kernel_type(kernel_type), m_kernel_degree(kernel_degree), m_gamma(gamma), m_coef0(coef0), m_ccost(ccost), m_nu(nu), m_epsilon_loss(epsilon_loss), m_cache(cache), m_epsilon_tol(epsilon_tol), m_shrinking(shrinking), m_prob_est(prob_est){};</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">double</span> CostFactorySVM::getCost(<span class="keyword">const</span> std::vector<<a class="code" href="classVector2d.html">Vector2d<float></a> > &trainingFeatures){</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> std::map<std::string, svm::SVM_TYPE> svmMap;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> svmMap[<span class="stringliteral">"C_SVC"</span>]=svm::C_SVC;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> svmMap[<span class="stringliteral">"nu_SVC"</span>]=svm::nu_SVC;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> svmMap[<span class="stringliteral">"one_class"</span>]=svm::one_class;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> svmMap[<span class="stringliteral">"epsilon_SVR"</span>]=svm::epsilon_SVR;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> svmMap[<span class="stringliteral">"nu_SVR"</span>]=svm::nu_SVR;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> std::map<std::string, svm::KERNEL_TYPE> kernelMap;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> kernelMap[<span class="stringliteral">"linear"</span>]=svm::linear;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> kernelMap[<span class="stringliteral">"polynomial"</span>]=svm::polynomial;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> kernelMap[<span class="stringliteral">"radial"</span>]=svm::radial;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> kernelMap[<span class="stringliteral">"sigmoid;"</span>]=svm::sigmoid;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nclass=trainingFeatures.size();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining=0;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntest=0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> ntraining+=m_nctraining[iclass];</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> ntest+=m_nctest[iclass];</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span>(ntest)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> assert(!m_cv);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>(!m_cv)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> assert(ntest);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">struct </span><a class="code" href="structsvm__parameter.html">svm_parameter</a> param;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> param.svm_type = svmMap[m_svm_type];</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> param.kernel_type = kernelMap[m_kernel_type];</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> param.degree = m_kernel_degree;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> param.gamma = (m_gamma>0)? m_gamma : 1.0/nFeatures;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> param.coef0 = m_coef0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> param.nu = m_nu;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> param.cache_size = m_cache;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> param.C = m_ccost;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> param.eps = m_epsilon_tol;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> param.p = m_epsilon_loss;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> param.shrinking = (m_shrinking)? 1 : 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> param.probability = (m_prob_est)? 1 : 0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> param.nr_weight = 0;<span class="comment">//not used: I use priors and balancing</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> param.weight_label = NULL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> param.weight = NULL;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> param.verbose=(m_verbose>1)? <span class="keyword">true</span>:<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a>* svm;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">struct </span><a class="code" href="structsvm__problem.html">svm_problem</a> prob;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a>* x_space;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> prob.l=ntraining;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> prob.y = Malloc(<span class="keywordtype">double</span>,prob.l);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> prob.x = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a> *,prob.l);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> x_space = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>,(nFeatures+1)*ntraining);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> spaceIndex=0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> lIndex=0;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// for(int isample=0;isample<trainingFeatures[iclass].size();++isample){</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<m_nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> prob.x[lIndex]=&(x_space[spaceIndex]);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature){</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> x_space[spaceIndex].index=ifeature+1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> x_space[spaceIndex].value=trainingFeatures[iclass][isample][ifeature];</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> ++spaceIndex;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> x_space[spaceIndex++].index=-1;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> prob.y[lIndex]=iclass;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> ++lIndex;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> assert(lIndex==prob.l);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(m_verbose>2)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> std::cout << <span class="stringliteral">"checking parameters"</span> << std::endl;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> svm_check_parameter(&prob,¶m);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(m_verbose>2)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::cout << <span class="stringliteral">"parameters ok, training"</span> << std::endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> svm=svm_train(&prob,¶m);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(m_verbose>2)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"SVM is now trained"</span> << std::endl;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> m_cm.clearResults();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span>(m_cv>1){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> *target = Malloc(<span class="keywordtype">double</span>,prob.l);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> svm_cross_validation(&prob,¶m,m_cv,target);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> assert(param.svm_type != EPSILON_SVR&¶m.svm_type != NU_SVR);<span class="comment">//only for regression</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<prob.l;i++){</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> std::string refClassName=m_nameVector[prob.y[i]];</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> std::string className=m_nameVector[target[i]];</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(m_classValueMap.size())</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> m_cm.incrementResult(m_cm.getClass(prob.y[i]),m_cm.getClass(target[i]),1.0);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> free(target);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> *x_test;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> std::vector<double> result(nclass);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> x_test = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>,(nFeatures+1));</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<m_nctest[iclass];++isample){</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> x_test[ifeature].index=ifeature+1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> x_test[ifeature].value=trainingFeatures[iclass][m_nctraining[iclass]+isample][ifeature];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> x_test[nFeatures].index=-1;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">double</span> predict_label=0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> assert(svm_check_probability_model(svm));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> predict_label = svm_predict_probability(svm,x_test,&(result[0]));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// predict_label = svm_predict(svm,x_test);</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> std::string refClassName=m_nameVector[iclass];</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> std::string className=m_nameVector[<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(predict_label)];</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(m_classValueMap.size())</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> m_cm.incrementResult(refClassName,className,1.0);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> free(x_test);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(m_verbose>1)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> std::cout << m_cm << std::endl;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> assert(m_cm.nReference());</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// if(m_verbose)</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// std::cout << m_cm << std::endl;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// std::cout << "Kappa: " << m_cm.kappa() << std::endl;</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// double se95_oa=0;</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// double doa=0;</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// doa=m_cm.oa_pct(&se95_oa);</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// std::cout << "Overall Accuracy: " << doa << " (" << se95_oa << ")" << std::endl;</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// *NOTE* Because svm_model contains pointers to svm_problem, you can</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// not free the memory used by svm_problem if you are still using the</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// svm_model produced by svm_train(). </span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// however, we will re-train the svm later on after the feature selection</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> free(prob.y);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> free(prob.x);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> free(x_space);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> svm_free_and_destroy_model(&(svm));</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span>(m_cm.kappa());</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="ttc" id="structsvm__parameter_html"><div class="ttname"><a href="structsvm__parameter.html">svm_parameter</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00028">svm.h:28</a></div></div>
+<div class="ttc" id="structsvm__model_html"><div class="ttname"><a href="structsvm__model.html">svm_model</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00053">svm.h:53</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="structsvm__node_html"><div class="ttname"><a href="structsvm__node.html">svm_node</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00012">svm.h:12</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+<div class="ttc" id="structsvm__problem_html"><div class="ttname"><a href="structsvm__problem.html">svm_problem</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00018">svm.h:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/CostFactorySVM_8h_source.html b/doc/html/CostFactorySVM_8h_source.html
new file mode 100644
index 0000000..a04b237
--- /dev/null
+++ b/doc/html/CostFactorySVM_8h_source.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/CostFactorySVM.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactorySVM.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">CostFactorySVM.h: select features, typical use: feature selection for classification</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COSTFACTORYSVM_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _COSTFACTORYSVM_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "CostFactory.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span>svm{</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">enum</span> SVM_TYPE {C_SVC=0, nu_SVC=1,one_class=2, epsilon_SVR=3, nu_SVR=4};</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">enum</span> KERNEL_TYPE {linear=0,polynomial=1,radial=2,sigmoid=3};</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classCostFactorySVM.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classCostFactorySVM.html">CostFactorySVM</a> : <span class="keyword">public</span> <a class="code" href="classCostFactory.html">CostFactory</a></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classCostFactorySVM.html">CostFactorySVM</a>();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classCostFactorySVM.html">CostFactorySVM</a>(std::string svm_type, std::string kernel_type, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> kernel_degree, <span class="keywordtype">float</span> gamma, <span class="keywordtype">float</span> coef0, <span class="keywordtype">float</span> ccost, <span class="keywordtype">float</span> nu, <span class="keywordty [...]
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> ~<a class="code" href="classCostFactorySVM.html">CostFactorySVM</a>();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">double</span> getCost(<span class="keyword">const</span> std::vector<<a class="code" href="classVector2d.html">Vector2d<float></a> > &trainingFeatures);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> std::string m_svm_type;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> std::string m_kernel_type;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> m_kernel_degree;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">float</span> m_gamma;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">float</span> m_coef0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">float</span> m_ccost;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">float</span> m_nu;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">float</span> m_epsilon_loss;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> m_cache;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">float</span> m_epsilon_tol;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">bool</span> m_shrinking;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">bool</span> m_prob_est;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> };</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classCostFactorySVM_html"><div class="ttname"><a href="classCostFactorySVM.html">CostFactorySVM</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactorySVM_8h_source.html#l00034">CostFactorySVM.h:34</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/CostFactory_8h_source.html b/doc/html/CostFactory_8h_source.html
new file mode 100644
index 0000000..603bbaf
--- /dev/null
+++ b/doc/html/CostFactory_8h_source.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/CostFactory.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactory.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">CostFactory.h: select features, typical use: feature selection for classification</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _COSTFACTORY_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _COSTFACTORY_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classCostFactory.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classCostFactory.html">CostFactory</a>{</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classCostFactory.html">CostFactory</a>(<span class="keywordtype">void</span>){};</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classCostFactory.html">CostFactory</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cv, <span class="keywordtype">short</span> verbose) : m_cv(cv), m_verbose(verbose){};</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">virtual</span> ~<a class="code" href="classCostFactory.html">CostFactory</a>(<span class="keywordtype">void</span>){};</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> setCv(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cv){m_cv=cv;};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">void</span> setClassValueMap(<span class="keyword">const</span> std::string& classname, <span class="keywordtype">short</span> classvalue){ m_classValueMap[classname]=classvalue;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> std::map<std::string,short> getClassValueMap(){<span class="keywordflow">return</span> m_classValueMap;};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> std::vector<std::string> getNameVector(){<span class="keywordflow">return</span> m_nameVector;};</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> setNameVector(std::vector<std::string>& nameVector){m_nameVector=nameVector;};</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> getClassIndex(std::string classname)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_cm.getClassIndex(classname);};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">//pushBackClassName is for confusion matrix</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> pushBackClassName(std::string classname){m_cm.pushBackClassName(classname,<span class="keyword">true</span>);};<span class="comment">//doSort=true</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">//pushBackName is for nameVector in CostFactory</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> pushBackName(std::string classname){m_nameVector.push_back(classname);};</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> setNcTraining(<span class="keyword">const</span> std::vector<unsigned int> nctraining){m_nctraining=nctraining;};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> setNcTest(<span class="keyword">const</span> std::vector<unsigned int> nctest){m_nctest=nctest;};</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//getCost needs to be implemented case by case (e.g., SVM, ANN)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCost(<span class="keyword">const</span> std::vector<<a class="code" href="classVector2d.html">Vector2d<float></a> > &trainingFeatures)=0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> m_cm;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> std::map<std::string,short> m_classValueMap;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> std::vector<std::string> m_nameVector;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> std::vector<unsigned int> m_nctraining;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> std::vector<unsigned int> m_nctest;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> m_cv;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* std::string m_classname; */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">short</span> m_classvalue;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">short</span> m_verbose;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> };</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Egcs_8cc_source.html b/doc/html/Egcs_8cc_source.html
new file mode 100644
index 0000000..674d3fb
--- /dev/null
+++ b/doc/html/Egcs_8cc_source.html
@@ -0,0 +1,280 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Egcs.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Egcs.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Egcs.cc: Conversions from and to european grid coding system</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "Egcs.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> Egcs::Egcs(){</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">// Egcs::Egcs(unsigned short level)</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// : m_level(level){</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> Egcs::Egcs(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> level)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> m_level=level;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> Egcs::cell2level(<span class="keyword">const</span> std::string& cellCode)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">size_t</span> pos=cellCode.find(<span class="stringliteral">"-"</span>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> std::string TILE=cellCode.substr(0,pos);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> level=0;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> base_level=19-(TILE.size()/2-1)*3;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> quad_level=0;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span>(pos!=std::string::npos)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> quad_level=cellCode.size()-pos-1;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span>(quad_level>1)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> level=base_level-2;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(quad_level>0)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> level=base_level-1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> level=base_level;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> level;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> Egcs::~Egcs(){</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> Egcs::res2level(<span class="keywordtype">double</span> resolution)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> base=pow(10,log(resolution*4.0)/log(10.0));</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">double</span> diff=base/(2*resolution);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> 0.5+(log(base)/log(10.0)*3+1-diff);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> Egcs::getResolution()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> exponent=(m_level+1)/3;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> base=pow(10.0,exponent);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>((m_level)%3==2)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">return</span>(base/4);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>((m_level)%3==0)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span>(base/2);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span>(base);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> Egcs::force2grid(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span> &lry)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">double</span> dx=getResolution();</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">double</span> dy=dx;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">//ulx</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> ulx=floor(ulx);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> ulx-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ulx)%(static_cast<int>(dx));</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">//uly</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> uly=ceil(uly);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span>(static_cast<int>(uly)%static_cast<int>(dy))</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> uly+=dy;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> uly-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(uly)%(static_cast<int>(dy));</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">//lrx</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> lrx=ceil(lrx);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span>(static_cast<int>(lrx)%static_cast<int>(dx))</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> lrx+=dx;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> lrx-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lrx)%(static_cast<int>(dx));</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">//lry</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> lry=floor(lry);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> lry-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lry)%(static_cast<int>(dy));</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> Egcs::cell2bb(<span class="keyword">const</span> std::string& cellCode, <span class="keywordtype">int</span> &ulx, <span class="keywordtype">int</span> &uly, <span class="keywordtype">int</span> &lrx, <span class="keywordtype">int</span> &lry)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">size_t</span> pos=cellCode.find(<span class="stringliteral">"-"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> std::string TILE=cellCode.substr(0,pos);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> std::string TILEX=TILE.substr(0,TILE.size()/2);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> std::string TILEY=TILE.substr(TILE.size()/2);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> std::string QUAD;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">char</span> QUAD1,QUAD2;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> std::istringstream stilex(TILEX);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> std::istringstream stiley(TILEY);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> llx,lly;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> stilex >> llx;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> stiley >> lly;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> llx*=getBaseSize();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> lly*=getBaseSize();</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">switch</span>((19-m_level)%3){</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">case</span>(0):<span class="comment">//there should be no QUAD</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> assert(pos==std::string::npos);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">case</span>(2):<span class="comment">//there is a QUAD2</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> assert(pos+1!=std::string::npos);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QUAD=cellCode.substr(pos+1);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QUAD2=QUAD.substr(1,1).c_str()[0];</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">switch</span>(QUAD2){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">case</span>(<span class="charliteral">'A'</span>):</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">case</span>(<span class="charliteral">'C'</span>):</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> lly+=getBaseSize()/4;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">case</span>(<span class="charliteral">'D'</span>):</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> lly+=getBaseSize()/4;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">case</span>(<span class="charliteral">'B'</span>):</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> llx+=getBaseSize()/4;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">case</span>(1):<span class="comment">//QUAD1: deliberate fall through from case(2)!</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(!QUAD.size()){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> assert(pos+1!=std::string::npos);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> QUAD=cellCode.substr(pos+1);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> QUAD1=QUAD.substr(0,1).c_str()[0];</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">switch</span>(QUAD1){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">case</span>(<span class="charliteral">'A'</span>):</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">case</span>(<span class="charliteral">'C'</span>):</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> lly+=getBaseSize()/2;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">case</span>(<span class="charliteral">'D'</span>):</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> lly+=getBaseSize()/2;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">case</span>(<span class="charliteral">'B'</span>):</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> llx+=getBaseSize()/2;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> ulx=llx;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> uly=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lly+getSize());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> lrx=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(llx+getSize());</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> lry=lly;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> Egcs::cell2mid(<span class="keyword">const</span> std::string& cellCode, <span class="keywordtype">double</span>& midX, <span class="keywordtype">double</span>& midY)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">int</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> cell2bb(cellCode,ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> midX=(ulx+lrx)/2.0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> midY=(lry+uly)/2.0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> std::string Egcs::geo2cell(<span class="keywordtype">double</span> geoX, <span class="keywordtype">double</span> geoY)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">int</span> ndgts=7-(m_level+1)/3;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">double</span> xcel=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(geoX)/getBaseSize();</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">double</span> ycel=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(geoY)/getBaseSize();</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> std::ostringstream osx;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> std::ostringstream osy, osxy;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// osx << setprecision(ndgts) << xcel;</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// osy << setprecision(ndgts) << ycel;</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// osx << setprecision(0) << fixed << geoX;</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// osy << setprecision(0) << fixed << geoY;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> osx << std::fixed << geoX;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> osy << std::fixed << geoY;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> std::string quad1=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> std::string quad2=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">switch</span>((19-m_level)%3){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">case</span>(2):</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span>(static_cast<int>(geoX)%(getBaseSize()/2)>=getBaseSize()/2.0){</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(static_cast<int>(geoY)%(getBaseSize()/2)>=getBaseSize()/2.0)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> quad2=<span class="stringliteral">"D"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> quad2=<span class="stringliteral">"B"</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(static_cast<int>(geoY)%getBaseSize()>=getBaseSize()/4.0)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> quad2=<span class="stringliteral">"C"</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> quad2=<span class="stringliteral">"A"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">case</span>(1):<span class="comment">//deliberate fall through!</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>(static_cast<int>(geoX)%getBaseSize()>=getBaseSize()/2.0){</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(static_cast<int>(geoY)%getBaseSize()>=getBaseSize()/2.0)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> quad1=<span class="stringliteral">"-D"</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> quad1=<span class="stringliteral">"-B"</span>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(static_cast<int>(geoY)%getBaseSize()>=getBaseSize()/2.0)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> quad1=<span class="stringliteral">"-C"</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> quad1=<span class="stringliteral">"-A"</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> osxy << osx.str().substr(0,ndgts) << osy.str().substr(0,ndgts) << quad1 << quad2;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> osxy.str();</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Egcs_8h_source.html b/doc/html/Egcs_8h_source.html
new file mode 100644
index 0000000..66c8f34
--- /dev/null
+++ b/doc/html/Egcs_8h_source.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Egcs.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Egcs.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Egcs.h: Conversions from and to european grid coding system</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#ifndef _EGCS_H_</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span><span class="preprocessor">#define _EGCS_H_</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classEgcs.html"> 26</a></span> <span class="keyword">class </span><a class="code" href="classEgcs.html">Egcs</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <a class="code" href="classEgcs.html">Egcs</a>();</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <a class="code" href="classEgcs.html">Egcs</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> level);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* Egcs(unsigned short level); */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> ~<a class="code" href="classEgcs.html">Egcs</a>();</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cell2level(<span class="keyword">const</span> std::string& cellCode) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> std::string geo2cell(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">double</span> getSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> getBaseSize()*pow(2.0,(m_level-19)%3);};</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> setLevel(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> level){m_level=level;};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> getLevel()<span class="keyword"> const</span>{<span class="keywordflow">return</span> m_level;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> res2level(<span class="keywordtype">double</span> resolution) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">double</span> getResolution() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> force2grid(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span> &lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> cell2bb(<span class="keyword">const</span> std::string& cellCode, <span class="keywordtype">int</span> &ulx, <span class="keywordtype">int</span> &uly, <span class="keywordtype">int</span> &lrx, <span class="keywordtype">int</span> &lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> cell2mid(<span class="keyword">const</span> std::string& cellCode, <span class="keywordtype">double</span>& midX, <span class="keywordtype">double</span>& midY) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> getBaseSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> pow(10.0,(m_level+1)/3);};</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> m_level;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// level square scheme example</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// 19 1000km xy 32</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">// 18 500km xy-q 32-A</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// 17 250km xy-qq 32-AB</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// 16 100km xxyy 3320</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// 5 25m xxxxxyyyyy-qq 3346720658-DC</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// 1 1m xxxxxxxyyyyyyy 33467652065889</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif // _EGCS_H_</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div>
+<div class="ttc" id="classEgcs_html"><div class="ttname"><a href="classEgcs.html">Egcs</a></div><div class="ttdef"><b>Definition:</b> <a href="Egcs_8h_source.html#l00026">Egcs.h:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/FeatureSelector_8h_source.html b/doc/html/FeatureSelector_8h_source.html
new file mode 100644
index 0000000..a6b3cc5
--- /dev/null
+++ b/doc/html/FeatureSelector_8h_source.html
@@ -0,0 +1,440 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/FeatureSelector.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FeatureSelector.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">FeatureSelector.h: select features, typical use: feature selection for classification</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _FEATURESELECTOR_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _FEATURESELECTOR_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <list></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "base/IndexValue.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "gsl/gsl_combination.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "CostFactory.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classFeatureSelector.html"> 35</a></span> <span class="keyword">class </span><a class="code" href="classFeatureSelector.html">FeatureSelector</a></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classFeatureSelector.html">FeatureSelector</a>(){};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> ~<a class="code" href="classFeatureSelector.html">FeatureSelector</a>(){};</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> forward(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures, <span class="keywordtyp [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> backward(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> minFeatures, <span class="keywordty [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> floating(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures=0, <span class="keyword [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> bruteForce(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures=0, <span class="keywo [...]
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> addFeature(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">short</span> verbose=0);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> removeFeature(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span>& r, <span class="keywordty [...]
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> forwardUnivariate(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures, <span class=" [...]
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">//sequential forward selection Univariate (N single best features)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::forwardUnivariate(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures [...]
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span>(!maxFeatures)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> maxFeatures=maxLevels;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> k=subset.size();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span>(k>=maxFeatures)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> std::vector<IndexValue> cost(maxLevels);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> std::list<int> tmpset=subset;<span class="comment">//temporary set of selected features (levels)</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> std::vector< Vector2d<T> > tmp(v.size());</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilevel=0;ilevel<maxLevels;++ilevel){</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span>(find(tmpset.begin(),tmpset.end(),ilevel)==tmpset.end()){</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> tmpset.push_back(ilevel);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<v.size();++iclass){</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// tmp[iclass].resize(v[iclass].size());</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> v[iclass].selectCols(tmpset,tmp[iclass]);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="structIndexValue.html">IndexValue</a> pv;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> pv.position=ilevel;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> pv.value=theCostFactory.getCost(tmp);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> cost[ilevel]=pv;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="structIndexValue.html">IndexValue</a> pv;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> pv.position=ilevel;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> pv.value=-1;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> cost[ilevel]=pv;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> tmpset.pop_back();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> sort(cost.begin(),cost.end(),<a class="code" href="classCompare__IndexValue.html">Compare_IndexValue</a>());<span class="comment">//decreasing order</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> ilevel=0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">while</span>((subset.size()<maxFeatures)&&(ilevel<maxLevels)){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(cost[ilevel].value>0)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> subset.push_back(cost[ilevel].position);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> std::cout << <span class="stringliteral">"feature "</span> << subset.back() << <span class="stringliteral">" has cost: "</span> << cost[ilevel].value << std::endl;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ++ilevel;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">double</span> maxCost=-1;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">while</span>(subset.size()){</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<v.size();++iclass){</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// tmp[iclass].resize(v[iclass].size());</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> v[iclass].selectCols(subset,tmp[iclass]);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> maxCost=theCostFactory.getCost(tmp);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> subset.pop_back();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//sequential forward selection Multivariate (Combination of N best features)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::forward(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures=0, <span [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">//Select feature with the best value (get maximal cost for 1 feature)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> maxCost=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(!maxFeatures)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> maxFeatures=maxLevels;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">while</span>(subset.size()<maxFeatures){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> maxCost=addFeature(v,theCostFactory,subset,verbose);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span>(std::list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> std::cout << *lit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// std::cout << "added " << subset.back() << ", " << subset.size() << "/" << maxFeatures << " features selected with cost: " << maxCost << std::endl;</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }<span class="comment">//while</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">//sequential backward selection</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::backward(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> minFeatures, <span c [...]
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">//Select features with least effect on cost when removed (obtain minFeatures eventually)</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">double</span> maxCost=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> removedFeature;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(subset.empty()){</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iFeature=0;iFeature<v[0][0].size();++iFeature)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> subset.push_back(iFeature);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(subset.size()==minFeatures)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> maxCost=theCostFactory.getCost(v);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">while</span>(subset.size()>minFeatures){</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> maxCost=removeFeature(v,theCostFactory,subset,removedFeature,verbose);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span>(std::list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> std::cout << *lit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// std::cout << "removed " << removedFeature << ", " << subset.size() << "/" << minFeatures << " features remain with cost: " << maxCost << std::endl;</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }<span class="comment">//while</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">//floating search</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::floating(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures, <span c [...]
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> std::vector<T> cost;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(maxFeatures<1)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> maxFeatures=maxLevels;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">int</span> k=subset.size();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(k>=maxFeatures)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">while</span>(cost.size()<subset.size())</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> cost.push_back(1);<span class="comment">//init original features as cost 1</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> cost.push_back(addFeature(v,theCostFactory,subset,verbose));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ++k;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> std::cout << <span class="stringliteral">"added "</span> << subset.back() << <span class="stringliteral">", "</span> << subset.size() << <span class="stringliteral">"/"</span> << maxFeatures << <span class="stringliteral">" features selected with cost: "</span> << cost.back() << std::endl;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span>(std::list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> std::cout << *lit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">while</span>(k<maxFeatures){</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> cost.push_back(addFeature(v,theCostFactory,subset,verbose));</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> ++k;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> std::cout << <span class="stringliteral">"added "</span> << subset.back() << <span class="stringliteral">", "</span> << subset.size() << <span class="stringliteral">"/"</span> << maxFeatures << <span class="stringliteral">" features selected with cost: "</span> << cost.back() << std::endl;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">for</span>(std::list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> std::cout << *lit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> std::cout << <span class="stringliteral">" (cost: "</span> << cost.back() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">while</span>(k>1){</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">int</span> x_r;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">double</span> cost_r=removeFeature(v,theCostFactory,subset,x_r,verbose);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span>(cost_r>cost[k-1]+epsilon){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> --k;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> cost[k]=cost_r;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> cost.pop_back();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::cout << <span class="stringliteral">"removed "</span> << x_r << <span class="stringliteral">", "</span> << subset.size() << <span class="stringliteral">"/"</span> << maxFeatures << <span class="stringliteral">" features remain with cost: "</span> << cost_r << std::endl;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(std::list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> std::cout << *lit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> std::cout << <span class="stringliteral">" (cost: "</span> << cost.back() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(cost_r>=0){</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> subset.push_back(x_r);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> std::cout << <span class="stringliteral">"could not remove any feature"</span> << std::endl;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> cost.pop_back();</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> cost.back();</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">//brute force search (search for all possible combinations and select best)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::bruteForce(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span> maxFeatures, <span [...]
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(maxFeatures<1)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> maxFeatures=maxLevels;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">int</span> k=subset.size();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(k>=maxFeatures)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// gslmm::combination c(v1[0].size(),maxFeatures,false);</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> gsl_combination *c;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> c=gsl_combination_calloc(v[0][0].size(),maxFeatures);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> std::list<int> tmpset;<span class="comment">//temporary set of selected features (levels)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> std::vector< Vector2d<T> > tmpv(v.size());</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> std::list<int> catchset;<span class="comment">//restore set in case of catch all the way to last level (no better cost)</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">//initialize maxCost with actual cost for current subset (-1 if empty subset) </span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">double</span> maxCost=-1;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">double</span> cost;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(subset.size()>=maxLevels)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> gsl_combination_next(c);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">do</span>{</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<maxFeatures;++ifeature)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> tmpset.push_back(c->data[ifeature]);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<v.size();++iclass)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> v[iclass].selectCols(tmpset,tmpv[iclass]);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> cost=theCostFactory.getCost(tmpv);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">catch</span>(...){ <span class="comment">//singular matrix encountered</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> catchset=tmpset;<span class="comment">//this tmpset resulted in failure of getCost</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> std::cout << <span class="stringliteral">"Could not get cost from set: "</span> << std::endl;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> gsl_combination_fprintf(stdout,c,<span class="stringliteral">" %u"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> } </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> tmpset.clear();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(maxCost<cost){ <span class="comment">//set with better cost is found</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> maxCost=cost;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> subset=tmpset;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> tmpset.clear();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }<span class="keywordflow">while</span>(gsl_combination_next(c)==GSL_SUCCESS);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> gsl_combination_free(c);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// }while(c.next()); </span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(maxCost<0) <span class="comment">//no level added to better maxCost than current subset (catchset)</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> subset=catchset;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">//test: assert list contains no duplicate elements</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span>(std::list<int>::iterator lit=subset.begin();lit!=subset.end();++lit){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> std::list<int>::iterator lit2=lit;<span class="comment">//start searching from next element</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> assert(find(++lit2,subset.end(),*lit)==subset.end());</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::addFeature(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">short</span> verbose){</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">//select feature with the best value (get maximal cost for 1 feature)</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> std::list<int> tmpset=subset;<span class="comment">//temporary set of selected features (levels)</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> std::vector< Vector2d<T> > tmp(v.size());</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> std::list<int> catchset;<span class="comment">//restore set in case of catch all the way to last level (no better cost)</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">//initialize maxCost with actual cost for current subset (-1 if empty subset) </span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">double</span> maxCost=-1;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">double</span> cost;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(subset.size()>=maxLevels)</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilevel=0;ilevel<maxLevels;++ilevel){</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(find(tmpset.begin(),tmpset.end(),ilevel)!=tmpset.end())</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> tmpset.push_back(ilevel);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<v.size();++iclass){</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// tmp[iclass].resize(v[iclass].size());</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> v[iclass].selectCols(tmpset,tmp[iclass]);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> cost=theCostFactory.getCost(tmp);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> catchset=tmpset;<span class="comment">//this tmpset resulted in singular matrix</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> std::cout << <span class="stringliteral">"Could not add feature "</span> << tmpset.back() << std::endl;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> tmpset.pop_back();</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span>(maxCost<cost){ <span class="comment">//level with better cost is found</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> maxCost=cost;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> subset=tmpset;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> tmpset.pop_back();</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(maxCost<0) <span class="comment">//no level added to better maxCost than current subset (catchset)</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> subset=catchset;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">//test: assert list contains no duplicate elements</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span>(std::list<int>::iterator lit=subset.begin();lit!=subset.end();++lit){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> std::list<int>::iterator lit2=lit;<span class="comment">//start searching from next element</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> assert(find(++lit2,subset.end(),*lit)==subset.end());</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> FeatureSelector::removeFeature(std::vector< <a class="code" href="classVector2d.html">Vector2d<T></a> >& v, <a class="code" href="classCostFactory.html">CostFactory</a>& theCostFactory, std::list<int>& subset, <span class="keywordtype">int</span>& r, <span c [...]
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">//find the feature that has the least effect on the cost when it is removed from subset</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> std::list<int> tmpset=subset;<span class="comment">//temporary set of selected features (levels)</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> std::vector< Vector2d<T> > tmp(v.size());</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">int</span> nFeatures=subset.size();</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> std::list<int> catchset;<span class="comment">//restore set in case of catch all the way to last level (no better cost)</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">//initialize maxCost with actual cost for current subset (-1 if empty subset) </span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">double</span> maxCost=-1;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">int</span> last;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">double</span> cost;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">int</span> maxLevels=v[0][0].size();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>(subset.size()>maxLevels||subset.empty()){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> std::list<int>::const_iterator it;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nFeatures;++i){</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> last=tmpset.back();</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> tmpset.pop_back();</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<v.size();++iclass){</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">// tmp[iclass].resize(v[iclass].size());</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> v[iclass].selectCols(tmpset,tmp[iclass]);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> cost=theCostFactory.getCost(tmp);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> catchset=tmpset;<span class="comment">//this tmpset resulted in singular matrix</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> std::cout << <span class="stringliteral">"Could not remove feature "</span> << last << std::endl;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> tmpset.push_front(last);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(maxCost<cost){ <span class="comment">//level with better cost is found</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> maxCost=cost;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> subset=tmpset;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> r=last;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> tmpset.push_front(last);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(maxCost<0){<span class="comment">//all levels removed were catched</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> subset=catchset;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">//test: assert list contains no duplicate elements</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">for</span>(std::list<int>::iterator lit=subset.begin();lit!=subset.end();++lit){</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> std::list<int>::iterator lit2=lit;<span class="comment">//start searching from next element</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> assert(find(++lit2,subset.end(),*lit)==subset.end());</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">return</span> maxCost;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor">#endif </span><span class="comment">/* _FEATURESELECTOR_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classCompare__IndexValue_html"><div class="ttname"><a href="classCompare__IndexValue.html">Compare_IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00027">IndexValue.h:27</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="structIndexValue_html"><div class="ttname"><a href="structIndexValue.html">IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00023">IndexValue.h:23</a></div></div>
+<div class="ttc" id="classFeatureSelector_html"><div class="ttname"><a href="classFeatureSelector.html">FeatureSelector</a></div><div class="ttdef"><b>Definition:</b> <a href="FeatureSelector_8h_source.html#l00035">FeatureSelector.h:35</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/FileReaderAscii_8cc_source.html b/doc/html/FileReaderAscii_8cc_source.html
new file mode 100644
index 0000000..103f7aa
--- /dev/null
+++ b/doc/html/FileReaderAscii_8cc_source.html
@@ -0,0 +1,313 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/fileclasses/FileReaderAscii.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_849702d4228bd835bdf1201002937cb3.html">fileclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderAscii.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">FileReaderAscii.cc: class to read ASCII files using (colum based)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2013 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "FileReaderAscii.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> FileReaderAscii::FileReaderAscii(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> : m_min(0),m_max(0),m_minRow(0),m_maxRow(0),m_fs(<span class="stringliteral">' '</span>),m_comment(<span class="stringliteral">'#'</span>){</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> FileReaderAscii::FileReaderAscii(<span class="keyword">const</span> std::string& filename)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> : m_min(0),m_max(0),m_minRow(0),m_maxRow(0),m_fs(<span class="stringliteral">' '</span>),m_comment(<span class="stringliteral">'#'</span>){</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> open(filename);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> FileReaderAscii::FileReaderAscii(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> <span class="keywordtype">char</span>& fieldseparator)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> : m_min(0),m_max(0),m_minRow(0),m_maxRow(0),m_fs(fieldseparator),m_comment(<span class="stringliteral">'#'</span>){</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> open(filename);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> FileReaderAscii::~FileReaderAscii(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> FileReaderAscii::open(<span class="keyword">const</span> std::string& filename){</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> m_filename=filename;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> m_ifstream.open(filename.c_str(),std::ios_base::in);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span>(!(m_ifstream)){</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> std::string errorString;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> errorString=<span class="stringliteral">"Error: could not open file "</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> errorString+=filename;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">void</span> FileReaderAscii::close(){</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> m_ifstream.close();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// m_ifstream.clear();</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FileReaderAscii::nrOfCol(<span class="keywordtype">bool</span> checkCols, <span class="keywordtype">bool</span> verbose){</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> reset();</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalCol=0;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span>(m_fs><span class="charliteral">' '</span>&&m_fs<=<span class="charliteral">'~'</span>){<span class="comment">//field separator is a regular character (minimum ASCII code is space, maximum ASCII code is tilde)</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> std::cout << <span class="stringliteral">"reading csv file "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> std::string csvRecord;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">while</span>(getline(m_ifstream,csvRecord)){<span class="comment">//read a line</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> std::istringstream csvstream(csvRecord);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> std::string item;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">while</span>(getline(csvstream,item,m_fs)){<span class="comment">//read a column</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> ++ncol;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> std::cout << std::endl << <span class="stringliteral">"number of columns: "</span> << ncol << std::endl;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span>(!totalCol)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> totalCol=ncol;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(checkCols){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>(totalCol!=ncol){</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">"!="</span> << totalCol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> ++nrow;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">else</span>{<span class="comment">//space or tab delimited fields</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> std::cout << <span class="stringliteral">"space or tab delimited fields"</span> << std::endl;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::string spaceRecord;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">while</span>(!getline(m_ifstream, spaceRecord).eof()){</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::cout << spaceRecord << std::endl;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::istringstream lineStream(spaceRecord);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> std::string item;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">while</span>(lineStream >> item){</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> ++ncol;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> std::cout << std::endl << <span class="stringliteral">"number of columns: "</span> << ncol << std::endl;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(!totalCol)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> totalCol=ncol;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(checkCols){</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(totalCol!=ncol){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">"!="</span> << totalCol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> ++nrow;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> totalCol;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FileReaderAscii::nrOfRow(<span class="keywordtype">bool</span> checkCols, <span class="keywordtype">bool</span> verbose){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> reset();</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalCol=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncomment=0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(m_fs><span class="charliteral">' '</span>&&m_fs<=<span class="charliteral">'~'</span>){<span class="comment">//field separator is a regular character (minimum ASCII code is space, maximum ASCII code is tilde)</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::cout << <span class="stringliteral">"reading csv file "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> std::string csvRecord;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">while</span>(getline(m_ifstream,csvRecord)){<span class="comment">//read a line</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> std::istringstream csvstream(csvRecord);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::string item;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">while</span>(getline(csvstream,item,m_fs)){<span class="comment">//read a column</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(pos>0){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> ++ncomment;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> ++ncol;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span>(checkCols){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(totalCol!=ncol){</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">"!="</span> << totalCol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> ++nrow;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">else</span>{<span class="comment">//space or tab delimited fields</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> std::cout << <span class="stringliteral">"space or tab delimited fields"</span> << std::endl;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> std::string spaceRecord;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">int</span> totalCol=0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">while</span>(!getline(m_ifstream, spaceRecord).eof()){</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> std::cout << spaceRecord << std::endl;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> std::istringstream lineStream(spaceRecord);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> std::string item;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">while</span>(lineStream >> item){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(pos>0){</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> ++ncomment;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> ++ncol;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> std::cout << std::endl << <span class="stringliteral">"number of columns: "</span> << ncol << std::endl;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(checkCols){</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span>(totalCol!=ncol){</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">"!="</span> << totalCol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> ++nrow;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> nrow;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/FileReaderAscii_8h_source.html b/doc/html/FileReaderAscii_8h_source.html
new file mode 100644
index 0000000..878671f
--- /dev/null
+++ b/doc/html/FileReaderAscii_8h_source.html
@@ -0,0 +1,374 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/fileclasses/FileReaderAscii.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_849702d4228bd835bdf1201002937cb3.html">fileclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderAscii.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">FileReaderAscii.h: class to read ASCII files using (colum based)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2013 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGREADERASCII_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGREADERASCII_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <armadillo></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classFileReaderAscii.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classFileReaderAscii.html">FileReaderAscii</a></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a>(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a>(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> <span class="keywordtype">char</span>& fieldseparator);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ~<a class="code" href="classFileReaderAscii.html">FileReaderAscii</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">void</span> reset(){m_ifstream.clear();m_ifstream.seekg(0,std::ios::beg);};</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> setFieldSeparator(<span class="keyword">const</span> <span class="keywordtype">char</span>& fieldseparator){m_fs=fieldseparator;};</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> setMinRow(<span class="keywordtype">int</span> minRow){m_minRow=minRow;};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> setMaxRow(<span class="keywordtype">int</span> maxRow){m_maxRow=maxRow;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> setComment(<span class="keywordtype">char</span> comment){m_comment=comment;};</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nrOfCol(<span class="keywordtype">bool</span> checkCols=<span class="keyword">false</span>, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nrOfRow(<span class="keywordtype">bool</span> checkCols=<span class="keyword">false</span>, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readData(std::vector<std::vector<T> > &dataVector, <span class="keyword">const</span> std::vector<int> &cols, <span class="keywordtype">double</span> scale=1.0, <span class="keywordtype">double</span> offset=0.0, <span class= [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readData(std::vector<T> &dataVector, <span class="keywordtype">int</span> col, <span class="keywordtype">double</span> scale=1.0, <span class="keywordtype">double</span> offset=0, <span class="keywordtype">bool</span> verbose=<span class="ke [...]
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> std::string m_filename;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> std::ifstream m_ifstream;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">char</span> m_fs;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">char</span> m_comment;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> m_min;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> m_max;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> m_minRow;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> m_maxRow;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> };</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FileReaderAscii::readData(std::vector<T> &dataVector, <span class="keywordtype">int</span> col, <span class="keywordtype">double</span> scale, <span class="keywordtype">double</span> offset, <span class="keywordtype">bool</span> verbose){</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> reset();</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> dataVector.clear();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">bool</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span>(m_fs><span class="charliteral">' '</span>&&m_fs<=<span class="charliteral">'~'</span>){<span class="comment">//field separator is a regular character (minimum ASCII code is space, maximum ASCII code is tilde)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> std::cout << <span class="stringliteral">"reading csv file "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> std::string csvRecord;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">while</span>(getline(m_ifstream,csvRecord)){<span class="comment">//read a line</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span>(nrow<m_minRow)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span>(m_maxRow>m_minRow)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span>(nrow>m_maxRow)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(withinRange){</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> std::istringstream csvstream(csvRecord);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> std::string item;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">while</span>(getline(csvstream,item,m_fs)){<span class="comment">//read a column</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span>(ncol==col){</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> T value=scale*string2type<T>(item)+offset;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span>((value>=m_min&&value<=m_max)||m_max<=m_min)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> dataVector.push_back(value);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> ++ncol;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(dataVector.size()&&ncol<=col){</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> ++nrow;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> assert(dataVector.size());</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">else</span>{<span class="comment">//space or tab delimited fields</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> std::cout << <span class="stringliteral">"space or tab delimited fields"</span> << std::endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> std::string spaceRecord;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">while</span>(!getline(m_ifstream, spaceRecord).eof()){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(nrow<m_minRow)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(m_maxRow>m_minRow)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(nrow>m_maxRow)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span>(withinRange){</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> std::cout << spaceRecord << std::endl;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> std::istringstream lineStream(spaceRecord);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> std::string item;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">while</span>(lineStream >> item){</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// std::istringstream itemStream(item);</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> T value=scale*string2type<T>(item)+offset;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// T value=string2type<T>(item);</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(ncol==col){</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>((value>=m_min&&value<=m_max)||m_max<=m_min)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> dataVector.push_back(value);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> ++ncol;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> std::cout << <span class="stringliteral">"number of columns: "</span> << ncol << std::endl;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(dataVector.size()&&ncol<=col){</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> ess << <span class="stringliteral">"Error: different number of cols found in line "</span> << nrow << <span class="stringliteral">" ("</span> << ncol << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> ++nrow;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> dataVector.size();</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FileReaderAscii::readData(std::vector<std::vector<T> > &dataVector, <span class="keyword">const</span> std::vector<int> &cols, <span class="keywordtype">double</span> scale, <span class="keywordtype">double</span> offset, <span [...]
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> reset();</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> dataVector.clear();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>(!transpose)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> dataVector.resize(cols.size());</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">bool</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span>(m_fs><span class="charliteral">' '</span>&&m_fs<=<span class="charliteral">'~'</span>){<span class="comment">//field separator is a regular character (minimum ASCII code is space, maximum ASCII code is tilde)</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> std::cout << <span class="stringliteral">"reading csv file "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> std::string csvRecord;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">while</span>(getline(m_ifstream,csvRecord)){<span class="comment">//read a line</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> std::vector<T> sampleVector;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(nrow<m_minRow)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(m_maxRow>m_minRow)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(nrow>m_maxRow)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(withinRange){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::istringstream csvstream(csvRecord);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> std::string item;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">while</span>(getline(csvstream,item,m_fs)){<span class="comment">//read a column</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<cols.size();++icol){</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(ncol==cols[icol]){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> T value=scale*string2type<T>(item)+offset;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">// T value=string2type<T>(item);</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>((value>=m_min&&value<=m_max)||m_max<=m_min){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(transpose)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> sampleVector.push_back(value);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> dataVector[icol].push_back(value);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> ++ncol;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// if(dataVector.back().size())</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// assert(ncol>=cols[0]);</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span>(sampleVector.size()&&transpose)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> dataVector.push_back(sampleVector);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> ++nrow;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> assert(dataVector.size());</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">else</span>{<span class="comment">//space or tab delimited fields</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> std::cout << <span class="stringliteral">"space or tab delimited fields"</span> << std::endl;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> std::string spaceRecord;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">while</span>(!getline(m_ifstream, spaceRecord).eof()){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> std::vector<T> sampleVector;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> withinRange=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>(nrow<m_minRow)</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(m_maxRow>m_minRow)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(nrow>m_maxRow)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> withinRange=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(withinRange){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> std::cout << spaceRecord << std::endl;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> std::istringstream lineStream(spaceRecord);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> std::string item;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">bool</span> isComment=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">while</span>(lineStream >> item){</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> std::cout << item << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// std::istringstream itemStream(item);</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">size_t</span> pos=item.find(m_comment);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(pos!=std::string::npos){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> isComment=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>(pos>0)</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> item=item.substr(0,pos-1);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> std::cout << <span class="stringliteral">"comment found, string is "</span> << item << std::endl;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> T value=scale*string2type<T>(item)+offset;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// T value=string2type<T>(item);</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<cols.size();++icol){</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span>(ncol==cols[icol]){</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span>((value>=m_min&&value<=m_max)||m_max<=m_min){</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(transpose)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> sampleVector.push_back(value);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> dataVector[icol].push_back(value);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> ++ncol;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(isComment)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> std::cout << <span class="stringliteral">"number of columns: "</span> << ncol << std::endl;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// if(dataVector.back().size())</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// assert(ncol>=cols[0]);</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span>(sampleVector.size()&&transpose)</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> dataVector.push_back(sampleVector);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> ++nrow;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">return</span> dataVector.size();</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor">#endif // _IMGREADERASCII_H_</span></div>
+<div class="ttc" id="classFileReaderAscii_html"><div class="ttname"><a href="classFileReaderAscii.html">FileReaderAscii</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderAscii_8h_source.html#l00030">FileReaderAscii.h:30</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/FileReaderLas_8cc_source.html b/doc/html/FileReaderLas_8cc_source.html
new file mode 100644
index 0000000..902a9fb
--- /dev/null
+++ b/doc/html/FileReaderLas_8cc_source.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/lasclasses/FileReaderLas.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_89a0bd85ecec8fbb2c320310670be290.html">lasclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderLas.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">FileReaderLas.cc: class to read LAS files using liblas API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "FileReaderLas.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> LastReturnFilter::LastReturnFilter( ) : liblas::FilterI(eInclusion) {}</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">bool</span> LastReturnFilter::filter(<span class="keyword">const</span> liblas::Point& p)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// If the GetReturnNumber equals the GetNumberOfReturns,</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// we're a last return</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">bool</span> output = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span> (p.GetReturnNumber() == p.GetNumberOfReturns())</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> output = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// If the type is switched to eExclusion, we'll throw out all last returns.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span> (GetType() == eExclusion && output == <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> output = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> output = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> output;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FileReaderLas::FileReaderLas(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> m_reader=NULL;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> m_ifstream=NULL;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> FileReaderLas::FileReaderLas(<span class="keyword">const</span> std::string& filename)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> open(filename);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> FileReaderLas::~FileReaderLas(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">delete</span> m_ifstream;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">delete</span> m_reader;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> FileReaderLas::open(<span class="keyword">const</span> std::string& filename)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> m_filename = filename;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> setCodec(filename);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> FileReaderLas::close(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> m_ifstream->close();</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> m_ifstream=NULL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> m_reader=NULL;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> FileReaderLas::setCodec(<span class="keyword">const</span> std::string& filename){</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> m_ifstream = <span class="keyword">new</span>(std::ifstream);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> m_ifstream->open(m_filename.c_str(),std::ios::in|std::ios::binary);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> liblas::ReaderFactory f;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> liblas::Reader reader = f.CreateWithStream(*m_ifstream);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> m_reader=<span class="keyword">new</span> liblas::Reader(reader);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// m_reader = new liblas::Reader(*m_ifstream);</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">//Note: It is possible to use the basic liblas::Reader constructor that takes in a std::istream, but it will not be able to account for the fact that the file might be compressed. Using the ReaderFactory will take care of all of this for you.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// m_reader=&rfactory.CreateWithStream(ifs);</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> liblas::Header <span class="keyword">const</span>& FileReaderLas::getHeader()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span>(m_reader->GetHeader());</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">bool</span> FileReaderLas::isCompressed()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> getHeader().Compressed();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> FileReaderLas::getPointCount()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">return</span> getHeader().GetPointRecordsCount();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> FileReaderLas::las2ascii(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">bool</span> verbose)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::ofstream fpoints(filename.c_str(),std::ios::out);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> fpoints << <span class="stringliteral">"#"</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fpoints << <span class="stringliteral">"X"</span> << <span class="stringliteral">","</span> << <span class="stringliteral">"Y"</span> << <span class="stringliteral">","</span> << <span class="stringliteral">"Z"</span> << std::endl;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> m_reader->Reset();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"going through points"</span> << std::endl;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">while</span>(m_reader->ReadNextPoint()){</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> liblas::Point <span class="keyword">const</span>& thePoint=m_reader->GetPoint();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> x=thePoint.GetX();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> y=thePoint.GetY();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">double</span> z=thePoint.GetZ();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> fpoints.precision(12);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> fpoints << x << <span class="stringliteral">","</span> << y << <span class="stringliteral">","</span> << z << std::endl;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> fpoints.close();</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> FileReaderLas::getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> liblas::Header& theHeader=getHeader();</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> ulx=theHeader.GetMinX();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> uly=theHeader.GetMaxY();</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> lrx=theHeader.GetMaxX();</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> lry=theHeader.GetMinY();</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">double</span> FileReaderLas::getMinZ()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span>(getHeader().GetMinZ());</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">double</span> FileReaderLas::getMaxZ()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span>(getHeader().GetMaxZ());</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">//todo: does not work ??</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// void FileReaderLas::addBoundsFilter(double ulx, double uly, double lrx, double lry){</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment">// liblas::Bounds<double> bounds = liblas::Bounds<double>(ulx,lry,lrx,uly);</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// typedef liblas::BoundsFilter filter;</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// filter* bounds_filter = new filter(bounds);</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// bounds_filter->SetType(liblas::FilterI::eInclusion);</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// m_filters.push_back(liblas::FilterPtr(bounds_filter));</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">void</span> FileReaderLas::addReturnsFilter(std::vector<unsigned short> <span class="keyword">const</span>& returns){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">typedef</span> liblas::ReturnFilter filter;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> filter* return_filter;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> std::vector<boost::uint16_t> returns_t;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(returns[0]<0)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> return_filter=<span class="keyword">new</span> filter(returns_t,<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<returns.size();++index){</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> assert(returns[index]>0);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> returns_t.push_back(returns[index]);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> return_filter=<span class="keyword">new</span> filter(returns_t,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> m_filters.push_back(liblas::FilterPtr(return_filter));</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">void</span> FileReaderLas::addClassFilter(std::vector<unsigned short> <span class="keyword">const</span>& classes){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> std::vector<liblas::FilterPtr> filters;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> std::vector<liblas::Classification> theClasses;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classes.size();++iclass){</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> liblas::Classification aClass(classes[iclass]);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> theClasses.push_back(aClass);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> liblas::FilterPtr class_filter = liblas::FilterPtr(<span class="keyword">new</span> liblas::ClassificationFilter(theClasses));</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// eInclusion means to keep the classes that match. eExclusion would</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// throw out those that matched</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> class_filter->SetType(liblas::FilterI::eInclusion);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> m_filters.push_back(class_filter);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/FileReaderLas_8h_source.html b/doc/html/FileReaderLas_8h_source.html
new file mode 100644
index 0000000..62b9f59
--- /dev/null
+++ b/doc/html/FileReaderLas_8h_source.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/lasclasses/FileReaderLas.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_89a0bd85ecec8fbb2c320310670be290.html">lasclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderLas.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">FileReaderLas.h: class to read LAS files using liblas API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGREADERLAS_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGREADERLAS_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "liblas/liblas.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classLastReturnFilter.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classLastReturnFilter.html">LastReturnFilter</a>: <span class="keyword">public</span> liblas::FilterI</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <a class="code" href="classLastReturnFilter.html">LastReturnFilter</a>();</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">bool</span> filter(<span class="keyword">const</span> liblas::Point& point);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classLastReturnFilter.html">LastReturnFilter</a>(<a class="code" href="classLastReturnFilter.html">LastReturnFilter</a> <span class="keyword">const</span>& other);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classLastReturnFilter.html">LastReturnFilter</a>& operator=(<a class="code" href="classLastReturnFilter.html">LastReturnFilter</a> <span class="keyword">const</span>& rhs);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> };</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classFileReaderLas.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classFileReaderLas.html">FileReaderLas</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="classFileReaderLas.html">FileReaderLas</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classFileReaderLas.html">FileReaderLas</a>(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> ~<a class="code" href="classFileReaderLas.html">FileReaderLas</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> liblas::Header <span class="keyword">const</span>& getHeader() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">bool</span> isCompressed() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> getPointCount() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> las2ascii(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> liblas::Bounds<T> getExtent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> getHeader().GetExtent();};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">double</span> getMinZ() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> getMaxZ() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> resetReader(){m_reader->Reset();};</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> setFilter(std::vector<liblas::FilterPtr> <span class="keyword">const</span>& filters);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">bool</span> <span class="keyword">const</span>& readNextPoint(liblas::Point& thePoint){<span class="keywordtype">bool</span> returnValue=m_reader->ReadNextPoint();thePoint=m_reader->GetPoint();<span class="keywordflow">return</span>(returnValue);};</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> liblas::Point <span class="keyword">const</span>& readPointAt(std::size_t n){m_reader->ReadPointAt(n);<span class="keywordflow">return</span> m_reader->GetPoint();};</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// void addBoundsFilter(double ulx, double uly, double lrx, double lry);</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> addReturnsFilter(std::vector<unsigned short> <span class="keyword">const</span>& returns);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> addClassFilter(std::vector<unsigned short> <span class="keyword">const</span>& classes);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> setFilters(<span class="keyword">const</span> std::vector<liblas::FilterPtr>& filters){m_filters=filters;setFilters();};</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> setFilters(){m_reader->SetFilters(m_filters);};</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> setCodec(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> std::string m_filename;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> std::ifstream *m_ifstream;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> liblas::Reader* m_reader;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> std::vector<liblas::FilterPtr> m_filters;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> };</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#endif // _IMGREADERLAS_H_</span></div>
+<div class="ttc" id="classFileReaderLas_html"><div class="ttname"><a href="classFileReaderLas.html">FileReaderLas</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderLas_8h_source.html#l00039">FileReaderLas.h:39</a></div></div>
+<div class="ttc" id="classLastReturnFilter_html"><div class="ttname"><a href="classLastReturnFilter.html">LastReturnFilter</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderLas_8h_source.html#l00028">FileReaderLas.h:28</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Filter2d_8cc_source.html b/doc/html/Filter2d_8cc_source.html
new file mode 100644
index 0000000..e9a1e91
--- /dev/null
+++ b/doc/html/Filter2d_8cc_source.html
@@ -0,0 +1,1379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Filter2d.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Filter2d.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Filter2d.cc: class for filtering images</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "Filter2d.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "StatFactory.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">// #include "imageclasses/ImgUtils.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> filter2d::Filter2d::Filter2d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> filter2d::Filter2d::Filter2d(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a> &taps)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> : m_taps(taps)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> filter2d::Filter2d::pushNoDataValue(<span class="keywordtype">double</span> noDataValue)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span>(find(m_noDataValues.begin(),m_noDataValues.end(),noDataValue)==m_noDataValues.end())</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> m_noDataValues.push_back(noDataValue);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span>(m_noDataValues.size());</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> filter2d::Filter2d::setTaps(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a> &taps)</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> m_taps=taps;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> filter2d::Filter2d::smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dim)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> smoothNoData(input, output,dim,dim);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> filter2d::Filter2d::smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dim)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> smooth(input, output,dim,dim);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> filter2d::Filter2d::smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> m_taps.resize(dimY);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<dimY;++j){</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> m_taps[j].resize(dimX);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dimX;++i)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> m_taps[j][i]=1.0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> filter(input,output,<span class="keyword">false</span>,<span class="keyword">true</span>,<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> filter2d::Filter2d::smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> m_taps.resize(dimY);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<dimY;++j){</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> m_taps[j].resize(dimX);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dimX;++i)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> m_taps[j][i]=1.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> filter(input,output,<span class="keyword">false</span>,<span class="keyword">true</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> filter2d::Filter2d::filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">bool</span> absolute, <span class="keywordtype">bool</span> normalize, <span class="keywordtype">bool</span> noData)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> dimX=m_taps[0].size();<span class="comment">//horizontal!!!</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> dimY=m_taps.size();<span class="comment">//vertical!!!</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// byte* tmpbuf=new byte[input.rowSize()];</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inBuffer(dimY,input.nrOfCol());</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> std::vector<double> outBuffer(input.nrOfCol());</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> input.readData(inBuffer[indexJ],GDT_Float64,abs(j),iband);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> ++indexJ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(y+dimY/2<input.nrOfRow()){</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nrOfRow();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> assert(index>=0);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> outBuffer[x]=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(noData){<span class="comment">//only filter noData values</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(inBuffer[(dimY-1)/2][x]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> outBuffer[x]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> assert(!noData||masked);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> indexI=x+i;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(x<(dimX-1)/2)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> indexI=x+abs(i);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x>=input.nrOfCol()-(dimX-1)/2)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> indexI=x-abs(i);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(y<(dimY-1)/2)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> indexJ=(dimY-1)/2+abs(j);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y>=input.nrOfRow()-(dimY-1)/2)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> indexJ=(dimY-1)/2-abs(j);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">//do not take masked values into account</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> outBuffer[x]+=(m_taps[(dimY-1)/2+j][(dimX-1)/2+i]*inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> norm+=m_taps[(dimY-1)/2+j][(dimX-1)/2+i];</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(absolute)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> outBuffer[x]=(normalize&&norm)? abs(outBuffer[x])/norm : abs(outBuffer[x]);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(normalize&&norm!=0)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> outBuffer[x]=outBuffer[x]/norm;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">//write outBuffer to file</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> output.writeData(outBuffer,GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> progress=(1.0+y);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> progress+=(output.nrOfRow()*iband);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> progress/=output.nrOfBand()*output.nrOfRow();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">void</span> filter2d::Filter2d::majorVoting(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename,<span class="keywordtype">int</span> dim,<span class="keyword">const</span> std::vector<int> &prior)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">bool</span> usePriors=<span class="keyword">true</span>; </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(prior.empty()){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> std::cout << <span class="stringliteral">"no prior information"</span> << std::endl;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> usePriors=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> std::cout << <span class="stringliteral">"using priors "</span>; </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<prior.size();++iclass)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> std::cout << <span class="stringliteral">" "</span> << static_cast<short>(prior[iclass]);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> std::cout << std::endl; </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> } </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> output;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> input.open(inputFilename);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> output.open(outputFilename,input);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">int</span> dimX=0;<span class="comment">//horizontal!!!</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> dimY=0;<span class="comment">//vertical!!!</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(dim){</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> dimX=dim;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> dimY=dim;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> dimX=m_taps[0].size();</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> dimY=m_taps.size();</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> assert(dimX);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> assert(dimY);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inBuffer(dimY,input.nrOfCol());</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> std::vector<double> outBuffer(input.nrOfCol());</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> input.readData(inBuffer[indexJ],GDT_Float64,abs(j));</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> ++indexJ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(y+dimY/2<input.nrOfRow()){</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> std::cerr << errorstring << <span class="stringliteral">"in line"</span> << y << std::endl;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nrOfRow();</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> assert(index>=0);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> outBuffer[x]=0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> std::map<int,int> occurrence;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordtype">int</span> centre=dimX*(dimY-1)/2+(dimX-1)/2;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> indexI=x+i;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> indexI=-indexI;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=input.nrOfCol())</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> indexI=input.nrOfCol()-i;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> indexJ=-j;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=input.nrOfRow())</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// if(x<dimX/2)</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// indexI=x+abs(i);</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// else if(x>=input.nrOfCol()-dimX/2)</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">// indexI=x-abs(i);</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">// if(y<dimY/2)</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">// indexJ=dimY/2+abs(j);</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// else if(y>=input.nrOfRow()-dimY/2)</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// indexJ=dimY/2-abs(j);</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(usePriors){</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> occurrence[inBuffer[indexJ][indexI]]+=prior[inBuffer[indexJ][indexI]-1];</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> } </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> ++occurrence[inBuffer[indexJ][indexI]];</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::map<int,int>::const_iterator maxit=occurrence.begin();</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(std::map<int,int>::const_iterator mit=occurrence.begin();mit!=occurrence.end();++mit){</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(mit->second>maxit->second)</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> maxit=mit;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(occurrence[inBuffer[(dimY-1)/2][x]]<maxit->second)<span class="comment">//</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> outBuffer[x]=maxit->first;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">else</span><span class="comment">//favorize original value in case of ties</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> outBuffer[x]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">//write outBuffer to file</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> output.writeData(outBuffer,GDT_Float64,y);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> std::cerr << errorstring << <span class="stringliteral">"in line"</span> << y << std::endl;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> input.close();</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> output.close();</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordtype">void</span> filter2d::Filter2d::median(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename,<span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> disc)</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> output;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> input.open(inputFilename);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> output.open(outputFilename,input);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> doit(input,output,<span class="stringliteral">"median"</span>,dim,disc);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordtype">void</span> filter2d::Filter2d::var(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename,<span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> disc)</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> {</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> output;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> input.open(inputFilename);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> output.open(outputFilename,input);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> doit(input,output,<span class="stringliteral">"var"</span>,dim,disc);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">void</span> filter2d::Filter2d::doit(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">short</span> down, <span class="k [...]
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> doit(input,output,method,dim,dim,down,disc);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">void</span> filter2d::Filter2d::doit(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span class="ke [...]
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> {</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> assert(dimX);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> assert(dimY);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inBuffer(dimY,input.nrOfCol());</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> std::vector<double> outBuffer((input.nrOfCol()+down-1)/down);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> input.readData(inBuffer[indexJ],GDT_Float64,abs(j),iband);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> ++indexJ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(y+dimY/2<input.nrOfRow()){</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nrOfRow();</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> assert(index>=0);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>((y+1+down/2)%down)</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">if</span>((x+1+down/2)%down)</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> outBuffer[x/down]=0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> std::vector<double> windowBuffer;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> std::map<long int,int> occurrence;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">int</span> centre=dimX*(dimY-1)/2+(dimX-1)/2;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">double</span> d2=i*i+j*j;<span class="comment">//square distance</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span>(disc&&(d2>(dimX/2)*(dimY/2)))</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> indexI=x+i;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> indexI=-indexI;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=input.nrOfCol())</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> indexI=input.nrOfCol()-i;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> indexJ=-j;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=input.nrOfRow())</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> std::vector<short>::const_iterator vit=m_class.begin();</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">if</span>(!m_class.size())</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> ++occurrence[inBuffer[indexJ][indexI]];</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">while</span>(vit!=m_class.end()){</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==*(vit++))</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> ++occurrence[inBuffer[indexJ][indexI]];</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> windowBuffer.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> }</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">case</span>(filter2d::median):</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> outBuffer[x/down]=stat.median(windowBuffer);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">case</span>(filter2d::var):{</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> outBuffer[x/down]=stat.var(windowBuffer);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">case</span>(filter2d::stdev):{</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> outBuffer[x/down]=sqrt(stat.var(windowBuffer));</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">case</span>(filter2d::mean):{</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> outBuffer[x/down]=stat.mean(windowBuffer);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> }</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">case</span>(filter2d::min):{</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> outBuffer[x/down]=stat.mymin(windowBuffer);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">case</span>(filter2d::ismin):{</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> outBuffer[x/down]=(stat.mymin(windowBuffer)==windowBuffer[centre])? 1:0;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">case</span>(filter2d::minmax):{<span class="comment">//is the same as homog?</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> stat.minmax(windowBuffer,windowBuffer.begin(),windowBuffer.end(),min,max);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">if</span>(min!=max)</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> outBuffer[x/down]=0;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> outBuffer[x/down]=windowBuffer[centre];<span class="comment">//centre pixels</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">case</span>(filter2d::max):{</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> outBuffer[x/down]=stat.mymax(windowBuffer);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">case</span>(filter2d::ismax):{</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> outBuffer[x/down]=(stat.mymax(windowBuffer)==windowBuffer[centre])? 1:0;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">case</span>(filter2d::order):{</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordtype">double</span> lbound=0;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordtype">double</span> ubound=dimX*dimY;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordtype">double</span> theMin=stat.mymin(windowBuffer);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">double</span> theMax=stat.mymax(windowBuffer);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">double</span> scale=(ubound-lbound)/(theMax-theMin);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> outBuffer[x/down]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(scale*(windowBuffer[centre]-theMin)+lbound);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">case</span>(filter2d::sum):{</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> outBuffer[x/down]=stat.sum(windowBuffer);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">case</span>(filter2d::percentile):{</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> outBuffer[x/down]=stat.percentile(windowBuffer,windowBuffer.begin(),windowBuffer.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> }</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">case</span>(filter2d::homog):</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">if</span>(occurrence.size()==1)<span class="comment">//all values in window are the same</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">case</span>(filter2d::heterog):{</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span>(occurrence.size()==windowBuffer.size())</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// if(occurrence.size()==1)//all values in window are the same</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="comment">// outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="comment">// for(std::vector<double>::const_iterator wit=windowBuffer.begin();wit!=windowBuffer.end();++wit){</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">// if(wit==windowBuffer.begin()+windowBuffer.size()/2)</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="comment">// else if(*wit!=inBuffer[(dimY-1)/2][x]){</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment">// outBuffer[x/down]=1;</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">// else if(*wit==inBuffer[(dimY-1)/2][x]){//todo:wit mag niet central pixel zijn</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">case</span>(filter2d::density):{</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> std::vector<short>::const_iterator vit=m_class.begin();</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">while</span>(vit!=m_class.end())</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> outBuffer[x/down]+=100.0*occurrence[*(vit++)]/windowBuffer.size();</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">case</span>(filter2d::countid):{</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">if</span>(windowBuffer.size())</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> outBuffer[x/down]=occurrence.size();</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">case</span>(filter2d::mode):{</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(occurrence.size()){</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> std::map<long int,int>::const_iterator maxit=occurrence.begin();</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">for</span>(std::map<long int,int>::const_iterator mit=occurrence.begin();mit!=occurrence.end();++mit){</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">if</span>(mit->second>maxit->second)</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> maxit=mit;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> }</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(occurrence[inBuffer[(dimY-1)/2][x]]<maxit->second)<span class="comment">//</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> outBuffer[x/down]=maxit->first;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">else</span><span class="comment">//favorize original value in case of ties</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">case</span>(filter2d::threshold):{</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> assert(m_class.size()==m_threshold.size());</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];<span class="comment">//initialize with original value (in case thresholds not met)</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">if</span>(100.0*(occurrence[m_class[iclass]])/windowBuffer.size()>m_threshold[iclass])</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> outBuffer[x/down]=m_class[iclass];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> }</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> }</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">case</span>(filter2d::scramble):{<span class="comment">//could be done more efficiently window by window with random shuffling entire buffer and assigning entire buffer at once to output image...</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> randomIndex=std::rand()%windowBuffer.size();</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span>(randomIndex>=windowBuffer.size())</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> outBuffer[x/down]=windowBuffer.back();</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(randomIndex<0)</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> outBuffer[x/down]=windowBuffer[0];</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> outBuffer[x/down]=windowBuffer[randomIndex];</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">case</span>(filter2d::mixed):{</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keyword">enum</span> Type { BF=11, CF=12, MF=13, NF=20, W=30 };</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordtype">double</span> nBF=occurrence[BF];</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordtype">double</span> nCF=occurrence[CF];</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordtype">double</span> nMF=occurrence[MF];</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">double</span> nNF=occurrence[NF];</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">double</span> nW=occurrence[W];</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">if</span>((nBF+nCF+nMF)&&(nBF+nCF+nMF>=nNF+nW)){<span class="comment">//forest</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(nBF/(nBF+nCF)>=0.75)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> outBuffer[x/down]=BF;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nCF/(nBF+nCF)>=0.75)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> outBuffer[x/down]=CF;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> outBuffer[x/down]=MF;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">else</span>{<span class="comment">//non-forest</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">if</span>(nW&&(nW>=nNF))</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> outBuffer[x/down]=W;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> outBuffer[x/down]=NF;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> }</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> outBuffer[x/down]=inBuffer[indexJ][indexI];</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> }</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">default</span>:{</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> ess << <span class="stringliteral">"Error: filter method "</span> << method << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> }</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> progress=(1.0+y/down);</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> progress+=(output.nrOfRow()*iband);</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> progress/=output.nrOfBand()*output.nrOfRow();</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="comment">//write outBuffer to file</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> output.writeData(outBuffer,GDT_Float64,y/down,iband);</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> pfnProgress(1.0,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> }</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">void</span> filter2d::Filter2d::mrf(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span class="keywordtype">double</span> beta, <span class="keywordtype">bool [...]
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> assert(m_class.size()>1);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <a class="code" href="classVector2d.html">Vector2d<double></a> fullBeta(m_class.size(),m_class.size());</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass1=0;iclass1<m_class.size();++iclass1)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass2=0;iclass2<m_class.size();++iclass2)</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> fullBeta[iclass1][iclass2]=beta;</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> mrf(input,output,dimX,dimY,fullBeta,eightConnectivity,down,verbose);</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> }</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="comment">//beta[classTo][classFrom]</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordtype">void</span> filter2d::Filter2d::mrf(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <a class="code" href="classVector2d.html">Vector2d<double></a> beta, < [...]
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> {</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> assert(dimX);</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> assert(dimY);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <a class="code" href="classVector2d.html">Vector2d<short></a> inBuffer(dimY,input.nrOfCol());</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <a class="code" href="classVector2d.html">Vector2d<double></a> outBuffer(m_class.size(),(input.nrOfCol()+down-1)/down);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> assert(input.nrOfBand()==1);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> assert(output.nrOfBand()==m_class.size());</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> assert(m_class.size()>1);</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> assert(beta.size()==m_class.size());</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> input.readData(inBuffer[indexJ],GDT_Int16,abs(j));</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> }</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> ++indexJ;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">if</span>(y+dimY/2<input.nrOfRow()){</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> input.readData(inBuffer[inBuffer.size()-1],GDT_Int16,y+dimY/2);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> }</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nrOfRow();</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> assert(index>=0);</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> }</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span>((y+1+down/2)%down)</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">if</span>((x+1+down/2)%down)</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> std::vector<short> potential(m_class.size());</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> potential[iclass]=0;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> outBuffer[iclass][x/down]=0;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> }</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> std::vector<double> windowBuffer;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">int</span> centre=dimX*(dimY-1)/2+(dimX-1)/2;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span>(i!=0&&j!=0&&!eightConnectivity)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">if</span>(i==0&&j==0)</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> indexI=x+i;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> indexI=-indexI;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=input.nrOfCol())</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> indexI=input.nrOfCol()-i;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> indexJ=-j;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=input.nrOfRow())</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> }</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> }</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_class[iclass])</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> potential[iclass]+=1;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> }</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> }</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> }</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass1=0;iclass1<m_class.size();++iclass1){</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> assert(beta[iclass1].size()==m_class.size());</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordtype">double</span> pot=0;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass2=0;iclass2<m_class.size();++iclass2)</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">if</span>(iclass2!=iclass1)</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> pot+=potential[iclass2]*beta[iclass1][iclass2];</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">double</span> prior=exp(-pot);</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> outBuffer[iclass1][x/down]=prior;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> norm+=prior;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> }</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">if</span>(norm){</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass1=0;iclass1<m_class.size();++iclass1)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> outBuffer[iclass1][x/down]/=norm;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> }</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> progress=(1.0+y/down)/output.nrOfRow();</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="comment">//write outBuffer to file</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> assert(outBuffer.size()==m_class.size());</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> assert(y<output.nrOfRow());</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> assert(outBuffer[iclass].size()==output.nrOfCol());</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> output.writeData(outBuffer[iclass],GDT_Float64,y/down,iclass);</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> std::cerr << errorstring << <span class="stringliteral">"in class "</span> << iclass << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> }</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> }</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> }</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordtype">void</span> filter2d::Filter2d::shift(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">double</span> offsetX, <span class="keywordtype">double</span> offsetY, <span class="keywordtype">double</span> randomSigma, RESAMPLE [...]
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> {</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> assert(input.nrOfCol()==output.nrOfCol());</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> assert(input.nrOfRow()==output.nrOfRow());</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> assert(input.nrOfBand()==output.nrOfBand());</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="comment">//process band per band in memory</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inBuffer(input.nrOfRow(),output.nrOfCol());</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <a class="code" href="classVector2d.html">Vector2d<double></a> outBuffer(input.nrOfRow(),output.nrOfCol());</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> input.readDataBlock(inBuffer,GDT_Float64,0,inBuffer.nCols()-1,0,inBuffer.nRows()-1,iband);</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> shift(inBuffer,outBuffer,offsetX,offsetY,randomSigma,resample,verbose);</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> output.writeDataBlock(outBuffer,GDT_Float64,0,outBuffer.nCols()-1,0,outBuffer.nRows()-1,iband);</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> }</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> }</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="comment">//todo: re-implement without dependency of CImg and reg libraries</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment">// void filter2d::Filter2d::dwt_texture(const std::string& inputFilename, const std::string& outputFilename,int dim, int scale, int down, int iband, bool verbose)</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="comment">// ImgReaderGdal input;</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment">// ImgWriterGdal output;</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="comment">// std::cout << "opening file " << inputFilename << std::endl;</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment">// input.open(inputFilename);</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="comment">// double magicX=1,magicY=1;</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="comment">// output.open(outputFilename,(input.nrOfCol()+down-1)/down,(input.nrOfRow()+down-1)/down,scale*3,GDT_Float32,input.getImageType());</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment">// if(input.isGeoRef()){</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment">// output.setProjection(input.getProjection());</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment">// output.copyGeoTransform(input);</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment">// std::cout << "Dimension texture (row x col x band) = " << (input.nrOfCol()+down-1)/down << " x " << (input.nrOfRow()+down-1)/down << " x " << scale*3 << std::endl;</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="comment">// assert(dim%2);</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment">// int dimX=dim;</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="comment">// int dimY=dim;</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="comment">// Vector2d<float> inBuffer(dimY,input.nrOfCol());</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="comment">// Vector2d<float> outBuffer(scale*3,(input.nrOfCol()+down-1)/down);</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="comment">// //initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="comment">// int indexI=0;</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="comment">// int indexJ=0;</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="comment">// for(int j=-dimY/2;j<(dimY+1)/2;++j){</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="comment">// cout << "reading input line " << abs(j) << std::endl;</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="comment">// input.readData(inBuffer[indexJ],GDT_Float32,abs(j),iband);</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="comment">// ++indexJ;</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="comment">// catch(std::string errorstring){</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment">// std::cerr << errorstring << "in band " << iband << ", line " << indexJ << std::endl;</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment">// for(int y=0;y<input.nrOfRow();y+=down){</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="comment">// std::cout << "calculating line " << y/down << std::endl;</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="comment">// if(y){//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment">// //erase first line from inBuffer</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="comment">// inBuffer.erase(inBuffer.begin());</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment">// //read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="comment">// if(y+dimY/2<input.nrOfRow()){</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="comment">// //allocate buffer</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment">// inBuffer.push_back(inBuffer.back());</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">// std::cout << "reading input line " << y+dimY/2 << std::endl;</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment">// input.readData(inBuffer[inBuffer.size()-1],GDT_Float32,y+dimY/2,iband);</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment">// catch(std::string errorstring){</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment">// std::cerr << errorstring << "in band " << iband << ", line " << y << std::endl;</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment">// for(int x=0;x<input.nrOfCol();x+=down){</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment">// Vector2d<double> texture_feature(scale,3);</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment">// CImg<> texture_in(dimX,dimY);</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment">// int r=0;//index for row of texture_in</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment">// for(int j=-dimY/2;j<(dimY+1)/2;++j){</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment">// int c=0;</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="comment">// for(int i=-dimX/2;i<(dimX+1)/2;++i){</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment">// indexI=x+i;</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment">// //check if out of bounds</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment">// if(indexI<0)</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment">// indexI=-indexI;</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment">// else if(indexI>=input.nrOfCol())</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment">// indexI=input.nrOfCol()-i;</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="comment">// if(y+j<0)</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="comment">// indexJ=-j;</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="comment">// else if(y+j>=input.nrOfRow())</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="comment">// indexJ=dimY/2-j;//indexJ=inBuffer.size()-1-j;</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="comment">// indexJ=dimY/2+j;</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="comment">// assert(indexJ<inBuffer.size());</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="comment">// assert(indexI<inBuffer[indexJ].size());</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment">// texture_in(r,c)=inBuffer[indexJ][indexI];</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="comment">// c++;</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="comment">// ++r;</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment">// texture_in.dwt_texture(texture_feature,scale);</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment">// for(int v=0;v<scale*3;++v)</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment">// outBuffer[v][x/down]=texture_feature[v/3][v%3];</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment">// //write outBuffer to file</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// if(verbose)</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment">// std::cout << "writing line " << y/down << std::endl;</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">// for(int v=0;v<scale*3;++v)</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// output.writeData(outBuffer[v],GDT_Float32,y/down,v);</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment">// catch(std::string errorstring){</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment">// std::cerr << errorstring << "in band " << iband << ", line " << y << std::endl;</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment">// progress=(1.0+y)/output.nrOfRow();</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">// input.close();</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// output.close();</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordtype">void</span> filter2d::Filter2d::morphology(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span cla [...]
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> {</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> assert(dimX);</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> assert(dimY);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inBuffer(dimY,input.nrOfCol());</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> std::vector<double> outBuffer(input.nrOfCol());</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> input.readData(inBuffer[indexJ],GDT_Float64,abs(j),iband);</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> ++indexJ;</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> }</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> std::cerr << errorstring << <span class="stringliteral">"in line "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> }</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="keywordflow">if</span>(y+dimY/2<input.nrOfRow()){</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">if</span>(dimY>1)</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nrOfRow();</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> assert(index>=0);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordtype">double</span> currentValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> outBuffer[x]=currentValue;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> std::vector<double> statBuffer;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordtype">bool</span> currentMasked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordtype">int</span> centre=dimX*(dimY-1)/2+(dimX-1)/2;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="keywordflow">if</span>(currentValue==m_noDataValues[imask]){</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> currentMasked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> }</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">if</span>(currentMasked){</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> outBuffer[x]=currentValue;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordtype">double</span> d2=i*i+j*j;<span class="comment">//square distance</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span>(disc&&(d2>(dimX/2)*(dimY/2)))</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">if</span>(angle.size()){</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordtype">double</span> theta;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">//use polar coordinates in radians</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="keywordflow">if</span>(i>0){</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">if</span>(j<0)</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> theta=atan(static_cast<double>(-j)/(static_cast<double>(i)));</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> theta=-atan(static_cast<double>(j)/(static_cast<double>(i)));</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i<0){</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="keywordflow">if</span>(j<0)</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> theta=PI-atan(static_cast<double>(-j)/(static_cast<double>(-i)));</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> theta=PI+atan(static_cast<double>(j)/(static_cast<double>(-i)));</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> }</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(j<0)</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> theta=PI/2.0;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(j>0)</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> theta=3.0*PI/2.0;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">//convert to North (0), East (90), South (180), West (270) in degrees</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> theta=360-(theta/PI*180)+90;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordflow">if</span>(theta<0)</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> theta+=360;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">while</span>(theta>360)</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> theta-=360;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordtype">bool</span> alligned=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iangle=0;iangle<angle.size();++iangle){</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">if</span>(sqrt((theta-angle[iangle])*(theta-angle[iangle]))<10){</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> alligned=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> }</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="keywordflow">if</span>(!alligned)</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> }</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> indexI=x+i;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> indexI=-indexI;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=input.nrOfCol())</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> indexI=input.nrOfCol()-i;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> indexJ=-j;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=input.nrOfRow())</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment">//todo: introduce novalue as this: ?</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">// if(inBuffer[indexJ][indexI]==(m_noDataValues.size())? m_noDataValues[0] : 0)</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordtype">short</span> binValue=0;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_class[iclass]){</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> binValue=1;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> }</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> }</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> statBuffer.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> }</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> }</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">if</span>(statBuffer.size()){</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keywordflow">case</span>(filter2d::dilate):</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> outBuffer[x]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">case</span>(filter2d::erode):</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> outBuffer[x]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> std::ostringstream ess;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> ess << <span class="stringliteral">"Error: morphology method "</span> << method << <span class="stringliteral">" not supported, choose "</span> << filter2d::dilate << <span class="stringliteral">" (dilate) or "</span> << filter2d::erode << <span class="stringliteral">" (erode)"</span> << std::endl;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> }</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordflow">if</span>(outBuffer[x]&&m_class.size())</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> outBuffer[x]=m_class[0];</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> }</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">//write outBuffer to file</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> output.writeData(outBuffer,GDT_Float64,y,iband);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> }</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> std::cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << std::endl;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> }</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> progress=(1.0+y);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> progress+=(output.nrOfRow()*iband);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> progress/=output.nrOfBand()*output.nrOfRow();</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> }</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="keywordtype">void</span> filter2d::Filter2d::shadowDsm(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">double</span> sza, <span class="keywordtype">double</span> saa, <span class="keywordtype">double</span> pixelSize, <span class="ke [...]
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <a class="code" href="classVector2d.html">Vector2d<float></a> inputBuffer;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <a class="code" href="classVector2d.html">Vector2d<float></a> outputBuffer;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> input.readDataBlock(inputBuffer, GDT_Float32, 0, input.nrOfCol()-1, 0, input.nrOfRow()-1, 0);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> shadowDsm(inputBuffer, outputBuffer, sza, saa, pixelSize, shadowFlag);</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> output.writeDataBlock(outputBuffer,GDT_Float32,0,output.nrOfCol()-1,0,output.nrOfRow()-1,0);</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordtype">void</span> filter2d::Filter2d::dwtForward(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <a class="code" href="classVector2d.html">Vector2d<float></a> theBuffer;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> input.readDataBlock(theBuffer, GDT_Float32, 0, input.nrOfCol()-1, 0, input.nrOfRow()-1, iband);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> std::cout << <span class="stringliteral">"filtering band "</span> << iband << std::endl << std::flush;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> dwtForward(theBuffer, wavelet_type, family);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> output.writeDataBlock(theBuffer,GDT_Float32,0,output.nrOfCol()-1,0,output.nrOfRow()-1,iband);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> }</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordtype">void</span> filter2d::Filter2d::dwtInverse(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <a class="code" href="classVector2d.html">Vector2d<float></a> theBuffer;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> input.readDataBlock(theBuffer, GDT_Float32, 0, input.nrOfCol()-1, 0, input.nrOfRow()-1, iband);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> std::cout << <span class="stringliteral">"filtering band "</span> << iband << std::endl << std::flush;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> dwtInverse(theBuffer, wavelet_type, family);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> output.writeDataBlock(theBuffer,GDT_Float32,0,output.nrOfCol()-1,0,output.nrOfRow()-1,iband);</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> }</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordtype">void</span> filter2d::Filter2d::dwtCut(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut, <sp [...]
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <a class="code" href="classVector2d.html">Vector2d<float></a> theBuffer;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> input.readDataBlock(theBuffer, GDT_Float32, 0, input.nrOfCol()-1, 0, input.nrOfRow()-1, iband);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> std::cout << <span class="stringliteral">"filtering band "</span> << iband << std::endl << std::flush;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> dwtCut(theBuffer, wavelet_type, family, cut);</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> output.writeDataBlock(theBuffer,GDT_Float32,0,output.nrOfCol()-1,0,output.nrOfRow()-1,iband);</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> }</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordtype">void</span> filter2d::Filter2d::linearFeature(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">float</span> angle, <span class="keywordtype">float</span> angleStep, <span class="keywordtype">float</span> maxDistance, <spa [...]
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <a class="code" href="classVector2d.html">Vector2d<float></a> inputBuffer;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> std::vector< Vector2d<float> > outputBuffer;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> input.readDataBlock(inputBuffer, GDT_Float32, 0, input.nrOfCol()-1, 0, input.nrOfRow()-1, band);</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">if</span>(maxDistance<=0)</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> maxDistance=sqrt(static_cast<float>(input.nrOfCol()*input.nrOfRow()));</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> linearFeature(inputBuffer,outputBuffer,angle,angleStep,maxDistance,eps, l1, a1, l2, a2,verbose);</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<outputBuffer.size();++iband)</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> output.writeDataBlock(outputBuffer[iband],GDT_Float32,0,output.nrOfCol()-1,0,output.nrOfRow()-1,iband);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordtype">void</span> filter2d::Filter2d::linearFeature(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<float></a>& input, std::vector< <a class="code" href="classVector2d.html">Vector2d<float></a> >& output, <span class="keywordtype">float</span> angle, <span class="keywordtype">float</span> angleStep, <span class="keywordtype">flo [...]
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> output.clear();</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordtype">int</span> nband=0;<span class="comment">//linear feature</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">if</span>(l1)</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> ++nband;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="keywordflow">if</span>(a1)</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> ++nband;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span>(l2)</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> ++nband;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="keywordflow">if</span>(a2)</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> ++nband;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> output.resize(nband);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<output.size();++iband)</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> output[iband].resize(input.nRows(),input.nCols());</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">if</span>(maxDistance<=0)</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> maxDistance=sqrt(static_cast<float>(input.nRows()*input.nCols()));</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nRows();++y){</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nCols();++x){</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordtype">float</span> currentValue=input[y][x];</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">//find values equal to current value with some error margin</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="comment">//todo: add distance for two opposite directions</span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordtype">float</span> lineDistance1=0;<span class="comment">//longest line of object</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordtype">float</span> lineDistance2=maxDistance;<span class="comment">//shortest line of object</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordtype">float</span> lineAngle1=0;<span class="comment">//angle to longest line (North=0)</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordtype">float</span> lineAngle2=0;<span class="comment">//angle to shortest line (North=0)</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="keywordtype">float</span> northAngle=0;<span class="comment">//rotating angle</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordflow">for</span>(northAngle=0;northAngle<180;northAngle+=angleStep){</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="keywordflow">if</span>(angle<=360&&angle>=0&&angle!=northAngle)</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> std::cout << <span class="stringliteral">"northAngle: "</span> << northAngle << std::endl;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordtype">float</span> currentDistance=0;</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordtype">float</span> theDir=0;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> side=0;side<=1;side+=1){</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> theDir=PI/2.0-DEG2RAD(northAngle)+side*PI;<span class="comment">//in radians</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> std::cout << <span class="stringliteral">"theDir in deg: "</span> << RAD2DEG(theDir) << std::endl;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordflow">if</span>(theDir<0)</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> theDir+=2*PI;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> std::cout << <span class="stringliteral">"theDir in deg: "</span> << RAD2DEG(theDir) << std::endl;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="keywordtype">float</span> nextValue=currentValue;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">for</span>(<span class="keywordtype">float</span> currentRay=1;currentRay<maxDistance;++currentRay){</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> indexI=x+currentRay*cos(theDir);</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> indexJ=y-currentRay*sin(theDir);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordflow">if</span>(indexJ<0||indexJ>=input.size())</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordflow">if</span>(indexI<0||indexI>=input[indexJ].size())</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> nextValue=input[indexJ][indexI];</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> std::cout << <span class="stringliteral">"x: "</span> << x << std::endl;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> std::cout << <span class="stringliteral">"y: "</span> << y << std::endl;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> std::cout << <span class="stringliteral">"currentValue: "</span> << currentValue << std::endl;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> std::cout << <span class="stringliteral">"theDir in degrees: "</span> << RAD2DEG(theDir) << std::endl;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> std::cout << <span class="stringliteral">"cos(theDir): "</span> << cos(theDir) << std::endl;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> std::cout << <span class="stringliteral">"sin(theDir): "</span> << sin(theDir) << std::endl;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> std::cout << <span class="stringliteral">"currentRay: "</span> << currentRay << std::endl;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> std::cout << <span class="stringliteral">"currentDistance: "</span> << currentDistance << std::endl;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> std::cout << <span class="stringliteral">"indexI: "</span> << indexI << std::endl;</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> std::cout << <span class="stringliteral">"indexJ: "</span> << indexJ << std::endl;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> std::cout << <span class="stringliteral">"nextValue: "</span> << nextValue << std::endl;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="keywordflow">if</span>(fabs(currentValue-nextValue)<=eps){</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> ++currentDistance;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> std::cout << <span class="stringliteral">"currentDistance: "</span> << currentDistance << <span class="stringliteral">", continue"</span> << std::endl;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> std::cout << <span class="stringliteral">"currentDistance: "</span> << currentDistance << <span class="stringliteral">", break"</span> << std::endl;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> }</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> }</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="keywordflow">if</span>(lineDistance1<currentDistance){</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> lineDistance1=currentDistance;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> lineAngle1=northAngle;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> }</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="keywordflow">if</span>(lineDistance2>currentDistance){</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> lineDistance2=currentDistance;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> lineAngle2=northAngle;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> }</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> std::cout << <span class="stringliteral">"lineDistance1: "</span> << lineDistance1 << std::endl;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> std::cout << <span class="stringliteral">"lineAngle1: "</span> << lineAngle1 << std::endl;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> std::cout << <span class="stringliteral">"lineDistance2: "</span> << lineDistance2 << std::endl;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> std::cout << <span class="stringliteral">"lineAngle2: "</span> << lineAngle2 << std::endl;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> }</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> }</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordtype">int</span> iband=0;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordflow">if</span>(l1)</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> output[iband++][y][x]=lineDistance1;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordflow">if</span>(a1)</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> output[iband++][y][x]=lineAngle1;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="keywordflow">if</span>(l2)</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> output[iband++][y][x]=lineDistance2;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="keywordflow">if</span>(a2)</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> output[iband++][y][x]=lineAngle2;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> assert(iband==nband);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> progress=(1.0+y);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> progress/=input.nRows();</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> }</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Filter2d_8h_source.html b/doc/html/Filter2d_8h_source.html
new file mode 100644
index 0000000..429120d
--- /dev/null
+++ b/doc/html/Filter2d_8h_source.html
@@ -0,0 +1,1432 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Filter2d.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Filter2d.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Filter2d.h: class for filtering images</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _MYFILTER2D_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _MYFILTER2D_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#ifndef PI</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span><span class="preprocessor">#define PI 3.1415926535897932384626433832795</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifndef DEG2RAD</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#define DEG2RAD(DEG) (DEG/180.0*PI)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#ifndef RAD2DEG</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span><span class="preprocessor">#define RAD2DEG(RAD) (RAD/PI*180)</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#ifdef WIN32</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#include <process.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define getpid _getpid</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <gsl/gsl_sort.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <gsl/gsl_wavelet.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <gsl/gsl_wavelet2d.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include <gsl/gsl_rng.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include <gsl/gsl_randist.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#include "Filter.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">namespace </span>filter2d</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">enum</span> FILTER_TYPE { median=100, var=101 , min=102, max=103, sum=104, mean=105, minmax=106, dilate=107, erode=108, close=109, open=110, homog=111, sobelx=112, sobely=113, sobelxy=114, sobelyx=115, smooth=116, density=117, mode=118, mixed=119, threshold=120, ismin=121, ismax=122, heterog=123, order=124, stdev=125, mrf=126, dwt=127, dwti=128, dwt_cut=129, scramble=130, shift=131, line [...]
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">enum</span> RESAMPLE { NEAR = 0, BILINEAR = 1, BICUBIC = 2 };<span class="comment">//bicubic not supported yet...</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classfilter2d_1_1Filter2d.html"> 65</a></span> <span class="keyword">class </span><a class="code" href="classfilter2d_1_1Filter2d.html">Filter2d</a></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="classfilter2d_1_1Filter2d.html">Filter2d</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <a class="code" href="classfilter2d_1_1Filter2d.html">Filter2d</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a> &taps);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">virtual</span> ~<a class="code" href="classfilter2d_1_1Filter2d.html">Filter2d</a>(){};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">static</span> FILTER_TYPE getFilterType(<span class="keyword">const</span> std::string filterType){</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> std::map<std::string, FILTER_TYPE> m_filterMap;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> initMap(m_filterMap);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> m_filterMap[filterType];</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> };</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">static</span> <span class="keyword">const</span> RESAMPLE getResampleType(<span class="keyword">const</span> std::string resampleType){</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(resampleType==<span class="stringliteral">"near"</span>) <span class="keywordflow">return</span>(NEAR);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(resampleType==<span class="stringliteral">"bilinear"</span>) <span class="keywordflow">return</span>(BILINEAR);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> std::string errorString=<span class="stringliteral">"resampling type not supported: "</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> errorString+=resampleType;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> errorString+=<span class="stringliteral">" use near or bilinear"</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> };</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> setTaps(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a> &taps);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* void setNoValue(double noValue=0){m_noValue=noValue;}; */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">void</span> pushClass(<span class="keywordtype">short</span> theClass=1){m_class.push_back(theClass);};</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> pushNoDataValue(<span class="keywordtype">double</span> noDataValue=0);<span class="comment">//{m_mask.push_back(theMask);};</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> pushThreshold(<span class="keywordtype">double</span> theThreshold){m_threshold.push_back(theThreshold);};</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> setThresholds(<span class="keyword">const</span> std::vector<double>& theThresholds){m_threshold=theThresholds;};</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">void</span> setClasses(<span class="keyword">const</span> std::vector<short>& theClasses){m_class=theClasses;};</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">bool</span> absolute=<span class="keyword">false</span>, <span class="keywordtype">bool</span> normalize=<span class="keyword">false</span>, <span clas [...]
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output,<span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output,<span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output,<span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output,<span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector,<span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector,<span class="keywordtype">int</span> dimX, < [...]
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">void</span> dwtForward(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> dwtInverse(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> dwtCut(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut, <span class="keywordt [...]
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> dwtForward(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> dwtInverse(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> dwtCut(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> majorVoting(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename,<span class="keywordtype">int</span> dim=0,<span class="keyword">const</span> std::vector<int> &prior=std::vector<int>());</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">/* void homogeneousSpatial(const std::string& inputFilename, const std::string& outputFilename, int dim, bool disc=false, int noValue=0); */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> doit(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">short</span> down=1, <span class="keywordtype">bool [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> doit(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span class="keywordtype">short</ [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> mrf(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span class="keywordtype">double</span> beta, <span class="keywordtype">bool</span> eightConne [...]
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> mrf(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <a class="code" href="classVector2d.html">Vector2d<double></a> beta, <span class="keywor [...]
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> doit(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector, <span class="keyword">const</span> std::strin [...]
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> median(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename, <span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> disc=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> var(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename, <span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> disc=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> morphology(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dimX, <span class="keywordtype">int</span> dimY, <span class="keyword">const [...]
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> morphology(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span class="k [...]
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> dsm2dtm_nwse(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMask, <span [...]
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> dsm2dtm_nesw(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMask, <span [...]
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> dsm2dtm_senw(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMask, <span [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> dsm2dtm_swne(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMask, <span [...]
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> shadowDsm(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span class="keywordtype">double</span> sza, <span class="keywordtype">double</span> saa, <spa [...]
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">void</span> shadowDsm(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">double</span> sza, <span class="keywordtype">double</span> saa, <span class="keywordtype">double</span> pixelSize, <span class="keywordtype">short</ [...]
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">void</span> dwt_texture(<span class="keyword">const</span> std::string& inputFilename, <span class="keyword">const</span> std::string& outputFilename,<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> scale, <span class="keywordtype">int</span> down=1, <span class="keywordtype">int</span> iband=0, <span class="keywordtype">bool</span> verbose=<span [...]
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> shift(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">double</span> offsetX=0, <span class="keywordtype">double</span> offsetY=0, <span class="keywordtype">double</span> randomSigma=0, RESAMPLE resample=BIL [...]
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> shift(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span class="keywordtype">double</span> offsetX=0, <span class="keywordtype">double</span> offsetY [...]
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">void</span> linearFeature(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<float></a>& input, std::vector< <a class="code" href="classVector2d.html">Vector2d<float></a> >& output, <span class="keywordtype">float</span> angle=361, <span class="keywordtype">float</span> angleStep=1, <span class="keywordtype">float</span> ma [...]
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">void</span> linearFeature(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">float</span> angle=361, <span class="keywordtype">float</span> angleStep=1, <span class="keywordtype">float</span> maxDistance=0, <span class="k [...]
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initMap(std::map<std::string, FILTER_TYPE>& m_filterMap){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">//initialize selMap</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> m_filterMap[<span class="stringliteral">"median"</span>]=filter2d::median;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> m_filterMap[<span class="stringliteral">"var"</span>]=filter2d::var;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> m_filterMap[<span class="stringliteral">"min"</span>]=filter2d::min;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> m_filterMap[<span class="stringliteral">"max"</span>]=filter2d::max;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> m_filterMap[<span class="stringliteral">"sum"</span>]=filter2d::sum;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> m_filterMap[<span class="stringliteral">"mean"</span>]=filter2d::mean;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> m_filterMap[<span class="stringliteral">"minmax"</span>]=filter2d::minmax;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> m_filterMap[<span class="stringliteral">"dilate"</span>]=filter2d::dilate;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> m_filterMap[<span class="stringliteral">"erode"</span>]=filter2d::erode;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> m_filterMap[<span class="stringliteral">"close"</span>]=filter2d::close;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> m_filterMap[<span class="stringliteral">"open"</span>]=filter2d::open;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> m_filterMap[<span class="stringliteral">"homog"</span>]=filter2d::homog;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> m_filterMap[<span class="stringliteral">"sobelx"</span>]=filter2d::sobelx;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> m_filterMap[<span class="stringliteral">"sobely"</span>]=filter2d::sobely;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> m_filterMap[<span class="stringliteral">"sobelxy"</span>]=filter2d::sobelxy;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> m_filterMap[<span class="stringliteral">"sobelyx"</span>]=filter2d::sobelyx;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> m_filterMap[<span class="stringliteral">"smooth"</span>]=filter2d::smooth;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> m_filterMap[<span class="stringliteral">"density"</span>]=filter2d::density;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> m_filterMap[<span class="stringliteral">"mode"</span>]=filter2d::mode;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> m_filterMap[<span class="stringliteral">"mixed"</span>]=filter2d::mixed;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> m_filterMap[<span class="stringliteral">"smoothnodata"</span>]=filter2d::smoothnodata;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> m_filterMap[<span class="stringliteral">"threshold"</span>]=filter2d::threshold;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> m_filterMap[<span class="stringliteral">"ismin"</span>]=filter2d::ismin;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> m_filterMap[<span class="stringliteral">"ismax"</span>]=filter2d::ismax;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> m_filterMap[<span class="stringliteral">"heterog"</span>]=filter2d::heterog;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> m_filterMap[<span class="stringliteral">"order"</span>]=filter2d::order;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> m_filterMap[<span class="stringliteral">"stdev"</span>]=filter2d::stdev;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> m_filterMap[<span class="stringliteral">"mrf"</span>]=filter2d::mrf;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> m_filterMap[<span class="stringliteral">"dwt"</span>]=filter2d::dwt;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> m_filterMap[<span class="stringliteral">"dwti"</span>]=filter2d::dwti;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> m_filterMap[<span class="stringliteral">"dwt_cut"</span>]=filter2d::dwt_cut;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> m_filterMap[<span class="stringliteral">"dwt_cut_from"</span>]=filter2d::dwt_cut_from;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> m_filterMap[<span class="stringliteral">"scramble"</span>]=filter2d::scramble;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> m_filterMap[<span class="stringliteral">"shift"</span>]=filter2d::shift;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> m_filterMap[<span class="stringliteral">"linearfeature"</span>]=filter2d::linearfeature;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> m_filterMap[<span class="stringliteral">"countid"</span>]=filter2d::countid;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> m_filterMap[<span class="stringliteral">"savgolay"</span>]=filter2d::savgolay;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> m_filterMap[<span class="stringliteral">"percentile"</span>]=filter2d::percentile;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="classVector2d.html">Vector2d<double></a> m_taps;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">/* double m_noValue; */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> std::vector<short> m_class;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">/* std::vector<short> m_mask; */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::vector<double> m_noDataValues;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> std::vector<double> m_threshold;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> };</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> Filter2d::smooth(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector,<span class="keywordtype">int</span [...]
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> smooth(inputVector,outputVector,dim,dim);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> Filter2d::smooth(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector,<span class="keywordtype">int</span [...]
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> {</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> m_taps.resize(dimY);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<dimY;++j){</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> m_taps[j].resize(dimX);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dimX;++i)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> m_taps[j][i]=1.0/dimX/dimY;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> filter(inputVector,outputVector);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> Filter2d::filter(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> outputVector.resize(inputVector.size());</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">int</span> dimX=m_taps[0].size();<span class="comment">//horizontal!!!</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">int</span> dimY=m_taps.size();<span class="comment">//vertical!!!</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <a class="code" href="classVector2d.html">Vector2d<T1></a> inBuffer(dimY);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> std::vector<T2> outBuffer(inputVector[0].size());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> inBuffer[indexJ]=inputVector[abs(j)];</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> ++indexJ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<inputVector.size();++y){</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(y+dimY/2<inputVector.size()){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> inBuffer.push_back(inputVector[y+dimY/2]);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">int</span> over=y+dimY/2-inputVector.nRows();</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> assert(index>=0);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<inputVector.nCols();++x){</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> outBuffer[x]=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> indexI=x+i;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(x<(dimX-1)/2)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> indexI=x+abs(i);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x>=inputVector.nCols()-(dimX-1)/2)</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> indexI=x-abs(i);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span>(y<(dimY-1)/2)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> indexJ=(dimY-1)/2+abs(j);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y>=inputVector.nRows()-(dimY-1)/2)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> indexJ=(dimY-1)/2-abs(j);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> outBuffer[x]+=(m_taps[(dimY-1)/2+j][(dimX-1)/2+i]*inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">//copy outBuffer to outputVector</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> outputVector[y]=outBuffer;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> Filter2d::doit(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T1></a>& inputVector, <a class="code" href="classVector2d.html">Vector2d<T2></a>& outputVector, <span class="keyword">const</span> st [...]
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> assert(dimX);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> assert(dimY);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> outputVector.resize((inputVector.size()+down-1)/down);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <a class="code" href="classVector2d.html">Vector2d<T1></a> inBuffer(dimY);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> std::vector<T2> outBuffer((inputVector[0].size()+down-1)/down);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> inBuffer[indexJ]=inputVector[abs(j)];</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> ++indexJ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<inputVector.size();++y){</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(y+dimY/2<inputVector.size())</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> inBuffer.push_back(inputVector[y+dimY/2]);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordtype">int</span> over=y+dimY/2-inputVector.size();</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> assert(index>=0);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span>((y+1+down/2)%down)</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<inputVector[0].size();++x){</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>((x+1+down/2)%down)</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> outBuffer[x/down]=0;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> std::vector<double> windowBuffer;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> std::map<int,int> occurrence;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordtype">int</span> centre=dimX*(dimY-1)/2+(dimX-1)/2;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> indexI=x+i;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> indexI=-indexI;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=inputVector[0].size())</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> indexI=inputVector[0].size()-i;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> indexJ=-j;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=inputVector.size())</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> std::vector<short>::const_iterator vit=m_class.begin();</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">//todo: test if this works (only add occurrence if within defined classes)!</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">if</span>(!m_class.size())</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> ++occurrence[inBuffer[indexJ][indexI]];</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">while</span>(vit!=m_class.end()){</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==*(vit++))</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> ++occurrence[inBuffer[indexJ][indexI]];</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> windowBuffer.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">case</span>(filter2d::median):</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> outBuffer[x/down]=stat.median(windowBuffer);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">case</span>(filter2d::var):{</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> outBuffer[x/down]=stat.var(windowBuffer);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">case</span>(filter2d::stdev):{</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> outBuffer[x/down]=sqrt(stat.var(windowBuffer));</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">case</span>(filter2d::mean):{</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> outBuffer[x/down]=stat.mean(windowBuffer);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">case</span>(filter2d::min):{</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> outBuffer[x/down]=stat.mymin(windowBuffer);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">case</span>(filter2d::ismin):{</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> outBuffer[x/down]=(stat.mymin(windowBuffer)==windowBuffer[centre])? 1:0;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">case</span>(filter2d::minmax):{</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> stat.minmax(windowBuffer,windowBuffer.begin(),windowBuffer.end(),min,max);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span>(min!=max)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> outBuffer[x/down]=0;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> outBuffer[x/down]=windowBuffer[centre];<span class="comment">//centre pixels</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">case</span>(filter2d::max):{</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> outBuffer[x/down]=stat.mymax(windowBuffer);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">case</span>(filter2d::ismax):{</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> outBuffer[x/down]=(stat.mymax(windowBuffer)==windowBuffer[centre])? 1:0;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">case</span>(filter2d::order):{</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">if</span>(windowBuffer.empty())</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">double</span> lbound=0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">double</span> ubound=dimX*dimY;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">double</span> theMin=stat.mymin(windowBuffer);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">double</span> theMax=stat.mymax(windowBuffer);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">double</span> scale=(ubound-lbound)/(theMax-theMin);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> outBuffer[x/down]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(scale*(windowBuffer[centre]-theMin)+lbound);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">case</span>(filter2d::sum):{</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> outBuffer[x/down]=stat.sum(windowBuffer);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">case</span>(filter2d::percentile):{</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> outBuffer[x/down]=stat.percentile(windowBuffer,windowBuffer.begin(),windowBuffer.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">case</span>(filter2d::homog):</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span>(occurrence.size()==1)<span class="comment">//all values in window must be the same</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">else</span><span class="comment">//favorize original value in case of ties</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">case</span>(filter2d::heterog):{</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">for</span>(std::vector<double>::const_iterator wit=windowBuffer.begin();wit!=windowBuffer.end();++wit){</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">if</span>(wit==windowBuffer.begin()+windowBuffer.size()/2)</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*wit!=inBuffer[(dimY-1)/2][x])</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> outBuffer[x/down]=1;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*wit==inBuffer[(dimY-1)/2][x]){<span class="comment">//todo:wit mag niet central pixel zijn</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">case</span>(filter2d::density):{</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> std::vector<short>::const_iterator vit=m_class.begin();</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">while</span>(vit!=m_class.end())</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> outBuffer[x/down]+=100.0*occurrence[*(vit++)]/windowBuffer.size();</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">case</span>(filter2d::countid):{</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(windowBuffer.size())</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> outBuffer[x/down]=occurrence.size();</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">case</span>(filter2d::mode):{</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span>(occurrence.size()){</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> std::map<int,int>::const_iterator maxit=occurrence.begin();</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span>(std::map<int,int>::const_iterator mit=occurrence.begin();mit!=occurrence.end();++mit){</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">if</span>(mit->second>maxit->second)</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> maxit=mit;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(occurrence[inBuffer[(dimY-1)/2][x]]<maxit->second)<span class="comment">//</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> outBuffer[x/down]=maxit->first;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">else</span><span class="comment">//favorize original value in case of ties</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> }</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">case</span>(filter2d::threshold):{</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> assert(m_class.size()==m_threshold.size());</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> outBuffer[x/down]=inBuffer[(dimY-1)/2][x];<span class="comment">//initialize with original value (in case thresholds not met)</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(100.0*(occurrence[m_class[iclass]])/windowBuffer.size()>m_threshold[iclass])</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> outBuffer[x/down]=m_class[iclass];</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">case</span>(filter2d::scramble):{<span class="comment">//could be done more efficiently window by window with random shuffling entire buffer and assigning entire buffer at once to output image...</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">int</span> randomIndex=std::rand()%windowBuffer.size();</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span>(randomIndex>=windowBuffer.size())</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> outBuffer[x/down]=windowBuffer.back();</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(randomIndex<0)</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> outBuffer[x/down]=windowBuffer[0];</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> outBuffer[x/down]=windowBuffer[randomIndex];</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> }</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> outBuffer[x/down]=noDataValue;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">case</span>(filter2d::mixed):{</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">enum</span> MixType { BF=11, CF=12, MF=13, NF=20, W=30 };</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordtype">double</span> nBF=occurrence[BF];</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordtype">double</span> nCF=occurrence[CF];</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordtype">double</span> nMF=occurrence[MF];</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">double</span> nNF=occurrence[NF];</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordtype">double</span> nW=occurrence[W];</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">if</span>(windowBuffer.size()){</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>((nBF+nCF+nMF)&&(nBF+nCF+nMF>=nNF+nW)){<span class="comment">//forest</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(nBF/(nBF+nCF)>=0.75)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> outBuffer[x/down]=BF;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nCF/(nBF+nCF)>=0.75)</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> outBuffer[x/down]=CF;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> outBuffer[x/down]=MF;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> }</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">else</span>{<span class="comment">//non-forest</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span>(nW&&(nW>=nNF))</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> outBuffer[x/down]=W;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> outBuffer[x/down]=NF;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> outBuffer[x/down]=inBuffer[indexJ][indexI];</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> progress=(1.0+y/down);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> progress+=(outputVector.size());</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> progress/=outputVector.size();</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment">//copy outBuffer to outputVector</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> outputVector[y/down]=outBuffer;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> }</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// class Compare_mapValue{</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// public:</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// int operator() (const map<int,int>::value_type& v1, const map<int, int>::value_type& v2) const{</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// return (v1.second)>(v2.second);</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// };</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter2d::shift(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span class="keywordtype">double</span> offsetX, <span class="keywordtype">double</span> o [...]
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> output.resize(input.nRows(),input.nCols());</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keyword">const</span> gsl_rng_type *rangenType;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> gsl_rng *rangen;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> gsl_rng_env_setup();</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> rangenType=gsl_rng_default;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> rangen=gsl_rng_alloc(rangenType);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">long</span> seed=time(NULL)*getpid();</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> gsl_rng_set(rangen,seed);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<input.nRows();++j){</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<input.nCols();++i){</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> T theValue=0;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordtype">double</span> randomX=0;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordtype">double</span> randomY=0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(randomSigma>0){</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> randomX=gsl_ran_gaussian(rangen,randomSigma);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> randomY=gsl_ran_gaussian(rangen,randomSigma);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> }</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">double</span> readCol=i+offsetX+randomX;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">double</span> readRow=j+offsetY+randomY;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">if</span>(readRow<0)</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> readRow=0;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">if</span>(readRow>input.nRows()-1)</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> readRow=input.nRows()-1;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">if</span>(readCol<0)</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> readCol=0;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(readCol>input.nCols()-1)</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> readCol=input.nCols()-1;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">switch</span>(resample){</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">case</span>(BILINEAR):{</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordtype">double</span> lowerRow=readRow-0.5;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordtype">double</span> upperRow=readRow+0.5;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> lowerRow=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerRow);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> upperRow=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperRow);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordtype">double</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">double</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> assert(lowerRow>=0);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> assert(lowerRow<input.nRows());</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> assert(lowerCol>=0);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> assert(lowerCol<input.nCols());</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> assert(upperRow>=0);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> assert(upperRow<input.nRows());</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> assert(upperCol>=0);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">if</span>(upperCol>=input.nCols()){</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> std::cout << <span class="stringliteral">"upperCol: "</span> << upperCol << std::endl;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> std::cout << <span class="stringliteral">"readCol: "</span> << readCol << std::endl;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> std::cout << <span class="stringliteral">"readCol+0.5: "</span> << readCol+0.5 << std::endl;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> std::cout << <span class="stringliteral">"static_cast<int>(readCol+0.5): "</span> << <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol+0.5) << std::endl;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> assert(upperCol<input.nCols());</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">double</span> c00=input[lowerRow][lowerCol];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordtype">double</span> c11=input[upperRow][upperCol];</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">double</span> c01=input[lowerRow][upperCol];</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">double</span> c10=input[upperRow][lowerCol];</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">double</span> a=(upperCol-readCol)*c00+(readCol-lowerCol)*c01;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordtype">double</span> b=(upperCol-readCol)*c10+(readCol-lowerCol)*c11;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> theValue=(upperRow-readRow)*a+(readRow-lowerRow)*b;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> }</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> theValue=input[<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readRow)][static_cast<int>(readCol)];</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> assert(j>=0);</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> assert(j<output.nRows());</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> assert(i>=0);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> assert(i<output.nCols());</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> output[j][i]=theValue;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> progress=(1.0+j);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> progress/=output.nRows();</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> gsl_rng_free(rangen);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> Filter2d::morphology(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span [...]
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> {</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=0;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> assert(dimX);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> assert(dimY);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <a class="code" href="classVector2d.html">Vector2d<T></a> inBuffer(dimY,input.nCols());</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> output.clear();</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> output.resize(input.nRows(),input.nCols());</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<input.nCols();++i)</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> inBuffer[indexJ][i]=input[abs(j)][i];</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> ++indexJ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nRows();++y){</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">if</span>(y+dimY/2<input.nRows()){</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<input.nCols();++i)</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> inBuffer[inBuffer.size()-1][i]=input[y+dimY/2][i];</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordtype">int</span> over=y+dimY/2-input.nRows();</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> assert(index>=0);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> }</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nCols();++x){</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> output[y][x]=0;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordtype">double</span> currentValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> std::vector<double> statBuffer;</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordtype">bool</span> currentMasked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">if</span>(currentValue==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> currentMasked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> output[y][x]=currentValue;<span class="comment">//introduced due to hThreshold</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(currentMasked){</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> output[y][x]=currentValue;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordtype">double</span> d2=i*i+j*j;<span class="comment">//square distance</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">if</span>(disc&&(d2>(dimX/2)*(dimY/2)))</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> indexI=x+i;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> indexI=-indexI;</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=input.nCols())</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> indexI=input.nCols()-i;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> indexJ=-j;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=input.nRows())</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==noDataValue)</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<m_noDataValues.size();++imask){</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_noDataValues[imask]){</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> }</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span>(!masked){</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordtype">short</span> binValue=0;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">if</span>(inBuffer[indexJ][indexI]==m_class[iclass]){</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> binValue=1;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> statBuffer.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">if</span>(statBuffer.size()){</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">case</span>(filter2d::dilate):</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span>(output[y][x]<stat.mymax(statBuffer)-hThreshold){</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> output[y][x]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> ++nchange;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">case</span>(filter2d::erode):</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span>(output[y][x]>stat.mymin(statBuffer)+hThreshold){</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> output[y][x]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> ++nchange;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> }</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> ess << <span class="stringliteral">"Error: morphology method "</span> << method << <span class="stringliteral">" not supported, choose "</span> << filter2d::dilate << <span class="stringliteral">" (dilate) or "</span> << filter2d::erode << <span class="stringliteral">" (erode)"</span> << std::endl;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> }</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">if</span>(output[y][x]&&m_class.size())</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> output[y][x]=m_class[0];</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// assert(m_noDataValues.size());</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment">// output[x]=m_noDataValues[0];</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> output[y][x]=noDataValue;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> }</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> progress=(1.0+y);</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> progress/=output.nRows();</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> }</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">return</span> nchange;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> }</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> Filter2d::dsm2dtm_nwse(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMa [...]
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> {</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <a class="code" href="classVector2d.html">Vector2d<T></a> tmpDSM(inputDSM);</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=0;</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordtype">int</span> dimX=dim;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordtype">int</span> dimY=dim;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> assert(dimX);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> assert(dimY);</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <a class="code" href="classVector2d.html">Vector2d<T></a> inBuffer(dimY,inputDSM.nCols());</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">if</span>(outputMask.size()!=inputDSM.nRows())</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> outputMask.resize(inputDSM.nRows());</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<inputDSM.nCols();++i)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> inBuffer[indexJ][i]=tmpDSM[abs(j)][i];</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> ++indexJ;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<tmpDSM.nRows();++y){</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span>(y+dimY/2<tmpDSM.nRows()){</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<tmpDSM.nCols();++i)</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i];</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordtype">int</span> over=y+dimY/2-tmpDSM.nRows();</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> assert(index>=0);</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> }</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<tmpDSM.nCols();++x){</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordtype">double</span> centerValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordtype">short</span> nmasked=0;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> std::vector<T> neighbors;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> indexI=x+i;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> indexI=-indexI;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=tmpDSM.nCols())</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> indexI=tmpDSM.nCols()-i;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> indexJ=-j;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=tmpDSM.nRows())</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keywordtype">double</span> difference=(centerValue-inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">if</span>(i||j)<span class="comment">//skip centerValue</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> neighbors.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="keywordflow">if</span>(difference>hThreshold)</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> ++nmasked;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> }</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> }</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">if</span>(nmasked<=nlimit){</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> ++nchange;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="comment">//reset pixel in outputMask</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> outputMask[y][x]=0;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">//reset pixel height in tmpDSM</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> sort(neighbors.begin(),neighbors.end());</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> assert(neighbors.size()>1);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> inBuffer[(dimY-1)/2][x]=neighbors[1];</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment">/* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> }</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> }</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> progress=(1.0+y);</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> progress/=outputMask.nRows();</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> }</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">return</span> nchange;</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> Filter2d::dsm2dtm_nesw(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMa [...]
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> {</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <a class="code" href="classVector2d.html">Vector2d<T></a> tmpDSM(inputDSM);</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=0;</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordtype">int</span> dimX=dim;</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordtype">int</span> dimY=dim;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> assert(dimX);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> assert(dimY);</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <a class="code" href="classVector2d.html">Vector2d<T></a> inBuffer(dimY,inputDSM.nCols());</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">if</span>(outputMask.size()!=inputDSM.nRows())</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> outputMask.resize(inputDSM.nRows());</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment">//initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<inputDSM.nCols();++i)</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> inBuffer[indexJ][i]=tmpDSM[abs(j)][i];</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> ++indexJ;</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<tmpDSM.nRows();++y){</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">if</span>(y){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment">//erase first line from inBuffer</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> inBuffer.erase(inBuffer.begin());</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment">//read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span>(y+dimY/2<tmpDSM.nRows()){</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> inBuffer.push_back(inBuffer.back());</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<tmpDSM.nCols();++i)</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i];</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> }</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordtype">int</span> over=y+dimY/2-tmpDSM.nRows();</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordtype">int</span> index=(inBuffer.size()-1)-over;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> assert(index>=0);</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> assert(index<inBuffer.size());</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> inBuffer.push_back(inBuffer[index]);</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> }</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=tmpDSM.nCols()-1;x>=0;--x){</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordtype">double</span> centerValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordtype">short</span> nmasked=0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> std::vector<T> neighbors;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> indexI=x+i;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> indexI=-indexI;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=tmpDSM.nCols())</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> indexI=tmpDSM.nCols()-i;</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> indexJ=-j;</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=tmpDSM.nRows())</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="keywordtype">double</span> difference=(centerValue-inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="keywordflow">if</span>(i||j)<span class="comment">//skip centerValue</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> neighbors.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(difference>hThreshold)</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> ++nmasked;</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> }</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> }</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="keywordflow">if</span>(nmasked<=nlimit){</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> ++nchange;</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">//reset pixel in outputMask</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> outputMask[y][x]=0;</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> }</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment">//reset pixel height in tmpDSM</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> sort(neighbors.begin(),neighbors.end());</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> assert(neighbors.size()>1);</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> inBuffer[(dimY-1)/2][x]=neighbors[1];</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment">/* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> }</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> progress=(1.0+y);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> progress/=outputMask.nRows();</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> }</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">return</span> nchange;</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> }</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> Filter2d::dsm2dtm_senw(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMa [...]
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> {</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <a class="code" href="classVector2d.html">Vector2d<T></a> tmpDSM(inputDSM);</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=0;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="keywordtype">int</span> dimX=dim;</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordtype">int</span> dimY=dim;</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> assert(dimX);</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> assert(dimY);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <a class="code" href="classVector2d.html">Vector2d<T></a> inBuffer(dimY,inputDSM.nCols());</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">if</span>(outputMask.size()!=inputDSM.nRows())</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> outputMask.resize(inputDSM.nRows());</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="keywordtype">int</span> indexJ=inputDSM.nRows()-1;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment">//initialize first half of inBuffer</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=inputDSM.nRows()-dimY/2;j<inputDSM.nRows();--j){</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<inputDSM.nCols();++i)</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> inBuffer[indexJ][i]=tmpDSM[abs(j)][i];</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> ++indexJ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=tmpDSM.nRows()-1;y>=0;--y){</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">if</span>(y<tmpDSM.nRows()-1){<span class="comment">//inBuffer already initialized for y=tmpDSM.nRows()-1</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">//erase last line from inBuffer</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> inBuffer.erase(inBuffer.end()-1);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment">//read extra line and insert to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordflow">if</span>(y-dimY/2>0){</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> inBuffer.insert(inBuffer.begin(),inBuffer.back());</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<tmpDSM.nCols();++i)</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> inBuffer[0][i]=tmpDSM[y-dimY/2][i];</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> }</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> inBuffer.insert(inBuffer.begin(),inBuffer[abs(y-dimY/2)]);</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=tmpDSM.nCols()-1;x>=0;--x){</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordtype">double</span> centerValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">short</span> nmasked=0;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> std::vector<T> neighbors;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> indexI=x+i;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> indexI=-indexI;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=tmpDSM.nCols())</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> indexI=tmpDSM.nCols()-i;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> indexJ=-j;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=tmpDSM.nRows())</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordtype">double</span> difference=(centerValue-inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">if</span>(i||j)<span class="comment">//skip centerValue</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> neighbors.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordflow">if</span>(difference>hThreshold)</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> ++nmasked;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordflow">if</span>(nmasked<=nlimit){</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> ++nchange;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment">//reset pixel in outputMask</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> outputMask[y][x]=0;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment">//reset pixel height in tmpDSM</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> sort(neighbors.begin(),neighbors.end());</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> assert(neighbors.size()>1);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> inBuffer[(dimY-1)/2][x]=neighbors[1];</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">/* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> }</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> progress=(1.0+y);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> progress/=outputMask.nRows();</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">return</span> nchange;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> }</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> Filter2d::dsm2dtm_swne(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& inputDSM, <a class="code" href="classVector2d.html">Vector2d<T></a>& outputMa [...]
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> {</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <a class="code" href="classVector2d.html">Vector2d<T></a> tmpDSM(inputDSM);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="keywordtype">double</span> noDataValue=0;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> noDataValue=m_noDataValues[0];</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=0;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordtype">int</span> dimX=dim;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordtype">int</span> dimY=dim;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> assert(dimX);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> assert(dimY);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <a class="code" href="classVector2d.html">Vector2d<T></a> inBuffer(dimY,inputDSM.nCols());</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">if</span>(outputMask.size()!=inputDSM.nRows())</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> outputMask.resize(inputDSM.nRows());</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">//initialize first half of inBuffer</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=inputDSM.nRows()-dimY/2;j<inputDSM.nRows();--j){</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<inputDSM.nCols();++i)</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> inBuffer[indexJ][i]=tmpDSM[abs(j)][i];</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> ++indexJ;</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=tmpDSM.nRows()-1;y>=0;--y){</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">if</span>(y<tmpDSM.nRows()-1){<span class="comment">//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">//erase last line from inBuffer</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> inBuffer.erase(inBuffer.end()-1);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment">//read extra line and insert to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordflow">if</span>(y-dimY/2>0){</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment">//allocate buffer</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> inBuffer.insert(inBuffer.begin(),inBuffer.back());</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<tmpDSM.nCols();++i)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> inBuffer[0][i]=tmpDSM[y-dimY/2][i];</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> }</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> inBuffer.insert(inBuffer.begin(),inBuffer[abs(y-dimY/2)]);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<tmpDSM.nCols();++x){</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordtype">double</span> centerValue=inBuffer[(dimY-1)/2][x];</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="keywordtype">short</span> nmasked=0;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> std::vector<T> neighbors;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=-(dimY-1)/2;j<=dimY/2;++j){</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=-(dimX-1)/2;i<=dimX/2;++i){</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> indexI=x+i;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment">//check if out of bounds</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">if</span>(indexI<0)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> indexI=-indexI;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(indexI>=tmpDSM.nCols())</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> indexI=tmpDSM.nCols()-i;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordflow">if</span>(y+j<0)</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> indexJ=-j;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(y+j>=tmpDSM.nRows())</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> indexJ=(dimY-1)/2+j;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="keywordtype">double</span> difference=(centerValue-inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">if</span>(i||j)<span class="comment">//skip centerValue</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> neighbors.push_back(inBuffer[indexJ][indexI]);</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="keywordflow">if</span>(difference>hThreshold)</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> ++nmasked;</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">if</span>(nmasked<=nlimit){</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> ++nchange;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">//reset pixel in outputMask</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> outputMask[y][x]=0;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> }</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment">//reset pixel height in tmpDSM</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> sort(neighbors.begin(),neighbors.end());</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> assert(neighbors.size()>1);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> inBuffer[(dimY-1)/2][x]=neighbors[1];</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment">/* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> progress=(1.0+y);</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> progress/=outputMask.nRows();</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keywordflow">return</span> nchange;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter2d::shadowDsm(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <a class="code" href="classVector2d.html">Vector2d<T></a>& output, <span class="keywordtype">double</span> sza, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> {</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ncols=input.nCols();</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> output.clear();</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> output.resize(input.nRows(),ncols);</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">//do we need to initialize output?</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="comment">// for(int y=0;y<output.nRows();++y)</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">// for(int x=0;x<output.nCols();++x)</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment">// output[y][x]=0;</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keywordtype">int</span> indexI=0;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordtype">int</span> indexJ=0;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nRows();++y){</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nCols();++x){</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordtype">double</span> currentValue=input[y][x];</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordtype">int</span> theDist=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(sqrt((currentValue*tan(DEG2RAD(sza))/pixelSize)*(currentValue*tan(DEG2RAD(sza))/pixelSize)));<span class="comment">//in pixels</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">double</span> theDir=DEG2RAD(saa)+PI/2.0;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">if</span>(theDir<0)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> theDir+=2*PI;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> d=0;d<theDist;++d){<span class="comment">//d in pixels</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> indexI=x+d*cos(theDir);<span class="comment">//in pixels</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> indexJ=y+d*sin(theDir);<span class="comment">//in pixels</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordflow">if</span>(indexJ<0||indexJ>=input.size())</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="keywordflow">if</span>(indexI<0||indexI>=input[indexJ].size())</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">if</span>(input[indexJ][indexI]<currentValue-d*pixelSize/tan(DEG2RAD(sza))){<span class="comment">//in m</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> output[indexJ][indexI]=shadowFlag;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> }</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> }</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> progress=(1.0+y);</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> progress/=output.nRows();</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter2d::dwtForward(<a class="code" href="classVector2d.html">Vector2d<T></a>& theBuffer, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="keywordtype">int</span> nRow=theBuffer.size();</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> assert(nRow);</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="keywordtype">int</span> nCol=theBuffer[0].size();</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> assert(nCol);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">while</span>(theBuffer.size()&(theBuffer.size()-1))</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> theBuffer.push_back(theBuffer.back());</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow)</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">while</span>(theBuffer[irow].size()&(theBuffer[irow].size()-1))</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> theBuffer[irow].push_back(theBuffer[irow].back());</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> std::vector<double> vdata(theBuffer.size()*theBuffer[0].size());</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordtype">double</span>* data=&(vdata[0]);</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[0].size();++icol){</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordtype">int</span> index=irow*theBuffer[0].size()+icol;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> data[index]=theBuffer[irow][icol];</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordtype">int</span> nsize=theBuffer.size()*theBuffer[0].size();</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> assert(nsize);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> w=gsl_wavelet_alloc(filter::Filter::getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> gsl_wavelet2d_nstransform_forward (w, data, theBuffer.size(), theBuffer.size(),theBuffer[0].size(), work);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> theBuffer.erase(theBuffer.begin()+nRow,theBuffer.end());</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> theBuffer[irow].erase(theBuffer[irow].begin()+nCol,theBuffer[irow].end());</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[irow].size();++icol){</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordtype">int</span> index=irow*theBuffer[irow].size()+icol;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> theBuffer[irow][icol]=data[index];</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> progress/=theBuffer.nRows();</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> }</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> </div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter2d::dwtInverse(<a class="code" href="classVector2d.html">Vector2d<T></a>& theBuffer, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordtype">int</span> nRow=theBuffer.size();</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> assert(nRow);</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="keywordtype">int</span> nCol=theBuffer[0].size();</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> assert(nCol);</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">while</span>(theBuffer.size()&(theBuffer.size()-1))</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> theBuffer.push_back(theBuffer.back());</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow)</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordflow">while</span>(theBuffer[irow].size()&(theBuffer[irow].size()-1))</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> theBuffer[irow].push_back(theBuffer[irow].back());</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> std::vector<double> vdata(theBuffer.size()*theBuffer[0].size());</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordtype">double</span>* data=&(vdata[0]);</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment">//double data[theBuffer.size()*theBuffer[0].size()];</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[0].size();++icol){</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="keywordtype">int</span> index=irow*theBuffer[0].size()+icol;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> data[index]=theBuffer[irow][icol];</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> }</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordtype">int</span> nsize=theBuffer.size()*theBuffer[0].size();</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> assert(nsize);</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> w=gsl_wavelet_alloc(filter::Filter::getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> gsl_wavelet2d_nstransform_inverse (w, data, theBuffer.size(), theBuffer.size(),theBuffer[0].size(), work);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> theBuffer.erase(theBuffer.begin()+nRow,theBuffer.end());</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> theBuffer[irow].erase(theBuffer[irow].begin()+nCol,theBuffer[irow].end());</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[irow].size();++icol){</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="keywordtype">int</span> index=irow*theBuffer[irow].size()+icol;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> theBuffer[irow][icol]=data[index];</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> progress/=theBuffer.nRows();</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> }</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> }</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter2d::dwtCut(<a class="code" href="classVector2d.html">Vector2d<T></a>& theBuffer, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut){</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> </div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="keywordtype">int</span> nRow=theBuffer.size();</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> assert(nRow);</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="keywordtype">int</span> nCol=theBuffer[0].size();</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> assert(nCol);</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="keywordflow">while</span>(theBuffer.size()&(theBuffer.size()-1))</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> theBuffer.push_back(theBuffer.back());</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow)</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordflow">while</span>(theBuffer[irow].size()&(theBuffer[irow].size()-1))</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> theBuffer[irow].push_back(theBuffer[irow].back());</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordtype">double</span>* data=<span class="keyword">new</span> <span class="keywordtype">double</span>[theBuffer.size()*theBuffer[0].size()];</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="keywordtype">double</span>* abscoeff=<span class="keyword">new</span> <span class="keywordtype">double</span>[theBuffer.size()*theBuffer[0].size()];</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordtype">size_t</span>* p=<span class="keyword">new</span> <span class="keywordtype">size_t</span>[theBuffer.size()*theBuffer[0].size()];</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[0].size();++icol){</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordtype">int</span> index=irow*theBuffer[0].size()+icol;</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> assert(index<theBuffer.size()*theBuffer[0].size());</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> data[index]=theBuffer[irow][icol];</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> }</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> }</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordtype">int</span> nsize=theBuffer.size()*theBuffer[0].size();</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> assert(nsize);</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> w=gsl_wavelet_alloc(filter::Filter::getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> gsl_wavelet2d_nstransform_forward (w, data, theBuffer.size(), theBuffer[0].size(),theBuffer[0].size(), work);</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[0].size();++icol){</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="keywordtype">int</span> index=irow*theBuffer[0].size()+icol;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> abscoeff[index]=fabs(data[index]);</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> }</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> }</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="keywordtype">int</span> nc=(100-cut)/100.0*nsize;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> gsl_sort_index(p,abscoeff,1,nsize);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;(i+nc)<nsize;i++)</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> data[p[i]]=0;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> gsl_wavelet2d_nstransform_inverse (w, data, theBuffer.size(), theBuffer[0].size(),theBuffer[0].size(), work);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow){</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<theBuffer[irow].size();++icol){</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordtype">int</span> index=irow*theBuffer[irow].size()+icol;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> theBuffer[irow][icol]=data[index];</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> }</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> progress/=theBuffer.nRows();</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> }</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> theBuffer.erase(theBuffer.begin()+nRow,theBuffer.end());</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<theBuffer.size();++irow)</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> theBuffer[irow].erase(theBuffer[irow].begin()+nCol,theBuffer[irow].end());</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="keyword">delete</span>[] data;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="keyword">delete</span>[] abscoeff;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="keyword">delete</span>[] p;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> }</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> }</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="preprocessor">#endif </span><span class="comment">/* _MYFILTER_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classfilter2d_1_1Filter2d_html"><div class="ttname"><a href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter2d_8h_source.html#l00065">Filter2d.h:65</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Filter_8cc_source.html b/doc/html/Filter_8cc_source.html
new file mode 100644
index 0000000..d6059a1
--- /dev/null
+++ b/doc/html/Filter_8cc_source.html
@@ -0,0 +1,785 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Filter.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Filter.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Filter.cc: class for filtering</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "Filter.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> filter::Filter::Filter(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> : m_padding(<span class="stringliteral">"symmetric"</span>)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> filter::Filter::Filter(<span class="keyword">const</span> vector<double> &taps)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> : m_padding(<span class="stringliteral">"symmetric"</span>)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> setTaps(taps);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> filter::Filter::setTaps(<span class="keyword">const</span> vector<double> &taps, <span class="keywordtype">bool</span> normalize)</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> m_taps.resize(taps.size());</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<taps.size();++itap)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> norm+=taps[itap];</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span>(norm){</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<taps.size();++itap)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> m_taps[itap]=taps[itap]/norm;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> m_taps=taps;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> assert(m_taps.size()%2);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">int</span> filter::Filter::pushNoDataValue(<span class="keywordtype">double</span> noDataValue)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span>(find(m_noDataValues.begin(),m_noDataValues.end(),noDataValue)==m_noDataValues.end())</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> m_noDataValues.push_back(noDataValue);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span>(m_noDataValues.size());</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> filter::Filter::dwtForward(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> dwtForward(pixelInput,wavelet_type,family);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> lineOutput[iband][x]=pixelInput[iband];</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> filter::Filter::dwtInverse(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> dwtInverse(pixelInput,wavelet_type,family);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> lineOutput[iband][x]=pixelInput[iband];</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span> filter::Filter::dwtCut(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> dwtCut(pixelInput,wavelet_type,family,cut);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> lineOutput[iband][x]=pixelInput[iband];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">void</span> filter::Filter::dwtCutFrom(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">int</span> band){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> dwtForward(pixelInput,wavelet_type,family);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(iband>=band)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> pixelInput[iband]=0;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> dwtInverse(pixelInput,wavelet_type,family);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> lineOutput[iband][x]=pixelInput[iband];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">//todo: support different padding strategies</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">void</span> filter::Filter::dwtForward(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">int</span> origsize=data.size();</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">while</span>(data.size()&(data.size()-1))</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> data.push_back(data.back());</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">int</span> nsize=data.size();</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> assert(nsize);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> w=gsl_wavelet_alloc(getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> gsl_wavelet_transform_forward(w,&(data[0]),1,nsize,work);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> data.erase(data.begin()+origsize,data.end());</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">//todo: support different padding strategies</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">void</span> filter::Filter::dwtInverse(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family){</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">int</span> origsize=data.size();</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">while</span>(data.size()&(data.size()-1))</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> data.push_back(data.back());</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">int</span> nsize=data.size();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> assert(nsize);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> w=gsl_wavelet_alloc(getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> gsl_wavelet_transform_inverse(w,&(data[0]),1,nsize,work);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> data.erase(data.begin()+origsize,data.end());</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">//todo: support different padding strategies</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">void</span> filter::Filter::dwtCut(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut){</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">int</span> origsize=data.size();</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">//make sure data size if power of 2</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">while</span>(data.size()&(data.size()-1))</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> data.push_back(data.back());</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">int</span> nsize=data.size();</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> gsl_wavelet *w;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> gsl_wavelet_workspace *work;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> assert(nsize);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> w=gsl_wavelet_alloc(getWaveletType(wavelet_type),family);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> work=gsl_wavelet_workspace_alloc(nsize);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> gsl_wavelet_transform_forward(w,&(data[0]),1,nsize,work);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> std::vector<double> abscoeff(data.size());</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordtype">size_t</span>* p=<span class="keyword">new</span> <span class="keywordtype">size_t</span>[data.size()];</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<data.size();++index){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> abscoeff[index]=fabs(data[index]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">int</span> nc=(100-cut)/100.0*nsize;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> gsl_sort_index(p,&(abscoeff[0]),1,nsize);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;(i+nc)<nsize;i++)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> data[p[i]]=0;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> gsl_wavelet_transform_inverse(w,&(data[0]),1,nsize,work);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> data.erase(data.begin()+origsize,data.end());</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">delete</span>[] p;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> gsl_wavelet_free (w);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gsl_wavelet_workspace_free (work);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">void</span> filter::Filter::morphology(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">short</span> verbose)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// bool bverbose=(verbose>1)? true:false;</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> vector<double> pixelOutput(input.nrOfBand());</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> filter(pixelInput,pixelOutput,method,dim);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// morphology(pixelInput,pixelOutput,method,dim,bverbose);</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> lineOutput[iband][x]=pixelOutput[iband];</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">void</span> filter::Filter::smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <span class="keyword">const</span> std::string& interpolationType, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> vector<double> pixelOutput(input.nrOfBand());</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> smoothNoData(pixelInput,interpolationType,pixelOutput);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> lineOutput[iband][x]=pixelOutput[iband];</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">void</span> filter::Filter::smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">short</span> dim)</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> {</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> assert(dim>0);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> m_taps.resize(dim);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<dim;++itap)</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> m_taps[itap]=1.0/dim;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> filter(input,output);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">void</span> filter::Filter::filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> vector<double> pixelOutput(input.nrOfBand());</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> filter(pixelInput,pixelOutput);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> lineOutput[iband][x]=pixelOutput[iband];</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">void</span> filter::Filter::stat(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> assert(output.nrOfCol()==input.nrOfCol());</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> vector<double> lineOutput(output.nrOfCol());</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> stat.setNoDataValues(m_noDataValues);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> lineOutput[x]=stat.median(pixelInput);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> lineOutput[x]=stat.mymin(pixelInput);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> lineOutput[x]=stat.mymax(pixelInput);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> lineOutput[x]=stat.sum(pixelInput);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> lineOutput[x]=stat.var(pixelInput);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">case</span>(filter::stdev):</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> lineOutput[x]=sqrt(stat.var(pixelInput));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> lineOutput[x]=stat.mean(pixelInput);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">case</span>(filter::percentile):</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> lineOutput[x]=stat.percentile(pixelInput,pixelInput.begin(),pixelInput.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> }</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> output.writeData(lineOutput,GDT_Float64,y);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> cerr << errorstring << <span class="stringliteral">"in line "</span> << y << endl;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">void</span> filter::Filter::filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim)</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> {</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(input.nrOfBand(),input.nrOfCol());;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> vector<double> pixelInput(input.nrOfBand());</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> vector<double> pixelOutput;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<input.nrOfCol();++x){</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> pixelInput=lineInput.selectCol(x);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> filter(pixelInput,pixelOutput,method,dim);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<pixelOutput.size();++iband){</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> lineOutput[iband][x]=pixelOutput[iband];</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// if(pixelInput[iband]!=0)</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// assert(pixelOutput[iband]!=0);</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> }</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband){</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> output.writeData(lineOutput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> }</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> }</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordtype">void</span> filter::Filter::getSavGolayCoefficients(vector<double> &tapz, <span class="keywordtype">int</span> np, <span class="keywordtype">int</span> nl, <span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> ld, <span class="keywordtype">int</span> m) {</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">int</span> j, k, imj, ipj, kk, mm;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">double</span> d, fac, sum;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="comment">// c.resize(nl+1+nr);</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> vector<double> tmpc(np);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">if</span>(np < nl + nr + 1 || nl < 0 || nr < 0 || ld > m || nl + nr < m) {</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> cerr << <span class="stringliteral">"bad args in savgol"</span> << endl;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> vector<int> indx(m + 1, 0);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> vector<double> a((m + 1) * (m + 1), 0.0);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> vector<double> b(m + 1, 0.0);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">for</span>(ipj = 0; ipj <= (m << 1); ++ipj) {</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> sum = (ipj ? 0.0 : 1.0);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">for</span>(k = 1; k <= nr; ++k)</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> sum += (<span class="keywordtype">int</span>)pow((<span class="keywordtype">double</span>)k, (<span class="keywordtype">double</span>)ipj);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">for</span>(k = 1; k <= nl; ++k)</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> sum += (<span class="keywordtype">int</span>)pow((<span class="keywordtype">double</span>) - k, (<span class="keywordtype">double</span>)ipj);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> mm = (ipj < 2 * m - ipj ? ipj : 2 * m - ipj);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">for</span>(imj = -mm; imj <= mm; imj += 2)</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> a[(ipj + imj) / 2 * (m + 1) + (ipj - imj) / 2] = sum;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> }</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> ludcmp(a, indx, d);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span>(j = 0; j < m + 1; ++j)</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> b[j] = 0.0;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> b[ld] = 1.0;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> lubksb(a, indx, b);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">// for(kk = 0; kk < np; ++kk)</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment">// c[kk] = 0.0;</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">for</span>(k = -nl; k <= nr; ++k) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="comment">// for(k = -nl; k < nr; ++k) {</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> sum = b[0];</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> fac = 1.0;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">for</span>(mm = 1; mm <= m; ++mm)</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> sum += b[mm] * (fac *= k);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment">// store in wrap=around order</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> kk = (np - k) % np;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment">//re-order c as I need for taps</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment">// kk=k+nl;</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> tmpc[kk] = sum;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> tapz.resize(nl+1+nr);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="comment">// for(k=0;k<nl+1+nr)</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> tapz[tapz.size()/2]=tmpc[0];</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">//past data points</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">for</span>(k=1;k<=tapz.size()/2;++k)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> tapz[tapz.size()/2-k]=tmpc[k];</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">//future data points</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">for</span>(k=1;k<=tapz.size()/2;++k)</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> tapz[tapz.size()/2+k]=tmpc[np-k];</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordtype">void</span> filter::Filter::ludcmp(vector<double> &a, vector<int> &indx, <span class="keywordtype">double</span> &d) {</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">const</span> <span class="keywordtype">double</span> TINY = 1.0e-20;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordtype">int</span> i, imax = -1, j, k;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordtype">double</span> big, dum, sum, temp;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordtype">int</span> n = indx.size();</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> vector<double> vv(n, 0.0);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> d = 1.0;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">for</span>(i = 0; i < n; ++i) {</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> big = 0.0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">for</span>(j = 0; j < n; ++j)</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">if</span>((temp = fabs(a[i * n + j])) > big) big = temp;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">if</span>(big == 0.0) {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> cerr << <span class="stringliteral">"Singular matrix in routine ludcmp"</span> << endl;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> vv[i] = 1. / big;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">for</span>(j = 0; j < n; ++j) {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">for</span>(i = 0; i < j; ++i) {</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> sum = a[i * n + j];</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">for</span>(k = 0; k < i; ++k)</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> sum -= a[i * n + k] * a[k * n + j];</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> a[i * n + j] = sum;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> big = 0.0;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span>(i = j; i < n; ++i) {</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> sum = a[i * n + j];</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">for</span>(k = 0; k < j; ++k)</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> sum -= a[i * n + k] * a[k * n + j];</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> a[i * n + j] = sum;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span>((dum = vv[i] * fabs(sum)) >= big) {</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> big = dum;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> imax = i;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">if</span>(j != imax) {</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">for</span>(k = 0; k < n; ++k) {</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> dum = a[imax * n + k];</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> a[imax * n + k] = a[j * n + k];</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> a[j * n + k] = dum;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> d = -d;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> vv[imax] = vv[j];</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> }</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> indx[j] = imax;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">if</span>(a[j * n + j] == 0.0) a[j * n + j] = TINY;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">if</span>(j != n - 1) {</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> dum = 1. / a[j * n + j];</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">for</span>(i = j + 1; i < n; ++i)</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> a[i * n + j] *= dum;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> }</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordtype">void</span> filter::Filter::lubksb(vector<double> &a, vector<int> &indx, vector<double> &b) {</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordtype">int</span> i, ii = 0, ip, j;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordtype">double</span> sum;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordtype">int</span> n = indx.size();</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">for</span>(i = 0; i < n; ++i) {</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> ip = indx[i];</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> sum = b[ip];</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> b[ip] = b[i];</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">if</span>(ii != 0)</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">for</span>(j = ii - 1; j < i; ++j)</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> sum -= a[i * n + j] * b[j];</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sum != 0.0)</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> ii = i + 1;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> b[i] = sum;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> }</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">for</span>(i = n - 1; i >= 0; --i) {</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> sum = b[i];</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">for</span>(j = i + 1; j < n; ++j)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> sum -= a[i * n + j] * b[j];</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> b[i] = sum / a[i * n + i];</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> }</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">double</span> filter::Filter::getCentreWavelength(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class="keyword">const</span> std::string& interpolationType, <span class="keywordtype">double</span> delta, <span class="keywordtype"> [...]
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> { </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> assert(srf.size()==2);<span class="comment">//[0]: wavelength, [1]: response function</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordtype">int</span> nband=srf[0].size(); </div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordtype">double</span> start=floor(wavelengthIn[0]);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">double</span> end=ceil(wavelengthIn.back());</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> std::cout << <span class="stringliteral">"wavelengths in ["</span> << start << <span class="stringliteral">","</span> << end << <span class="stringliteral">"]"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> stat.allocAcc(acc);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> gsl_spline *spline;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> stat.getSpline(interpolationType,nband,spline);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> stat.initSpline(spline,&(srf[0][0]),&(srf[1][0]),nband);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> std::cout << <span class="stringliteral">"calculating norm of srf"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> norm=gsl_spline_eval_integ(spline,srf[0].front(),srf[0].back(),acc);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> std::cout << <span class="stringliteral">"norm of srf: "</span> << norm << std::endl << std::flush;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> gsl_interp_accel_free(acc); </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> std::cout << <span class="stringliteral">"interpolate wavelengths to "</span> << wavelength_fine.size() << <span class="stringliteral">" entries "</span> << std::endl;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> std::vector<double> srf_fine;<span class="comment">//spectral response function, interpolated for wavelength_fine</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> stat.interpolateUp(srf[0],srf[1],wavelength_fine,interpolationType,srf_fine,verbose);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> assert(srf_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> gsl_interp_accel *accOut;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> stat.allocAcc(accOut);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> gsl_spline *splineOut;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> stat.getSpline(interpolationType,wavelength_fine.size(),splineOut);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> assert(splineOut);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> std::vector<double> wavelengthOut(wavelength_fine.size());</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<wavelengthOut.size();++iband)</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> wavelengthOut[iband]=wavelength_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(wavelengthOut[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordtype">double</span> centreWavelength=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> gsl_spline_free(splineOut);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> gsl_interp_accel_free(accOut);</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">return</span>(centreWavelength);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> }</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment">// void filter::Filter::applyFwhm(const vector<double> &wavelengthIn, const ImgReaderGdal& input, const vector<double> &wavelengthOut, const vector<double> &fwhm, const std::string& interpolationType, ImgWriterGdal& output, bool verbose){</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">// Vector2d<double> lineInput(input.nrOfBand(),input.nrOfCol());</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment">// Vector2d<double> lineOutput(wavelengthOut.size(),input.nrOfCol());</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="comment">// for(int y=0;y<input.nrOfRow();++y){</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">// for(int iband=0;iband<input.nrOfBand();++iband)</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="comment">// input.readData(lineInput[iband],GDT_Float64,y,iband);</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment">// applyFwhm<double>(wavelengthIn,lineInput,wavelengthOut,fwhm, interpolationType, lineOutput, verbose);</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="comment">// for(int iband=0;iband<output.nrOfBand();++iband){</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="comment">// output.writeData(lineOutput[iband],GDT_Float64,y,iband);</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// catch(string errorstring){</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="comment">// cerr << errorstring << "in band " << iband << ", line " << y << endl;</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="comment">// progress=(1.0+y)/output.nrOfRow();</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="comment">// void filter::Filter::applySrf(const vector<double> &wavelengthIn, const ImgReaderGdal& input, const vector< Vector2d<double> > &srf, const std::string& interpolationType, ImgWriterGdal& output, bool verbose){</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="comment">// assert(output.nrOfBand()==srf.size());</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="comment">// double centreWavelength=0;</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="comment">// Vector2d<double> lineInput(input.nrOfBand(),input.nrOfCol());</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment">// for(int y=0;y<input.nrOfRow();++y){</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment">// for(int iband=0;iband<input.nrOfBand();++iband)</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="comment">// input.readData(lineInput[iband],GDT_Float64,y,iband);</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// for(int isrf=0;isrf<srf.size();++isrf){</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment">// vector<double> lineOutput(input.nrOfCol());</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment">// centreWavelength=applySrf<double>(wavelengthIn,lineInput,srf[isrf], interpolationType, lineOutput, verbose);</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="comment">// for(int iband=0;iband<output.nrOfBand();++iband){</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="comment">// output.writeData(lineOutput,GDT_Float64,y,isrf);</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="comment">// catch(string errorstring){</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="comment">// cerr << errorstring << "in band " << iband << ", line " << y << endl;</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="comment">// progress=(1.0+y)/output.nrOfRow();</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="comment">// }</span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Filter_8h_source.html b/doc/html/Filter_8h_source.html
new file mode 100644
index 0000000..149cb6c
--- /dev/null
+++ b/doc/html/Filter_8h_source.html
@@ -0,0 +1,919 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Filter.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Filter.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Filter.h: class for filtering</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _MYFILTER_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _MYFILTER_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <gsl/gsl_sort.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <gsl/gsl_wavelet.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "StatFactory.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span>filter</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">enum</span> FILTER_TYPE { median=0, var=1 , min=2, max=3, sum=4, mean=5, minmax=6, dilate=7, erode=8, close=9, open=10, homog=11, sobelx=12, sobely=13, sobelxy=14, sobelyx=-14, smooth=15, density=16, mode=17, mixed=18, smoothnodata=19, threshold=20, ismin=21, ismax=22, heterog=23, order=24, stdev=25, dwt=26, dwti=27, dwt_cut=28, dwt_cut_from=29, savgolay=30, percentile=31};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">enum</span> PADDING { symmetric=0, replicate=1, circular=2, zero=3};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classfilter_1_1Filter.html"> 40</a></span> <span class="keyword">class </span><a class="code" href="classfilter_1_1Filter.html">Filter</a></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classfilter_1_1Filter.html">Filter</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="classfilter_1_1Filter.html">Filter</a>(<span class="keyword">const</span> std::vector<double> &taps);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> ~<a class="code" href="classfilter_1_1Filter.html">Filter</a>(){};</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> setPadding(<span class="keyword">const</span> std::string& padString){</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> m_padding=padString;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <span class="keyword">const</span> gsl_wavelet_type* getWaveletType(<span class="keyword">const</span> std::string waveletType){</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"daubechies"</span>) <span class="keywordflow">return</span>(gsl_wavelet_daubechies);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"daubechies_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_daubechies_centered);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"haar"</span>) <span class="keywordflow">return</span>(gsl_wavelet_haar);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"haar_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_haar_centered);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"bspline"</span>) <span class="keywordflow">return</span>(gsl_wavelet_bspline);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"bspline_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_bspline_centered);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">static</span> FILTER_TYPE getFilterType(<span class="keyword">const</span> std::string filterType){</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> std::map<std::string, FILTER_TYPE> m_filterMap;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> initFilterMap(m_filterMap);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> m_filterMap[filterType];</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> };</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> setTaps(<span class="keyword">const</span> std::vector<double> &taps, <span class="keywordtype">bool</span> normalize=<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> pushClass(<span class="keywordtype">short</span> theClass=1){m_class.push_back(theClass);};</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> pushMask(<span class="keywordtype">short</span> theMask=0){m_mask.push_back(theMask);};</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">int</span> pushNoDataValue(<span class="keywordtype">double</span> noDataValue=0);<span class="comment">//{m_mask.push_back(theMask);};</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> pushThreshold(<span class="keywordtype">double</span> theThreshold){m_threshold.push_back(theThreshold);};</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> setThresholds(<span class="keyword">const</span> std::vector<double>& theThresholds){m_threshold=theThresholds;};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> smoothNoData(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::string& interpolationType, std::vector<T>& output);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> smooth(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">//template<class T> void morphology(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim, bool verbose=false);</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> morphology(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">short</span> verbose=0);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> stat(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> getSavGolayCoefficients(std::vector<double> &c, <span class="keywordtype">int</span> np, <span class="keywordtype">int</span> nl, <span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> ld, <span class="keywordtype">int</span> m);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> ludcmp(std::vector<double> &a, std::vector<int> &indx, <span class="keywordtype">double</span> &d);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> lubksb(std::vector<double> &a, std::vector<int> &indx, std::vector<double> &b);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">/* void savgolay(const ImgReaderGdal& input, ImgWriterGdal& output, int np, int nl, int nr, int m); */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> smoothNoData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <span class="keyword">const</span> std::string& interpolationType, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">double</span> getCentreWavelength(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class="keyword">const</span> std::string& interpolationType, <span class="keywordtype">double</span> delta=1.0, <span class="keywordtype">bool</span [...]
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class="keywor [...]
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<d [...]
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span class="keyword">const</span> std::vector<dou [...]
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span clas [...]
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> dwtForward(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">void</span> dwtInverse(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> dwtCut(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> dwtForward(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> dwtInverse(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> dwtCut(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> dwtCutFrom(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">int</span> band);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initFilterMap(std::map<std::string, FILTER_TYPE>& m_filterMap){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//initialize Map</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> m_filterMap[<span class="stringliteral">"dwt"</span>]=filter::dwt;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> m_filterMap[<span class="stringliteral">"dwti"</span>]=filter::dwti;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> m_filterMap[<span class="stringliteral">"dwt_cut"</span>]=filter::dwt_cut;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> m_filterMap[<span class="stringliteral">"dwt_cut_from"</span>]=filter::dwt_cut_from;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> m_filterMap[<span class="stringliteral">"stdev"</span>]=filter::stdev;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> m_filterMap[<span class="stringliteral">"var"</span>]=filter::var;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> m_filterMap[<span class="stringliteral">"min"</span>]=filter::min;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> m_filterMap[<span class="stringliteral">"max"</span>]=filter::max;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> m_filterMap[<span class="stringliteral">"sum"</span>]=filter::sum;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> m_filterMap[<span class="stringliteral">"mean"</span>]=filter::mean;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> m_filterMap[<span class="stringliteral">"minmax"</span>]=filter::minmax;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> m_filterMap[<span class="stringliteral">"dilate"</span>]=filter::dilate;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> m_filterMap[<span class="stringliteral">"erode"</span>]=filter::erode;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> m_filterMap[<span class="stringliteral">"close"</span>]=filter::close;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> m_filterMap[<span class="stringliteral">"open"</span>]=filter::open;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> m_filterMap[<span class="stringliteral">"homog"</span>]=filter::homog;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> m_filterMap[<span class="stringliteral">"sobelx"</span>]=filter::sobelx;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> m_filterMap[<span class="stringliteral">"sobely"</span>]=filter::sobely;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> m_filterMap[<span class="stringliteral">"sobelxy"</span>]=filter::sobelxy;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> m_filterMap[<span class="stringliteral">"sobelyx"</span>]=filter::sobelyx;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> m_filterMap[<span class="stringliteral">"smooth"</span>]=filter::smooth;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> m_filterMap[<span class="stringliteral">"density"</span>]=filter::density;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> m_filterMap[<span class="stringliteral">"mode"</span>]=filter::mode;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> m_filterMap[<span class="stringliteral">"mixed"</span>]=filter::mixed;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> m_filterMap[<span class="stringliteral">"smoothnodata"</span>]=filter::smoothnodata;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> m_filterMap[<span class="stringliteral">"threshold"</span>]=filter::threshold;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> m_filterMap[<span class="stringliteral">"ismin"</span>]=filter::ismin;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> m_filterMap[<span class="stringliteral">"ismax"</span>]=filter::ismax;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> m_filterMap[<span class="stringliteral">"heterog"</span>]=filter::heterog;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> m_filterMap[<span class="stringliteral">"order"</span>]=filter::order;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> m_filterMap[<span class="stringliteral">"median"</span>]=filter::median;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> m_filterMap[<span class="stringliteral">"savgolay"</span>]=filter::savgolay;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> m_filterMap[<span class="stringliteral">"percentile"</span>]=filter::percentile;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> PADDING getPadding(<span class="keyword">const</span> std::string& padString){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> std::map<std::string, PADDING> padMap;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> padMap[<span class="stringliteral">"zero"</span>]=filter::zero;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> padMap[<span class="stringliteral">"symmetric"</span>]=filter::symmetric;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> padMap[<span class="stringliteral">"replicate"</span>]=filter::replicate;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> padMap[<span class="stringliteral">"circular"</span>]=filter::circular;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span>(padMap[padString]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> };</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> std::vector<double> m_taps;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> std::vector<short> m_class;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> std::vector<short> m_mask;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> std::string m_padding;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> std::vector<double> m_noDataValues;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> std::vector<double> m_threshold;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> };</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">//input[band], output</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">//returns wavelength for which srf is maximum</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> Filter::applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class [...]
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> { </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> assert(srf.size()==2);<span class="comment">//[0]: wavelength, [1]: response function</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">int</span> nband=srf[0].size(); </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">double</span> start=floor(wavelengthIn[0]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">double</span> end=ceil(wavelengthIn.back());</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> std::cout << <span class="stringliteral">"wavelengths in ["</span> << start << <span class="stringliteral">","</span> << end << <span class="stringliteral">"]"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> stat.allocAcc(acc);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> gsl_spline *spline;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> stat.getSpline(interpolationType,nband,spline);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> stat.initSpline(spline,&(srf[0][0]),&(srf[1][0]),nband);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> std::cout << <span class="stringliteral">"calculating norm of srf"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> norm=gsl_spline_eval_integ(spline,srf[0].front(),srf[0].back(),acc);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> std::cout << <span class="stringliteral">"norm of srf: "</span> << norm << std::endl << std::flush;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> gsl_interp_accel_free(acc); </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">//interpolate input and srf to delta</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::cout << <span class="stringliteral">"interpolate wavelengths to "</span> << wavelength_fine.size() << <span class="stringliteral">" entries "</span> << std::endl;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> std::vector<double> srf_fine;<span class="comment">//spectral response function, interpolated for wavelength_fine</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> stat.interpolateUp(srf[0],srf[1],wavelength_fine,interpolationType,srf_fine,verbose);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> assert(srf_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gsl_interp_accel *accOut;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> stat.allocAcc(accOut);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> gsl_spline *splineOut;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> stat.getSpline(interpolationType,wavelength_fine.size(),splineOut);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> assert(splineOut);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> assert(wavelengthIn.size()==input.size());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> std::vector<double> product(wavelength_fine.size());</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> std::vector<double> wavelengthOut(wavelength_fine.size());</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> stat.interpolateUp(wavelengthIn,input,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> std::cout << <span class="stringliteral">"input_fine.size(): "</span> << input_fine.size() << std::endl;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input_fine.size();++iband){</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> product[iband]=input_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> wavelengthOut[iband]=wavelength_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> assert(input_fine.size()==srf_fine.size());</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> assert(input_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(product[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span>(normalize)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> output=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> output=gsl_spline_eval_integ(splineOut,start,end,accOut);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(wavelengthOut[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">double</span> centreWavelength=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gsl_spline_free(splineOut);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> gsl_interp_accel_free(accOut);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">return</span>(centreWavelength);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">//input[band][sample], output[sample] (if !transposeInput)</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">//returns wavelength for which srf is maximum</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> Filter::applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vecto [...]
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> { </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> assert(srf.size()==2);<span class="comment">//[0]: wavelength, [1]: response function</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordtype">int</span> nband=srf[0].size(); </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nsample=(transposeInput)? input.size():input[0].size();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> output.resize((nsample+down-1)/down);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">double</span> start=floor(wavelengthIn[0]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordtype">double</span> end=ceil(wavelengthIn.back());</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> std::cout << <span class="stringliteral">"wavelengths in ["</span> << start << <span class="stringliteral">","</span> << end << <span class="stringliteral">"]"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> stat.allocAcc(acc);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> gsl_spline *spline;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> stat.getSpline(interpolationType,nband,spline);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> stat.initSpline(spline,&(srf[0][0]),&(srf[1][0]),nband);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> std::cout << <span class="stringliteral">"calculating norm of srf"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> norm=gsl_spline_eval_integ(spline,srf[0].front(),srf[0].back(),acc);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> std::cout << <span class="stringliteral">"norm of srf: "</span> << norm << std::endl << std::flush;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> gsl_interp_accel_free(acc); </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">//interpolate input and srf to delta</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> std::cout << <span class="stringliteral">"interpolate wavelengths to "</span> << wavelength_fine.size() << <span class="stringliteral">" entries "</span> << std::endl;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> std::vector<double> srf_fine;<span class="comment">//spectral response function, interpolated for wavelength_fine</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> stat.interpolateUp(srf[0],srf[1],wavelength_fine,interpolationType,srf_fine,verbose);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> assert(srf_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> gsl_interp_accel *accOut;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> stat.allocAcc(accOut);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> gsl_spline *splineOut;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> stat.getSpline(interpolationType,wavelength_fine.size(),splineOut);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> assert(splineOut);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> std::vector<double> wavelengthOut;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">double</span> centreWavelength=0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nsample;++isample){</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span>((isample+1+down/2)%down)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::vector<T> inputValues;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(transposeInput)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> inputValues=input[isample];</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> input.selectCol(isample,inputValues);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> assert(wavelengthIn.size()==inputValues.size());</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> std::vector<double> product(wavelength_fine.size());</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> stat.interpolateUp(wavelengthIn,inputValues,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input_fine.size();++iband){</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> product[iband]=input_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span>(wavelengthOut.size()<input_fine.size())</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> wavelengthOut.push_back(wavelength_fine[iband]*srf_fine[iband]);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> assert(input_fine.size()==srf_fine.size());</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> assert(input_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(product[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(normalize)</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> output[isample/down]=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> output[isample/down]=gsl_spline_eval_integ(splineOut,start,end,accOut);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(wavelengthOut[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(centreWavelength>0);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> centreWavelength=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> gsl_spline_free(splineOut);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> gsl_interp_accel_free(accOut);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">return</span>(centreWavelength);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span class="keyword">const</span> std::vector& [...]
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">double</span> delta=1;<span class="comment">//1 nm resolution</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> std::vector<double> stddev(fwhm.size());</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<fwhm.size();++index)</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> stddev[index]=fwhm[index]/2.0/sqrt(2*log(2.0));<span class="comment">//http://mathworld.wolfram.com/FullWidthatHalfMaximum.html</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> assert(wavelengthOut.size()==fwhm.size());</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> assert(wavelengthIn.size()==input.size());</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> assert(wavelengthIn[0]<=wavelengthOut[0]);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> assert(wavelengthIn.back()>=wavelengthOut.back());</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<wavelength_fine.size();++index)</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> std::cout << <span class="stringliteral">" "</span> << wavelength_fine[index];</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> std::cout << <span class="stringliteral">"interpolate input wavelength to "</span> << delta << <span class="stringliteral">" nm resolution (size="</span> << wavelength_fine.size() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> stat.interpolateUp(wavelengthIn,input,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordtype">int</span> nbandIn=wavelength_fine.size();</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">int</span> nbandOut=wavelengthOut.size();</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> output.resize(nbandOut);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tf(nbandIn,nbandOut);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// tf(indexIn,indexOut)=</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> tf[indexIn][indexOut]=</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> exp((wavelengthOut[indexOut]-wavelength_fine[indexIn])</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> *(wavelength_fine[indexIn]-wavelengthOut[indexOut])</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> /2.0/stddev[indexOut]</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> /stddev[indexOut]);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> tf[indexIn][indexOut]/=sqrt(2.0*M_PI);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> tf[indexIn][indexOut]/=stddev[indexOut];</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> norm+=tf[indexIn][indexOut];</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> output[indexOut]=0;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn)</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> output[indexOut]+=input_fine[indexIn]*tf[indexIn][indexOut]/norm;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">//input[inBand][sample], output[outBand][sample]</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <s [...]
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordtype">double</span> delta=1;<span class="comment">//1 nm resolution</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> std::vector<double> stddev(fwhm.size());</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<fwhm.size();++index)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> stddev[index]=fwhm[index]/2.0/sqrt(2*log(2.0));<span class="comment">//http://mathworld.wolfram.com/FullWidthatHalfMaximum.html</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> assert(wavelengthOut.size()==fwhm.size());</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> assert(wavelengthIn[0]<=wavelengthOut[0]);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> assert(wavelengthIn.back()>=wavelengthOut.back());</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<wavelength_fine.size();++index)</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> std::cout << <span class="stringliteral">" "</span> << wavelength_fine[index];</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> std::cout << <span class="stringliteral">"interpolate input wavelength to "</span> << delta << <span class="stringliteral">" nm resolution (size="</span> << wavelength_fine.size() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">int</span> nbandIn=wavelength_fine.size();</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">int</span> nbandOut=wavelengthOut.size();</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> output.resize(nbandOut,(input[0].size()+down-1)/down);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tf(nbandIn,nbandOut);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> std::vector<double> norm(nbandOut);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> norm[indexOut]=0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> tf[indexIn][indexOut]=</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> exp((wavelengthOut[indexOut]-wavelength_fine[indexIn])</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> *(wavelength_fine[indexIn]-wavelengthOut[indexOut])</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> /2.0/stddev[indexOut]</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> /stddev[indexOut]);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> tf[indexIn][indexOut]/=sqrt(2.0*M_PI);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> tf[indexIn][indexOut]/=stddev[indexOut];</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> norm[indexOut]+=tf[indexIn][indexOut];</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> }</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<input[0].size();++isample){</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>((isample+1+down/2)%down)</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> std::vector<T> inputValues;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> input.selectCol(isample,inputValues);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> assert(wavelengthIn.size()==inputValues.size());</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> stat.interpolateUp(wavelengthIn,inputValues,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> output[indexOut][(isample+down-1)/down]=0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> output[indexOut][(isample+down-1)/down]+=input_fine[indexIn]*tf[indexIn][indexOut]/norm[indexOut];</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::smooth(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">short</span> dim)</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> {</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> assert(dim>0);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> m_taps.resize(dim);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<dim;++itap)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> m_taps[itap]=1.0/dim;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> filter(input,output);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::smoothNoData(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::string& interpolationType, std::vector<T>& output)</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> {</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> stat.setNoDataValues(m_noDataValues);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> std::vector<double> abscis(input.size());</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<abscis.size();++i)</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> abscis[i]=i;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> stat.interpolateNoData(abscis,input,interpolationType,output);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output)</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> {</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> assert(input.size()>=m_taps.size());</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> output.resize(input.size());</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">//start: extend input by padding</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">for</span>(i=0;i<m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">//todo:introduce nodata?</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(i>=t)</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> output[i]+=m_taps[m_taps.size()/2-t]*input[0];</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> output[i]+=m_taps[m_taps.size()/2-t]*input[input.size()+i-t];</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> output[i]+=m_taps[m_taps.size()/2-t]*0;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> output[i]+=m_taps[m_taps.size()/2-t]*input[t-i];</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> }</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span>(i=m_taps.size()/2;i<input.size()-m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> T leaveOut=(*(m_taps.begin()))*input[i-m_taps.size()/2];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> T include=(m_taps.back())*input[i+m_taps.size()/2];</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> output[i]=0;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<m_taps.size();++t)</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> output[i]+=input[i-m_taps.size()/2+t]*m_taps[t];</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> }</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">//end: extend input by padding</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">for</span>(i=input.size()-m_taps.size()/2;i<input.size();++i){</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment">//todo:introduce nodata?</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment">//todo:introduce nodata?</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(i+t<input.size())</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> output[i]+=m_taps[m_taps.size()/2+t]*input.back();</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> output[i]+=m_taps[m_taps.size()/2+t]*input[t-1];</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> output[i]+=m_taps[m_taps.size()/2+t]*0;</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i-t];</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> }</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">//output[i]+=(m_taps[m_taps.size()/2+t]+m_taps[m_taps.size()/2-t])*input[i-t];</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">//todo: filling statBuffer can be optimized (no need to clear and fill entire buffer, just push back new value...)</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim)</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> assert(dim);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> output.resize(input.size());</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> stat.setNoDataValues(m_noDataValues);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> std::vector<T> statBuffer;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordtype">short</span> binValue=0;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">//start: extend input by padding</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">for</span>(i=0;i<dim/2;++i){</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> binValue=0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> T theValue=input[i+t];</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> }</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span>(i>=t){</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> theValue=input[i-t];</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> }</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> theValue=input[0];</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> theValue=input[input.size()+i-t];</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> theValue=0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> theValue=input[t-i];</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> }</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">case</span>(filter::stdev):</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> output[i]=sqrt(stat.var(statBuffer));</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">case</span>(filter::percentile):</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">default</span>:{</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> ess << <span class="stringliteral">"method "</span> << method << <span class="stringliteral">" ("</span> << getFilterType(method) << <span class="stringliteral">") not supported"</span>;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> }</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> }</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> statBuffer.clear();</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">for</span>(i=dim/2;i<input.size()-dim/2;++i){</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> binValue=0;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<dim;++t){</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span>(input[i-dim/2+t]==m_class[iclass]){</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> }</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> statBuffer.push_back(input[i-dim/2+t]);</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> }</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">case</span>(filter::percentile):</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> }</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> statBuffer.clear();</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="comment">//end: extend input by padding</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">for</span>(i=input.size()-dim/2;i<input.size();++i){</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> binValue=0;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> }</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> T theValue=input[i-t];</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> }</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">if</span>(i+t<input.size())</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> theValue=input[i+t];</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> theValue=input.back();</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> theValue=input[t-1];</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> theValue=0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> theValue=input[i-t];</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> }</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">case</span>(filter::percentile):</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> assert(m_threshold.size());</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> }</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> }</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::smooth(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output, <span class="keywordtype">short</span> dim)</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> {</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> assert(dim>0);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> m_taps.resize(dim);</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<dim;++itap)</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> m_taps[itap]=1.0/dim;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> filter(input,output);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> }</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> {</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> assert(inputSize>=m_taps.size());</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> output.resize(inputSize);</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment">//start: extend input by padding</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">for</span>(i=0;i<m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span>(i>=t)</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> output[i]+=m_taps[m_taps.size()/2-t]*input[0];</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> output[i]+=m_taps[m_taps.size()/2-t]*input[input.size()+i-t];</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> output[i]+=m_taps[m_taps.size()/2-t]*0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> output[i]+=m_taps[m_taps.size()/2-t]*input[t-i];</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> }</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">for</span>(i=m_taps.size()/2;i<input.size()-m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> T leaveOut=(*(m_taps.begin()))*input[i-m_taps.size()/2];</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> T include=(m_taps.back())*input[i+m_taps.size()/2];</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> output[i]=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<m_taps.size();++t)</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> output[i]+=input[i-m_taps.size()/2+t]*m_taps[t];</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="comment">//end: extend input by padding</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">for</span>(i=input.size()-m_taps.size()/2;i<input.size();++i){</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">if</span>(i+t<input.size())</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> output[i]+=m_taps[m_taps.size()/2+t]*input.back();</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> output[i]+=m_taps[m_taps.size()/2+t]*input[t-1];</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">case</span>(zero):</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> output[i]+=m_taps[m_taps.size()/2+t]*0;</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i-t];</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> }</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> }</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> }</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> }</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> }</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> }</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="preprocessor">#endif </span><span class="comment">/* _MYFILTER_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classfilter_1_1Filter_html"><div class="ttname"><a href="classfilter_1_1Filter.html">filter::Filter</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter_8h_source.html#l00040">Filter.h:40</a></div></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Filter__old_8h_source.html b/doc/html/Filter__old_8h_source.html
new file mode 100644
index 0000000..c0f4bf5
--- /dev/null
+++ b/doc/html/Filter__old_8h_source.html
@@ -0,0 +1,982 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/Filter_old.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Filter_old.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Filter.h: class for filtering</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _MYFILTER_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _MYFILTER_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <gsl/gsl_sort.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <gsl/gsl_wavelet.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "StatFactory.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span>filter</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">enum</span> FILTER_TYPE { median=0, var=1 , min=2, max=3, sum=4, mean=5, minmax=6, dilate=7, erode=8, close=9, open=10, homog=11, sobelx=12, sobely=13, sobelxy=14, sobelyx=-14, smooth=15, density=16, majority=17, mixed=18, smoothnodata=19, threshold=20, ismin=21, ismax=22, heterog=23, order=24, stdev=25, dwt=26, dwti=27, dwt_cut=28, dwt_cut_from=29};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">enum</span> PADDING { symmetric=0, replicate=1, circular=2, constant=3};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">class </span>Filter</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> Filter(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> Filter(<span class="keyword">const</span> std::vector<double> &taps);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">virtual</span> ~Filter(){};</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> PADDING getPadding(<span class="keyword">const</span> std::string& padString){</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> std::map<std::string, PADDING> padMap;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> padMap[<span class="stringliteral">"constant"</span>]=filter::constant;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> padMap[<span class="stringliteral">"symmetric"</span>]=filter::symmetric;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> padMap[<span class="stringliteral">"replicate"</span>]=filter::replicate;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> padMap[<span class="stringliteral">"circular"</span>]=filter::circular;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span>(padMap[padString]);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">static</span> <span class="keyword">const</span> gsl_wavelet_type* getWaveletType(<span class="keyword">const</span> std::string waveletType){</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"daubechies"</span>) <span class="keywordflow">return</span>(gsl_wavelet_daubechies);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"daubechies_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_daubechies_centered);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"haar"</span>) <span class="keywordflow">return</span>(gsl_wavelet_haar);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"haar_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_haar_centered);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"bspline"</span>) <span class="keywordflow">return</span>(gsl_wavelet_bspline);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span>(waveletType==<span class="stringliteral">"bspline_centered"</span>) <span class="keywordflow">return</span>(gsl_wavelet_bspline_centered);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">static</span> FILTER_TYPE getFilterType(<span class="keyword">const</span> std::string filterType){</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> std::map<std::string, FILTER_TYPE> m_filterMap;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> initFilterMap(m_filterMap);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> m_filterMap[filterType];</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> };</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> setTaps(<span class="keyword">const</span> std::vector<double> &taps, <span class="keywordtype">bool</span> normalize=<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> pushClass(<span class="keywordtype">short</span> theClass=1){m_class.push_back(theClass);};</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> pushMask(<span class="keywordtype">short</span> theMask=0){m_mask.push_back(theMask);};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> filter(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> smooth(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> morphology(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</sp [...]
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> morphology(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">short</span> verbose=0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> stat(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> filter(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> smooth(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keywordtype">short</span> dim);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">double</span> getCentreWavelength(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class="keyword">const</span> std::string& interpolationType, <span class="keywordtype">double</span> delta=1.0, <span class="keywordtype">bool</span [...]
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class="keywor [...]
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<d [...]
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span class="keyword">const</span> std::vector<dou [...]
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span clas [...]
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">void</span> dwtForward(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">void</span> dwtInverse(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> dwtCut(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> dwtForward(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> dwtInverse(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">void</span> dwtCut(std::vector<double>& data, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">double</span> cut);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> dwtCutFrom(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& input, <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>& output, <span class="keyword">const</span> std::string& wavelet_type, <span class="keywordtype">int</span> family, <span class="keywordtype">int</span> band);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initFilterMap(std::map<std::string, FILTER_TYPE>& m_filterMap){</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">//initialize Map</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> m_filterMap[<span class="stringliteral">"dwt"</span>]=filter::dwt;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> m_filterMap[<span class="stringliteral">"dwti"</span>]=filter::dwti;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> m_filterMap[<span class="stringliteral">"dwt_cut"</span>]=filter::dwt_cut;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> m_filterMap[<span class="stringliteral">"dwt_cut_from"</span>]=filter::dwt_cut_from;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> m_filterMap[<span class="stringliteral">"stdev"</span>]=filter::stdev;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> m_filterMap[<span class="stringliteral">"var"</span>]=filter::var;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> m_filterMap[<span class="stringliteral">"min"</span>]=filter::min;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> m_filterMap[<span class="stringliteral">"max"</span>]=filter::max;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> m_filterMap[<span class="stringliteral">"sum"</span>]=filter::sum;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> m_filterMap[<span class="stringliteral">"mean"</span>]=filter::mean;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> m_filterMap[<span class="stringliteral">"minmax"</span>]=filter::minmax;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> m_filterMap[<span class="stringliteral">"dilate"</span>]=filter::dilate;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> m_filterMap[<span class="stringliteral">"erode"</span>]=filter::erode;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> m_filterMap[<span class="stringliteral">"close"</span>]=filter::close;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> m_filterMap[<span class="stringliteral">"open"</span>]=filter::open;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> m_filterMap[<span class="stringliteral">"homog"</span>]=filter::homog;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> m_filterMap[<span class="stringliteral">"sobelx"</span>]=filter::sobelx;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> m_filterMap[<span class="stringliteral">"sobely"</span>]=filter::sobely;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> m_filterMap[<span class="stringliteral">"sobelxy"</span>]=filter::sobelxy;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> m_filterMap[<span class="stringliteral">"sobelyx"</span>]=filter::sobelyx;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> m_filterMap[<span class="stringliteral">"smooth"</span>]=filter::smooth;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> m_filterMap[<span class="stringliteral">"density"</span>]=filter::density;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> m_filterMap[<span class="stringliteral">"majority"</span>]=filter::majority;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> m_filterMap[<span class="stringliteral">"mixed"</span>]=filter::mixed;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> m_filterMap[<span class="stringliteral">"smoothnodata"</span>]=filter::smoothnodata;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> m_filterMap[<span class="stringliteral">"threshold"</span>]=filter::threshold;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> m_filterMap[<span class="stringliteral">"ismin"</span>]=filter::ismin;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> m_filterMap[<span class="stringliteral">"ismax"</span>]=filter::ismax;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> m_filterMap[<span class="stringliteral">"heterog"</span>]=filter::heterog;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> m_filterMap[<span class="stringliteral">"order"</span>]=filter::order;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> m_filterMap[<span class="stringliteral">"median"</span>]=filter::median;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> std::vector<double> m_taps;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> std::vector<short> m_class;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> std::vector<short> m_mask;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> std::string m_padding;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> };</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">//input[band], output</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">//returns wavelength for which srf is maximum</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> Filter::applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<double></a>& srf, <span class [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> { </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> assert(srf.size()==2);<span class="comment">//[0]: wavelength, [1]: response function</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">int</span> nband=srf[0].size(); </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">double</span> start=floor(wavelengthIn[0]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">double</span> end=ceil(wavelengthIn.back());</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> std::cout << <span class="stringliteral">"wavelengths in ["</span> << start << <span class="stringliteral">","</span> << end << <span class="stringliteral">"]"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> stat.allocAcc(acc);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> gsl_spline *spline;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> stat.getSpline(interpolationType,nband,spline);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> stat.initSpline(spline,&(srf[0][0]),&(srf[1][0]),nband);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::cout << <span class="stringliteral">"calculating norm of srf"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> norm=gsl_spline_eval_integ(spline,srf[0].front(),srf[0].back(),acc);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::cout << <span class="stringliteral">"norm of srf: "</span> << norm << std::endl << std::flush;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> gsl_interp_accel_free(acc); </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">//interpolate input and srf to delta</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> std::cout << <span class="stringliteral">"interpolate wavelengths to "</span> << wavelength_fine.size() << <span class="stringliteral">" entries "</span> << std::endl;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> std::vector<double> srf_fine;<span class="comment">//spectral response function, interpolated for wavelength_fine</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> stat.interpolateUp(srf[0],srf[1],wavelength_fine,interpolationType,srf_fine,verbose);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> assert(srf_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> gsl_interp_accel *accOut;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> stat.allocAcc(accOut);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> gsl_spline *splineOut;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> stat.getSpline(interpolationType,wavelength_fine.size(),splineOut);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> assert(splineOut);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> assert(wavelengthIn.size()==input.size());</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> std::vector<double> product(wavelength_fine.size());</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> std::vector<double> wavelengthOut(wavelength_fine.size());</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> stat.interpolateUp(wavelengthIn,input,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::cout << <span class="stringliteral">"input_fine.size(): "</span> << input_fine.size() << std::endl;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input_fine.size();++iband){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> product[iband]=input_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> wavelengthOut[iband]=wavelength_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> assert(input_fine.size()==srf_fine.size());</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> assert(input_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(product[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(normalize)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> output=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> output=gsl_spline_eval_integ(splineOut,start,end,accOut);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(wavelengthOut[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">double</span> centreWavelength=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> gsl_spline_free(splineOut);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> gsl_interp_accel_free(accOut);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// double maxResponse=0;</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">// int maxIndex=0;</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">// for(int index=0;index<srf[1].size();++index){</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// if(maxResponse<srf[1][index]){</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// maxResponse=srf[1][index];</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment">// maxIndex=index;</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// return(srf[0][maxIndex]);</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span>(centreWavelength);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">//input[band][sample], output[sample] (if !transposeInput)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">//returns wavelength for which srf is maximum</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> Filter::applySrf(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vecto [...]
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> { </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> assert(srf.size()==2);<span class="comment">//[0]: wavelength, [1]: response function</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">int</span> nband=srf[0].size(); </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nsample=(transposeInput)? input.size():input[0].size();</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> output.resize((nsample+down-1)/down);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">double</span> start=floor(wavelengthIn[0]);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordtype">double</span> end=ceil(wavelengthIn.back());</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> std::cout << <span class="stringliteral">"wavelengths in ["</span> << start << <span class="stringliteral">","</span> << end << <span class="stringliteral">"]"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> stat.allocAcc(acc);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> gsl_spline *spline;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> stat.getSpline(interpolationType,nband,spline);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> stat.initSpline(spline,&(srf[0][0]),&(srf[1][0]),nband);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> std::cout << <span class="stringliteral">"calculating norm of srf"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> norm=gsl_spline_eval_integ(spline,srf[0].front(),srf[0].back(),acc);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> std::cout << <span class="stringliteral">"norm of srf: "</span> << norm << std::endl << std::flush;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> gsl_interp_accel_free(acc); </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">//interpolate input and srf to delta</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> std::cout << <span class="stringliteral">"interpolate wavelengths to "</span> << wavelength_fine.size() << <span class="stringliteral">" entries "</span> << std::endl;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> std::vector<double> srf_fine;<span class="comment">//spectral response function, interpolated for wavelength_fine</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> stat.interpolateUp(srf[0],srf[1],wavelength_fine,interpolationType,srf_fine,verbose);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> assert(srf_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> gsl_interp_accel *accOut;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> stat.allocAcc(accOut);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> gsl_spline *splineOut;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> stat.getSpline(interpolationType,wavelength_fine.size(),splineOut);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> assert(splineOut);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> std::vector<double> wavelengthOut;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">double</span> centreWavelength=0;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nsample;++isample){</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span>((isample+1+down/2)%down)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> std::vector<T> inputValues;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span>(transposeInput)</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> inputValues=input[isample];</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> input.selectCol(isample,inputValues);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> assert(wavelengthIn.size()==inputValues.size());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> std::vector<double> product(wavelength_fine.size());</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> stat.interpolateUp(wavelengthIn,inputValues,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input_fine.size();++iband){</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> product[iband]=input_fine[iband]*srf_fine[iband];</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(wavelengthOut.size()<input_fine.size())</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> wavelengthOut.push_back(wavelength_fine[iband]*srf_fine[iband]);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> assert(input_fine.size()==srf_fine.size());</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> assert(input_fine.size()==wavelength_fine.size());</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(product[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(normalize)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> output[isample/down]=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> output[isample/down]=gsl_spline_eval_integ(splineOut,start,end,accOut);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> stat.initSpline(splineOut,&(wavelength_fine[0]),&(wavelengthOut[0]),wavelength_fine.size());</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(centreWavelength>0);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> centreWavelength=gsl_spline_eval_integ(splineOut,start,end,accOut)/norm;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> gsl_spline_free(splineOut);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> gsl_interp_accel_free(accOut);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// double maxResponse=0;</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// int maxIndex=0;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// for(int index=0;index<srf[1].size();++index){</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// if(maxResponse<srf[1][index]){</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// maxResponse=srf[1][index];</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// maxIndex=index;</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment">// return(srf[0][maxIndex]);</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">return</span>(centreWavelength);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <span class="keyword">const</span> std::vector& [...]
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">double</span> delta=1;<span class="comment">//1 nm resolution</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> std::vector<double> stddev(fwhm.size());</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<fwhm.size();++index)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> stddev[index]=fwhm[index]/2.0/sqrt(2*log(2.0));<span class="comment">//http://mathworld.wolfram.com/FullWidthatHalfMaximum.html</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> assert(wavelengthOut.size()==fwhm.size());</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> assert(wavelengthIn.size()==input.size());</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> assert(wavelengthIn[0]<=wavelengthOut[0]);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> assert(wavelengthIn.back()>=wavelengthOut.back());</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<wavelength_fine.size();++index)</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> std::cout << <span class="stringliteral">" "</span> << wavelength_fine[index];</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> std::cout << <span class="stringliteral">"interpolate input wavelength to "</span> << delta << <span class="stringliteral">" nm resolution (size="</span> << wavelength_fine.size() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> stat.interpolateUp(wavelengthIn,input,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordtype">int</span> nbandIn=wavelength_fine.size();</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordtype">int</span> nbandOut=wavelengthOut.size();</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> output.resize(nbandOut);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tf(nbandIn,nbandOut);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">// tf(indexIn,indexOut)=</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> tf[indexIn][indexOut]=</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> exp((wavelengthOut[indexOut]-wavelength_fine[indexIn])</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> *(wavelength_fine[indexIn]-wavelengthOut[indexOut])</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> /2.0/stddev[indexOut]</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> /stddev[indexOut]);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> tf[indexIn][indexOut]/=sqrt(2.0*M_PI);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> tf[indexIn][indexOut]/=stddev[indexOut];</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> norm+=tf[indexIn][indexOut];</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> }</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> output[indexOut]=0;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn)</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> output[indexOut]+=input_fine[indexIn]*tf[indexIn][indexOut]/norm;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">//input[inBand][sample], output[outBand][sample]</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::applyFwhm(<span class="keyword">const</span> std::vector<double> &wavelengthIn, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& input, <span class="keyword">const</span> std::vector<double> &wavelengthOut, <s [...]
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">double</span> delta=1;<span class="comment">//1 nm resolution</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> std::vector<double> stddev(fwhm.size());</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<fwhm.size();++index)</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> stddev[index]=fwhm[index]/2.0/sqrt(2*log(2.0));<span class="comment">//http://mathworld.wolfram.com/FullWidthatHalfMaximum.html</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> std::vector<double> wavelength_fine;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> win=floor(wavelengthIn[0]);win<=ceil(wavelengthIn.back());win+=delta)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> wavelength_fine.push_back(win);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> assert(wavelengthOut.size()==fwhm.size());</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> assert(wavelengthIn[0]<=wavelengthOut[0]);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> assert(wavelengthIn.back()>=wavelengthOut.back());</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<wavelength_fine.size();++index)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> std::cout << <span class="stringliteral">" "</span> << wavelength_fine[index];</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> std::cout << <span class="stringliteral">"interpolate input wavelength to "</span> << delta << <span class="stringliteral">" nm resolution (size="</span> << wavelength_fine.size() << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">int</span> nbandIn=wavelength_fine.size();</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">int</span> nbandOut=wavelengthOut.size();</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> output.resize(nbandOut,(input[0].size()+down-1)/down);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tf(nbandIn,nbandOut);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::vector<double> norm(nbandOut);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> norm[indexOut]=0;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> tf[indexIn][indexOut]=</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> exp((wavelengthOut[indexOut]-wavelength_fine[indexIn])</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> *(wavelength_fine[indexIn]-wavelengthOut[indexOut])</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> /2.0/stddev[indexOut]</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> /stddev[indexOut]);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> tf[indexIn][indexOut]/=sqrt(2.0*M_PI);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> tf[indexIn][indexOut]/=stddev[indexOut];</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> norm[indexOut]+=tf[indexIn][indexOut];</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<input[0].size();++isample){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">if</span>((isample+1+down/2)%down)</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> std::vector<T> inputValues;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> input.selectCol(isample,inputValues);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> assert(wavelengthIn.size()==inputValues.size());</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexOut=0;indexOut<nbandOut;++indexOut){</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> std::vector<double> input_fine;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> stat.interpolateUp(wavelengthIn,inputValues,wavelength_fine,interpolationType,input_fine,verbose);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> output[indexOut][(isample+down-1)/down]=0;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> indexIn=0;indexIn<nbandIn;++indexIn){</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> output[indexOut][(isample+down-1)/down]+=input_fine[indexIn]*tf[indexIn][indexOut]/norm[indexOut];</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::smooth(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">short</span> dim)</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> {</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> assert(dim>0);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> m_taps.resize(dim);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<dim;++itap)</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> m_taps[itap]=1.0/dim;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> filter(input,output);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> assert(input.size()>m_taps.size());</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> output.resize(input.size());</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">//start: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">for</span>(i=0;i<m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span>(i>=t)</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> output[i]+=m_taps[m_taps.size()/2-t]*input[0];</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> output[i]+=m_taps[m_taps.size()/2-t]*input[input.size()+i-t];</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">case</span>(constant):</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> output[i]+=m_taps[m_taps.size()/2-t]*0;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> output[i]+=m_taps[m_taps.size()/2-t]*input[t-i];</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment">//output[i]+=(m_taps[m_taps.size()/2+t]+m_taps[m_taps.size()/2-t])*input[i+t];</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">for</span>(i=m_taps.size()/2;i<input.size()-m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> T leaveOut=(*(m_taps.begin()))*input[i-m_taps.size()/2];</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> T include=(m_taps.back())*input[i+m_taps.size()/2];</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> output[i]=0;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<m_taps.size();++t)</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> output[i]+=input[i-m_taps.size()/2+t]*m_taps[t];</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> }</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">//end: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span>(i=input.size()-m_taps.size()/2;i<input.size();++i){</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">//todo:introduce nodata</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t){</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> output[i]+=m_taps[m_taps.size()/2-t]*input[i-t];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">if</span>(i+t<input.size())</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i+t];</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> output[i]+=m_taps[m_taps.size()/2+t]*input.back();</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> output[i]+=m_taps[m_taps.size()/2+t]*input[t-1];</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">case</span>(constant):</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> output[i]+=m_taps[m_taps.size()/2+t]*0;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> output[i]+=m_taps[m_taps.size()/2+t]*input[i-t];</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">//output[i]+=(m_taps[m_taps.size()/2+t]+m_taps[m_taps.size()/2-t])*input[i-t];</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> assert(dim);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> output.resize(input.size());</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> std::vector<T> statBuffer;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordtype">short</span> binValue=0;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment">//start: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">for</span>(i=0;i<dim/2;++i){</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> binValue=0;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> }</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> T theValue=input[i+t];</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">if</span>(i>=t){</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> theValue=input[i-t];</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">case</span>(replicate):</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> theValue=input[0];</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">case</span>(circular):</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> theValue=input[input.size()+i-t];</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">case</span>(constant):</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> theValue=0;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">case</span>(symmetric):</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> theValue=input[t-i];</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> statBuffer.clear();</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">for</span>(i=dim/2;i<input.size()-dim/2;++i){</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> binValue=0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<dim;++t){</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(input[i-dim/2+t]==m_class[iclass]){</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> statBuffer.push_back(input[i-dim/2+t]);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> statBuffer.clear();</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">//end: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span>(i=input.size()-dim/2;i<input.size();++i){</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> binValue=0;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> T theValue=input[i-t];</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">if</span>(i+t<input.size())</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> theValue=input[i+t];</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">switch</span>(getPadding(m_padding)){</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> replicate:</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> theValue=input.back();</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> circular:</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> theValue=input[t-1];</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> constant:</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> theValue=0;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> symmetric:</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> theValue=input[i-t];</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> }</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">if</span>(theValue==m_class[iclass]){</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> }</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> statBuffer.push_back(theValue);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">case</span>(filter::median):</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> output[i]=stat.median(statBuffer);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">case</span>(filter::min):</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">case</span>(filter::max):</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">case</span>(filter::sum):</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> output[i]=sqrt(stat.sum(statBuffer));</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">case</span>(filter::var):</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> output[i]=stat.var(statBuffer);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">case</span>(filter::mean):</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> output[i]=stat.mean(statBuffer);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> }</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="comment">//todo: this function is redundant, can be incorporated within filter</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::morphology(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keyword">const</span> std::string& method, <span class="keywordtype">int</span> dim, <span class="keywordtype">bool</span> verbose)</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> {</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> assert(dim);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> output.resize((input.size());</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> std::vector<T> statBuffer;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordtype">short</span> binValue=0;</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment">//start: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">for</span>(i=0;i<dim/2;++i){</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> binValue=0;</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> binValue=0;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">if</span>(input[i+t]==m_class[iclass]){</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> }</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> }</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">if</span>(m_class.size()){</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> statBuffer.push_back(input[i+t]);</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> statBuffer.push_back(input[i+t]);</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> }</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> }</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">/* assert(statBuffer.size()==dim); */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> }</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> std::cout << <span class="stringliteral">"buffer: "</span>;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibuf=0;ibuf<statBuffer.size();++ibuf)</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> std::cout << statBuffer[ibuf] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> std::cout << <span class="stringliteral">"->"</span> << output[i] << std::endl;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> }</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> }</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> statBuffer.clear();</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">for</span>(i=dim/2;i<input.size()-dim/2;++i){</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> binValue=0;</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<dim;++t){</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">if</span>(input[i-dim/2+t]==m_class[iclass]){</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> }</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> statBuffer.push_back(input[i-dim/2+t]);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> }</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="comment">/* assert(statBuffer.size()==dim); */</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> std::cout << <span class="stringliteral">"buffer: "</span>;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibuf=0;ibuf<statBuffer.size();++ibuf)</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> std::cout << statBuffer[ibuf] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> std::cout << <span class="stringliteral">"->"</span> << output[i] << std::endl;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> statBuffer.clear();</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment">//end: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">for</span>(i=input.size()-dim/2;i<input.size();++i){</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> binValue=0;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordflow">if</span>(input[i]==m_class[iclass]){</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">if</span>(m_class.size())</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> statBuffer.push_back(input[i]);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=dim/2;++t){</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> binValue=0;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<m_class.size();++iclass){</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">if</span>(input[i-t]==m_class[iclass]){</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> binValue=m_class[0];</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> }</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> }</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">if</span>(m_class.size()){</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> statBuffer.push_back(binValue);</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> statBuffer.push_back(input[i-t]);</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> statBuffer.push_back(input[i-t]);</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> }</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> }</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> }</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">switch</span>(getFilterType(method)){</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">case</span>(filter::dilate):</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> output[i]=stat.mymax(statBuffer);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">case</span>(filter::erode):</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> output[i]=stat.mymin(statBuffer);</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> std::string errorString=<span class="stringliteral">"method not supported"</span>;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> }</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> std::cout << <span class="stringliteral">"buffer: "</span>;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibuf=0;ibuf<statBuffer.size();++ibuf)</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> std::cout << statBuffer[ibuf] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> std::cout << <span class="stringliteral">"->"</span> << output[i] << std::endl;</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> }</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> }</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> }</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::smooth(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output, <span class="keywordtype">short</span> dim)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> {</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> assert(dim>0);</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> m_taps.resize(dim);</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<dim;++itap)</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> m_taps[itap]=1.0/dim;</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> filter(input,output);</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> }</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> Filter::filter(T* input, <span class="keywordtype">int</span> inputSize, std::vector<T>& output)</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> {</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> output.resize((inputSize);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment">//start: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">for</span>(i=0;i<m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t)</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> output[i]+=(m_taps[m_taps.size()/2+t]+m_taps[m_taps.size()/2-t])*input[i+t];</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> }</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment">//main</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">for</span>(i=m_taps.size()/2;i<inputSize-m_taps.size()/2;++i){</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> T leaveOut=(*(m_taps.begin()))*input[i-m_taps.size()/2];</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> T include=(m_taps.back())*input[i+m_taps.size()/2];</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> output[i]=0;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<m_taps.size();++t)</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> output[i]+=input[i-m_taps.size()/2+t]*m_taps[t];</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment">//end: extend input with mirrored version of itself</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">for</span>(i=inputSize-m_taps.size()/2;i<inputSize;++i){</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> output[i]=m_taps[m_taps.size()/2]*input[i];</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=1;t<=m_taps.size()/2;++t)</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> output[i]+=(m_taps[m_taps.size()/2+t]+m_taps[m_taps.size()/2-t])*input[i-t];</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> }</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> }</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor">#endif </span><span class="comment">/* _MYFILTER_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgReaderGdal_8cc_source.html b/doc/html/ImgReaderGdal_8cc_source.html
new file mode 100644
index 0000000..f943d6a
--- /dev/null
+++ b/doc/html/ImgReaderGdal_8cc_source.html
@@ -0,0 +1,785 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgReaderGdal.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderGdal.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgReaderGdal.cc: class to read raster files using GDAL API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <gsl/gsl_cdf.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> ImgReaderGdal::ImgReaderGdal(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> : m_gds(NULL), m_ncol(0), m_nrow(0), m_nband(0)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {}</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> ImgReaderGdal::open(<span class="keyword">const</span> std::string& filename)<span class="comment">//, double magicX, double magicY)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> m_filename = filename;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> setCodec();<span class="comment">//magicX,magicY);</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ImgReaderGdal::~ImgReaderGdal(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">// delete m_gds;</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// GDALDumpOpenDatasets(stderr);</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// GDALDestroyDriverManager();//could be used by other objects...</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> ImgReaderGdal::close(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> GDALClose(m_gds);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> ImgReaderGdal::setCodec()<span class="comment">//double magicX, double magicY)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> GDALAllRegister();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> m_gds = (GDALDataset *) GDALOpen(m_filename.c_str(), GA_ReadOnly );</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span>(m_gds == NULL){</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> m_ncol= m_gds->GetRasterXSize();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> m_nrow= m_gds->GetRasterYSize();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> m_nband= m_gds->GetRasterCount();</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// m_isGeoRef=( static_cast<std::string>(m_gds->GetProjectionRef()) != "" );</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// m_magic_x=magicX;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// m_magic_y=magicY;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">double</span> adfGeoTransform[6];</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> m_gds->GetGeoTransform( adfGeoTransform );</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// if( m_gds->GetGeoTransform( adfGeoTransform ) == CE_None ){</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> m_gt[0]=adfGeoTransform[0];</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> m_gt[1]=adfGeoTransform[1];</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> m_gt[2]=adfGeoTransform[2];</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> m_gt[3]=adfGeoTransform[3];</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> m_gt[4]=adfGeoTransform[4];</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> m_gt[5]=adfGeoTransform[5];</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// m_gt[0]=0;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// m_gt[1]=1;</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// m_gt[2]=0;</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// m_gt[3]=0;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// m_gt[4]=0;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// m_gt[5]=1;</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> std::string ImgReaderGdal::getProjection(<span class="keywordtype">void</span>)<span class="keyword"> const </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> std::string theProjection=m_gds->GetProjectionRef();</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// size_t startpos,endpos;</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// while((startpos=theProjection.find(",AUTHORITY"))!=std::string::npos){</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// endpos=theProjection.find("]",startpos+1,1)+1;</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// theProjection.erase(startpos,endpos-startpos);</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> theProjection;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> std::string ImgReaderGdal::getProjectionRef(<span class="keywordtype">void</span>)<span class="keyword"> const </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> std::string theProjection;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span>(m_gds->GetProjectionRef())</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span>(m_gds->GetProjectionRef());</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> GDALDataType ImgReaderGdal::getDataType(<span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> assert(band<m_nband+1);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> (m_gds->GetRasterBand(band+1))->GetRasterDataType();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> GDALRasterBand* ImgReaderGdal::getRasterBand(<span class="keywordtype">int</span> band)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> assert(band<m_nband+1);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> (m_gds->GetRasterBand(band+1));</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> GDALColorTable* ImgReaderGdal::getColorTable(<span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> assert(band<m_nband+1);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> (m_gds->GetRasterBand(band+1))->GetColorTable();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> std::string ImgReaderGdal::getDriverDescription()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span> m_gds->GetDriver()->GetDescription();</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> ImgReaderGdal::getGeoTransform(<span class="keywordtype">double</span>* gt)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// void ImgReaderGdal::getGeoTransform(double& ulx, double& uly, double& deltaX, double& deltaY, double& rot1, double& rot2) const</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// double adfGeoTransform[6];// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// m_gds->GetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// ulx=adfGeoTransform[0];</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// deltaX=adfGeoTransform[1];</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// rot1=adfGeoTransform[2];</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// uly=adfGeoTransform[3];</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// rot2=adfGeoTransform[4];</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// deltaY=-adfGeoTransform[5];//convention of GDAL!</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> std::string ImgReaderGdal::getGeoTransform()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> std::ostringstream s;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> s << <span class="stringliteral">"["</span> << gt[0] << <span class="stringliteral">","</span> << gt[1] << <span class="stringliteral">","</span> << gt[2] << <span class="stringliteral">","</span> << gt[3] << <span class="stringliteral">","</span> << gt[4] << <span class="stringliteral">",& [...]
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span>(s.str());</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// if(!isGeoRef())</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// return("");</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// double adfGeoTransform[6];// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">// m_gds->GetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// double ulx=adfGeoTransform[0];</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// double deltaX=adfGeoTransform[1];</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// double rot1=adfGeoTransform[2];</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// double uly=adfGeoTransform[3];</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// double rot2=adfGeoTransform[4];</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// double deltaY=-adfGeoTransform[5];//convention of GDAL!</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// std::ostringstream s;</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// s << "[" << ulx << "," << deltaX << "," << rot1 << "," << uly << "," << rot2 << "," << -deltaY << "]";</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// return(s.str());</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">char</span>** ImgReaderGdal::getMetadata()</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(m_gds->GetMetadata()!=NULL)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span>(m_gds->GetMetadata());</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">return</span> (<span class="keywordtype">char</span>**)<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">char</span>** ImgReaderGdal::getMetadata()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>(m_gds->GetMetadata()!=NULL)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span>(m_gds->GetMetadata());</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">return</span> (<span class="keywordtype">char</span>**)<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">void</span> ImgReaderGdal::getMetadata(std::list<std::string>& metadata)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">char</span>** cmetadata=m_gds->GetMetadata();</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">while</span>(*cmetadata!=NULL){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> metadata.push_back(*(cmetadata));</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> ++cmetadata;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::string ImgReaderGdal::getDescription()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(m_gds->GetDriver()->GetDescription()!=NULL)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> m_gds->GetDriver()->GetDescription();</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> std::string ImgReaderGdal::getMetadataItem()<span class="keyword"> const </span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(m_gds->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME )!=NULL)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> m_gds->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME );</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> std::string ImgReaderGdal::getImageDescription()<span class="keyword"> const </span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(m_gds->GetDriver()->GetMetadataItem(<span class="stringliteral">"TIFFTAG_IMAGEDESCRIPTION"</span>)!=NULL)</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">return</span> m_gds->GetDriver()->GetMetadataItem(<span class="stringliteral">"TIFFTAG_IMAGEDESCRIPTION"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> std::string ImgReaderGdal::getInterleave()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(m_gds->GetMetadataItem( <span class="stringliteral">"INTERLEAVE"</span>, <span class="stringliteral">"IMAGE_STRUCTURE"</span>))</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">return</span> m_gds->GetMetadataItem( <span class="stringliteral">"INTERLEAVE"</span>, <span class="stringliteral">"IMAGE_STRUCTURE"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span>(<span class="stringliteral">"BAND"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> std::string ImgReaderGdal::getCompression()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(m_gds->GetMetadataItem( <span class="stringliteral">"COMPRESSION"</span>, <span class="stringliteral">"IMAGE_STRUCTURE"</span>))</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">return</span> m_gds->GetMetadataItem( <span class="stringliteral">"COMPRESSION"</span>, <span class="stringliteral">"IMAGE_STRUCTURE"</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span>(<span class="stringliteral">"NONE"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">bool</span> ImgReaderGdal::getBoundingBox(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> ulx=gt[0];</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> uly=gt[3];</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> lrx=gt[0]+nrOfCol()*gt[1]+nrOfRow()*gt[2];</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> lry=gt[3]+nrOfCol()*gt[4]+nrOfRow()*gt[5];</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// ulx=m_ulx;</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// uly=m_uly;</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// lrx=ulx+nrOfCol()*m_delta_x;</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// lry=uly-nrOfRow()*m_delta_y;</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// ulx=0;</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">// uly=nrOfRow()-1;</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// lrx=nrOfCol()-1;</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// lry=0;</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">bool</span> ImgReaderGdal::getCenterPos(<span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> x=gt[0]+(nrOfCol()/2.0)*gt[1]+(nrOfRow()/2.0)*gt[2];</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> y=gt[3]+(nrOfCol()/2.0)*gt[4]+(nrOfRow()/2.0)*gt[5];</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// x=m_ulx+(nrOfCol()/2.0)*m_delta_x;</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// y=m_uly-(nrOfRow()/2.0)*m_delta_y;</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// x=nrOfCol()/2.0;</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// y=nrOfRow()/2.0;</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">//i and j represent fraction of pixels, return true if image is georeferenced</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordtype">bool</span> ImgReaderGdal::geo2image(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span>& i, <span class="keywordtype">double</span>& j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">//double values are returned, caller is responsible for interpolation step</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">double</span> denom=(gt[1]-gt[2]*gt[4]/gt[5]);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">double</span> eps=0.00001;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(fabs(denom)>eps){</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> i=(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> j=(y-gt[3]-gt[4]*(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom)/gt[5];</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// double ulx=m_ulx;</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// double uly=m_uly;</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// i=(x-ulx)/m_delta_x;</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// j=(uly-y)/m_delta_y;</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">// i=x;</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">// j=nrOfRow()-y;</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">//x and y represent center of pixel, return true if image is georeferenced</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">bool</span> ImgReaderGdal::image2geo(<span class="keywordtype">double</span> i, <span class="keywordtype">double</span> j, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> x=gt[0]+(0.5+i)*gt[1]+(0.5+j)*gt[2];</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> y=gt[3]+(0.5+i)*gt[4]+(0.5+j)*gt[5];</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// x=m_ulx+(0.5+i)*m_delta_x;</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// y=m_uly-(0.5+j)*m_delta_y;</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">// x=0.5+i;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// y=nrOfRow()-(0.5+j);</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> }</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">bool</span> ImgReaderGdal::covers(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">return</span>((x > theULX)&&</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> (x < theLRX)&&</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> (y < theULY)&&</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> (y >theLRY));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">bool</span> ImgReaderGdal::covers(<span class="keywordtype">double</span> ulx, <span class="keywordtype">double</span> uly, <span class="keywordtype">double</span> lrx, <span class="keywordtype">double</span> lry)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">return</span>((ulx < theLRX)&&(lrx > theULX)&&(lry < theULY)&&(uly > theLRY));</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">double</span> ImgReaderGdal::getMin(<span class="keywordtype">int</span>& x, <span class="keywordtype">int</span>& y, <span class="keywordtype">int</span> band)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordtype">bool</span> init=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> readData(lineBuffer,GDT_Float64,irow,band);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">// bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(!isNoData(lineBuffer[icol])){</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">if</span>(!init){</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> y=irow;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> x=icol;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> init=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(minValue>lineBuffer[icol]){</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> y=irow;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> x=icol;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> }</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(init)</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">return</span> minValue;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">throw</span>(static_cast<std::string>(<span class="stringliteral">"Warning: not initialized"</span>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">double</span> ImgReaderGdal::getMax(<span class="keywordtype">int</span>& x, <span class="keywordtype">int</span>& y, <span class="keywordtype">int</span> band)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordtype">bool</span> init=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> readData(lineBuffer,GDT_Float64,irow,band);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">// bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">// if(valid){</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">if</span>(!isNoData(lineBuffer[icol])){</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span>(!init){</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> y=irow;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> x=icol;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> init=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(maxValue<lineBuffer[icol]){</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> y=irow;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> x=icol;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">if</span>(init)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span> maxValue;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">throw</span>(static_cast<std::string>(<span class="stringliteral">"Warning: not initialized"</span>));</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordtype">void</span> ImgReaderGdal::getMinMax(<span class="keywordtype">int</span> startCol, <span class="keywordtype">int</span> endCol, <span class="keywordtype">int</span> startRow, <span class="keywordtype">int</span> endRow, <span class="keywordtype">int</span> band, <span class="keywordtype">double</span>& minValue, <span class="keywordtype">double</span>& maxValue)<span class="ke [...]
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment">// GDALRasterBand *poBand;</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment">// int bGotMin, bGotMax;</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment">// double adfMinMax[2];</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">// poBand = m_gds->GetRasterBand(band+1);</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">// adfMinMax[0] = poBand->GetMinimum( &bGotMin );</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// adfMinMax[1] = poBand->GetMaximum( &bGotMax );</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// if( ! (bGotMin && bGotMax) )</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">// // GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">// minValue=adfMinMax[0];</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">// maxValue=adfMinMax[1];</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> std::vector<double> lineBuffer(endCol-startCol+1);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">bool</span> init=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> assert(endRow<nrOfRow());</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=startCol;irow<endRow+1;++irow){</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> readData(lineBuffer,GDT_Float64,startCol,endCol,irow,band);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<lineBuffer.size();++icol){</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(!isNoData(lineBuffer[icol])){</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">if</span>(!init){</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> init=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(minValue>lineBuffer[icol])</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">if</span>(maxValue<lineBuffer[icol])</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>(!init)</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">throw</span>(static_cast<std::string>(<span class="stringliteral">"Warning: not initialized"</span>));</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> }</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordtype">void</span> ImgReaderGdal::getMinMax(<span class="keywordtype">double</span>& minValue, <span class="keywordtype">double</span>& maxValue, <span class="keywordtype">int</span> band, <span class="keywordtype">bool</span> exhaustiveSearch)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span>(exhaustiveSearch){<span class="comment">//force exhaustive search</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordtype">bool</span> init=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> readData(lineBuffer,GDT_Float64,irow,band);</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">// if(valid){</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">if</span>(!isNoData(lineBuffer[icol])){</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(!init){</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> init=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> }</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span>(minValue>lineBuffer[icol])</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> minValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(maxValue<lineBuffer[icol])</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> maxValue=lineBuffer[icol];</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> }</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(!init)</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">throw</span>(static_cast<std::string>(<span class="stringliteral">"Warning: not initialized"</span>));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordtype">int</span> bGotMin, bGotMax;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordtype">double</span> adfMinMax[2];</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> poBand = m_gds->GetRasterBand(band+1);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> adfMinMax[0] = poBand->GetMinimum( &bGotMin );</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> adfMinMax[1] = poBand->GetMaximum( &bGotMax );</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span>( ! (bGotMin && bGotMax) )</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> minValue=adfMinMax[0];</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> maxValue=adfMinMax[1];</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span>(m_scale.size()>band){</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> minValue*=m_scale[band];</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> maxValue*=m_scale[band];</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span>(m_offset.size()>band){</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> minValue+=m_offset[band];</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> maxValue+=m_offset[band];</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordtype">double</span> ImgReaderGdal::getHistogram(std::vector<double>& histvector, <span class="keywordtype">double</span>& min, <span class="keywordtype">double</span>& max, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>& nbin, <span class="keywordtype">int</span> theBand, <span class="keywordtype">bool</span> kde){</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(min>=max)</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> getMinMax(minValue,maxValue,theBand);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> minValue=min;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> maxValue=max;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">if</span>(min<max&&min>minValue)</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> minValue=min;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span>(min<max&&max<maxValue)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> maxValue=max;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> min=minValue;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> max=maxValue;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span>(kde){</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">double</span> meanValue=0;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordtype">double</span> stdDev=0;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> GDALProgressFunc pfnProgress;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> rasterBand=getRasterBand(theBand);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment">//rest minvalue and MaxValue as ComputeStatistics does not account for nodata, scale and offset</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> minValue=min;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> maxValue=max;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span>(m_scale.size()>theBand){</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> stdDev*=m_scale[theBand];</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> }</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> sigma=1.06*stdDev*pow(getNvalid(theBand),-0.2);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">double</span> scale=0;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">if</span>(maxValue>minValue){</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span>(nbin==0)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> nbin=maxValue-minValue+1;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> scale=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(nbin-1)/(maxValue-minValue);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> nbin=1;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> assert(nbin>0);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">if</span>(histvector.size()!=nbin){</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> histvector.resize(nbin);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nbin;histvector[i++]=0);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">double</span> nvalid=0;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ninvalid=0;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> readData(lineBuffer,GDT_Float64,irow,theBand);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span>(isNoData(lineBuffer[icol]))</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> ++ninvalid;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(lineBuffer[icol]>maxValue)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> ++ninvalid;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(lineBuffer[icol]<minValue)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> ++ninvalid;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nbin==1)</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> ++histvector[0];</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">else</span>{<span class="comment">//scale to [0:nbin]</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">if</span>(sigma>0){</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">//create kde for Gaussian basis function</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment">//todo: speed up by calculating first and last bin with non-zero contriubtion...</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="comment">//todo: calculate real surface below pdf by using gsl_cdf_gaussian_P(x-mean+binsize,sigma)-gsl_cdf_gaussian_P(x-mean,sigma)</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="comment">//hiero</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin){</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordtype">double</span> icenter=minValue+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxValue-minValue)*(ibin+0.5)/nbin;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordtype">double</span> thePdf=gsl_ran_gaussian_pdf(lineBuffer[icol]-icenter, sigma);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> histvector[ibin]+=thePdf;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> nvalid+=thePdf;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> }</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordtype">int</span> theBin=<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span><span class="keyword">></span>(scale*(lineBuffer[icol]-minValue));</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> assert(theBin>=0);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> assert(theBin<nbin);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> ++histvector[theBin];</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> ++nvalid;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">// else if(lineBuffer[icol]==maxValue)</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment">// ++histvector[nbin-1];</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment">// ++histvector[static_cast<int>(static_cast<double>(lineBuffer[icol]-minValue)/(maxValue-minValue)*(nbin-1))];</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment">// unsigned long int nvalid=nrOfCol()*nrOfRow()-ninvalid;</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">return</span> nvalid;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">void</span> ImgReaderGdal::getRange(std::vector<short>& range, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> std::vector<short> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> range.clear();</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> readData(lineBuffer,GDT_Int16,irow,band);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">if</span>(find(range.begin(),range.end(),lineBuffer[icol])==range.end())</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> range.push_back(lineBuffer[icol]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> }</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> sort(range.begin(),range.end());</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ImgReaderGdal::getNvalid(<span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nvalid=0;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> readData(lineBuffer,GDT_Float64,irow,band);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">if</span>(isNoData(lineBuffer[icol]))</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> ++nvalid;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">return</span> nvalid;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span>(nrOfCol()*nrOfRow());</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordtype">int</span> ImgReaderGdal::getNoDataValues(std::vector<double>& noDataValues)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> noDataValues=m_noDataValues;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">return</span> m_noDataValues.size();</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordtype">int</span> ImgReaderGdal::pushNoDataValue(<span class="keywordtype">double</span> noDataValue)</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> {</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">if</span>(find(m_noDataValues.begin(),m_noDataValues.end(),noDataValue)==m_noDataValues.end())</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> m_noDataValues.push_back(noDataValue);</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">return</span>(m_noDataValues.size());</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="comment">// bool ImgReaderGdal::setNoDataValue(double noDataValue,int band)</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="comment">// GDALRasterBand *poBand;</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">// poBand = m_gds->GetRasterBand(band+1);</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="comment">// if(poBand->SetNoDataValue(noDataValue)!=CE_None)</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment">// return false;</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment">// return true;</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordtype">void</span> ImgReaderGdal::getRefPix(<span class="keywordtype">double</span>& refX, <span class="keywordtype">double</span> &refY, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> std::vector<double> lineBuffer(nrOfCol());</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordtype">double</span> validCol=0;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordtype">double</span> validRow=0;</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordtype">int</span> nvalidCol=0;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordtype">int</span> nvalidRow=0;</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrOfRow();++irow){</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> readData(lineBuffer,GDT_Float64,irow,band);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nrOfCol();++icol){</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="comment">// bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="comment">// if(valid){</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">if</span>(!isNoData(lineBuffer[icol])){</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> validCol+=icol+1;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> ++nvalidCol;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> validRow+=irow+1;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> ++nvalidRow;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> }</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> }</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">//reference coordinate is lower left corner of pixel in center of gravity</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment">//we need geo coordinates for exactly this location: validCol(Row)/nvalidCol(Row)-0.5</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordtype">double</span> cgravi=validCol/nvalidCol-0.5;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordtype">double</span> cgravj=validRow/nvalidRow-0.5;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordtype">double</span> refpixeli=floor(cgravi);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordtype">double</span> refpixelj=ceil(cgravj-1);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="comment">//but image2geo provides location at center of pixel (shifted half pixel right down)</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> image2geo(refpixeli,refpixelj,refX,refY);</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="comment">//refX and refY now refer to center of gravity pixel</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> refX-=0.5*getDeltaX();<span class="comment">//shift to left corner</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> refY-=0.5*getDeltaY();<span class="comment">//shift to lower left corner</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> refX=floor(validCol/nvalidCol-0.5);<span class="comment">//left corner</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> refY=floor(validRow/nvalidRow-0.5);<span class="comment">//upper corner</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="comment">//shift to lower left corner of pixel</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> refY+=1;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgReaderGdal_8h_source.html b/doc/html/ImgReaderGdal_8h_source.html
new file mode 100644
index 0000000..999dc61
--- /dev/null
+++ b/doc/html/ImgReaderGdal_8h_source.html
@@ -0,0 +1,384 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgReaderGdal.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderGdal.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgReaderGdal.h: class to read raster files using GDAL API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGREADERGDAL_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGREADERGDAL_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "gdal_priv.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">enum</span> RESAMPLE { NEAR = 0, BILINEAR = 1, BICUBIC = 2 };</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classImgReaderGdal.html"> 33</a></span> <span class="keyword">class </span><a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>(<span class="keyword">const</span> std::string& filename){open(filename);};</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> ~<a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename);<span class="comment">//, double magicX=1, double magicY=1);</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> std::string getFileName()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_filename;};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> nrOfCol(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ncol;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> nrOfRow(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_nrow;};</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> nrOfBand(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_nband;};</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">bool</span> isGeoRef()<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">if</span>(gt[5]<0) <span class="keywordflow">return</span> <span class="keyword">true</span>;<span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;};</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> std::string getProjection(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> std::string getProjectionRef(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> std::string getGeoTransform() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> getGeoTransform(<span class="keywordtype">double</span>* gt) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* void getGeoTransform(double& ulx, double& uly, double& deltaX, double& deltaY, double& rot1, double& rot2) const; */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> std::string getDescription() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> std::string getMetadataItem() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> std::string getImageDescription() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">bool</span> getBoundingBox (<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">bool</span> getCenterPos(<span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">double</span> getUlx()<span class="keyword"> const </span>{<span class="keywordtype">double</span> ulx, uly, lrx,lry;getBoundingBox(ulx,uly,lrx,lry);<span class="keywordflow">return</span>(ulx);};</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> getUly()<span class="keyword"> const </span>{<span class="keywordtype">double</span> ulx, uly, lrx,lry;getBoundingBox(ulx,uly,lrx,lry);<span class="keywordflow">return</span>(uly);};</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">double</span> getLrx()<span class="keyword"> const </span>{<span class="keywordtype">double</span> ulx, uly, lrx,lry;getBoundingBox(ulx,uly,lrx,lry);<span class="keywordflow">return</span>(lrx);};</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> getLry()<span class="keyword"> const </span>{<span class="keywordtype">double</span> ulx, uly, lrx,lry;getBoundingBox(ulx,uly,lrx,lry);<span class="keywordflow">return</span>(lry);};</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// bool getMagicPixel(double& magicX, double& magicY) const {magicX=m_magic_x;magicY=m_magic_y;};</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> setScale(<span class="keywordtype">double</span> theScale, <span class="keywordtype">int</span> band=0){</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* if(getRasterBand(band)->SetScale(theScale)==CE_Failure){ */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span>(m_scale.size()!=nrOfBand()){<span class="comment">//initialize</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> m_scale.resize(nrOfBand());</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nrOfBand();++iband)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> m_scale[iband]=1.0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> m_scale[band]=theScale;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* }; */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> setOffset(<span class="keywordtype">double</span> theOffset, <span class="keywordtype">int</span> band=0){</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">/* if(getRasterBand(band)->SetOffset(theOffset)==CE_Failure){ */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span>(m_offset.size()!=nrOfBand()){</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> m_offset.resize(nrOfBand());</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nrOfBand();++iband)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> m_offset[iband]=0.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> m_offset[band]=theOffset;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">/* }; */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">int</span> getNoDataValues(std::vector<double>& noDataValues) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">bool</span> isNoData(<span class="keywordtype">double</span> value)<span class="keyword"> const</span>{<span class="keywordflow">if</span>(m_noDataValues.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;<span class="keywordflow">else</span> <span class="keywordflow">return</span> find(m_noDataValues.begin(),m_noDataValues.end(),value)!=m_noDataValue [...]
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> pushNoDataValue(<span class="keywordtype">double</span> noDataValue);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> setNoData(<span class="keyword">const</span> std::vector<double> nodata){m_noDataValues=nodata;};</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> CPLErr GDALSetNoDataValue(<span class="keywordtype">double</span> noDataValue, <span class="keywordtype">int</span> band=0) {<span class="keywordflow">return</span> getRasterBand(band)->SetNoDataValue(noDataValue);};</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> covers(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">bool</span> covers(<span class="keywordtype">double</span> ulx, <span class="keywordtype">double</span> uly, <span class="keywordtype">double</span> lrx, <span class="keywordtype">double</span> lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">bool</span> geo2image(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span>& i, <span class="keywordtype">double</span>& j) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">bool</span> image2geo(<span class="keywordtype">double</span> i, <span class="keywordtype">double</span> j, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">double</span> getDeltaX(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">return</span> gt[1];};</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">double</span> getDeltaY(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">return</span> -gt[5];};</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readData(T& value, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <span [...]
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">double</span> row, <span class="keywordtype">int</span> band=0, RE [...]
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readDataBlock(<a class="code" href="classVector2d.html">Vector2d<T></a>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> minRow, [...]
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readDataBlock(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> minRow, <span class="keywordtype">int</span> maxRo [...]
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">double</span> row, <span class="keywordtype">int</span> band=0, RESAMPLE resample=NEAR) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> getMinMax(<span class="keywordtype">int</span> startCol, <span class="keywordtype">int</span> endCol, <span class="keywordtype">int</span> startRow, <span class="keywordtype">int</span> endRow, <span class="keywordtype">int</span> band, <span class="keywordtype">double</span>& minValue, <span class="keywordtype">double</span>& maxValue) <span class="keyword">const [...]
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> getMinMax(<span class="keywordtype">double</span>& minValue, <span class="keywordtype">double</span>& maxValue, <span class="keywordtype">int</span> band=0, <span class="keywordtype">bool</span> exhaustiveSearch=<span class="keyword">true</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">double</span> getMin(<span class="keywordtype">int</span>& col, <span class="keywordtype">int</span>& row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">double</span> getHistogram(std::vector<double>& histvector, <span class="keywordtype">double</span>& min, <span class="keywordtype">double</span>& max,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>& nbin, <span class="keywordtype">int</span> theBand=0, <span class="keywordtype">bool</span> kde=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">double</span> getMax(<span class="keywordtype">int</span>& col, <span class="keywordtype">int</span>& row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> getRefPix(<span class="keywordtype">double</span>& refX, <span class="keywordtype">double</span> &refY, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span> getRange(std::vector<short>& range, <span class="keywordtype">int</span> Band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> getNvalid(<span class="keywordtype">int</span> band) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> GDALDataType getDataType(<span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> GDALRasterBand* getRasterBand(<span class="keywordtype">int</span> band=0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> GDALColorTable* getColorTable(<span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::string getDriverDescription() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::string getImageType()<span class="keyword"> const</span>{<span class="keywordflow">return</span> getDriverDescription();};</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// std::string getImageType() const{return "GTiff";};</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> std::string getInterleave() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::string getCompression() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> GDALDataset* getDataset(){<span class="keywordflow">return</span> m_gds;};</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">char</span>** getMetadata();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">char</span>** getMetadata() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> getMetadata(std::list<std::string>& metadata) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">void</span> setCodec();<span class="comment">//double magicX, double magicY);</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> std::string m_filename;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> GDALDataset *m_gds;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">int</span> m_ncol;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> m_nrow;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> m_nband;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">double</span> m_gt[6];</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">/* double m_ulx; */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/* double m_uly; */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">/* double m_delta_x; */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">/* double m_delta_y; */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/* bool m_isGeoRef; */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> std::vector<double> m_noDataValues;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> std::vector<double> m_scale;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> std::vector<double> m_offset;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> };</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// adfGeoTransform[0] /* top left x */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// adfGeoTransform[1] /* w-e pixel resolution */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// adfGeoTransform[2] /* rotation, 0 if image is "north up" */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// adfGeoTransform[3] /* top left y */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// adfGeoTransform[4] /* rotation, 0 if image is "north up" */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment">// adfGeoTransform[5] /* n-s pixel resolution */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readData(T& value, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> assert(band<nrOfBand()+1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> assert(col<nrOfCol());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> assert(col>=0);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> assert(row<nrOfRow());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> assert(row>=0);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> poBand->RasterIO(GF_Read,col,row,1,1,&value,1,1,dataType,0,0);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(m_scale.size()>band)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> value=static_cast<double>(value)*m_scale[band];</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(m_offset.size()>band)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> value=static_cast<double>(value)+m_offset[band];</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> b [...]
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> assert(band<nrOfBand()+1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> assert(minCol<nrOfCol());</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> assert(minCol>=0);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> assert(maxCol<nrOfCol());</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> assert(minCol<=maxCol);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> assert(row<nrOfRow());</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> assert(row>=0);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(buffer.size()!=maxCol-minCol+1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> buffer.resize(maxCol-minCol+1);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> poBand->RasterIO(GF_Read,minCol,row,buffer.size(),1,&(buffer[0]),buffer.size(),1,dataType,0,0);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(m_scale.size()>band||m_offset.size()>band){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">double</span> theScale=1;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">double</span> theOffset=0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(m_scale.size()>band)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> theScale=m_scale[band];</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(m_offset.size()>band)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> theOffset=m_offset[band];</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<buffer.size();++index)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> buffer[index]=theScale*static_cast<double>(buffer[index])+theOffset;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">double</span> row, <span class="keywordtype">int</spa [...]
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">//todo: make upper and lower row depend on isGeo...</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::vector<T> readBuffer_upper;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> std::vector<T> readBuffer_lower;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(buffer.size()!=maxCol-minCol+1)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> buffer.resize(maxCol-minCol+1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">double</span> upperRow=row-0.5;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> upperRow=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperRow);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">double</span> lowerRow=row+0.5;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> lowerRow=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerRow);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">switch</span>(resample){</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(lowerRow>=nrOfRow())</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> lowerRow=nrOfRow()-1;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(upperRow<0)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> upperRow=0;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> readData(readBuffer_upper,GDT_Float64,minCol,maxCol,static_cast<int>(upperRow),band);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> readData(readBuffer_lower,GDT_Float64,minCol,maxCol,static_cast<int>(lowerRow),band);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">//do interpolation in y</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<maxCol-minCol+1;++icol){</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> buffer[icol]=(lowerRow-row+0.5)*readBuffer_upper[icol]+(1-lowerRow+row-0.5)*readBuffer_lower[icol];</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> readData(buffer,GDT_Float64,minCol,maxCol,static_cast<int>(row),band);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readDataBlock(<a class="code" href="classVector2d.html">Vector2d<T></a>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> buffer.resize(maxRow-minRow+1);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=minRow;irow<=maxRow;++irow){</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> buffer[irow-minRow].resize(maxCol-minCol+1);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> readData(buffer[irow-minRow],dataType,minCol,maxCol,irow,band);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readDataBlock(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> minRow, <span class="keywordtype">int [...]
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">double</span> theScale=1;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordtype">double</span> theOffset=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(m_scale.size()>band)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> theScale=m_scale[band];</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span>(m_offset.size()>band)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> theOffset=m_offset[band];</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> assert(band<nrOfBand()+1);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(minCol>=nrOfCol() ||</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> (minCol<0) ||</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> (maxCol>=nrOfCol()) ||</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> (minCol>maxCol) ||</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> (minRow>=nrOfRow()) ||</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> (minRow<0) ||</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> (maxRow>=nrOfRow()) ||</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> (minRow>maxRow)){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> std::string errorString=<span class="stringliteral">"block not within image boundaries"</span>;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">/* assert(minCol<nrOfCol()); */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">/* assert(minCol>=0); */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">/* assert(maxCol<nrOfCol()); */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">/* assert(minCol<=maxCol); */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">/* assert(minRow<nrOfRow()); */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">/* assert(minRow>=0); */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">/* assert(maxRow<nrOfRow()); */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">/* assert(minRow<=maxRow); */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">if</span>(buffer.size()!=(maxRow-minRow+1)*(maxCol-minCol+1))</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> buffer.resize((maxRow-minRow+1)*(maxCol-minCol+1));</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> poBand->RasterIO(GF_Read,minCol,minRow,maxCol-minCol+1,maxRow-minRow+1,&(buffer[0]),(maxCol-minCol+1),(maxRow-minRow+1),dataType,0,0);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>(m_scale.size()>band||m_offset.size()>band){</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<buffer.size();++index)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> buffer[index]=theScale*buffer[index]+theOffset;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// template<typename T> void ImgReaderGdal::readDataBlock(vector<T>& buffer, const GDALDataType& dataType , int minCol, int maxCol, int minRow, int maxRow, int band) const</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// assert(band<nrOfBand()+1);</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// assert(minCol<nrOfCol());</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// assert(minCol>=0);</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// assert(maxCol<nrOfCol());</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// assert(minCol<=maxCol);</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// assert(minRow<nrOfRow());</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// assert(minRow>=0);</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// assert(maxRow<nrOfRow());</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// assert(minRow<=maxRow);</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// if(buffer.size()!=(maxRow-minRow+1)*(maxCol-minCol+1))</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// buffer.resize((maxRow-minRow+1)*(maxCol-minCol+1));</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// //fetch raster band</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// GDALRasterBand *poBand;</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// assert(band<nrOfBand()+1);</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// poBand = m_gds->GetRasterBand(band+1);//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">// for(int irow=0;irow<maxRow-minRow+1;++irow)</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// poBand->RasterIO(GF_Read,minCol,minRow+irow,maxCol-minCol+1,1,&(buffer[irow*(maxCol-minCol+1)]),maxCol-minCol+1,1,dataType,0,0);</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> readData(buffer,dataType,0,nrOfCol()-1,row,band);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> ImgReaderGdal::readData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">double</span> row, <span class="keywordtype">int</span> band, RESAMPLE resample)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> readData(buffer,dataType,0,nrOfCol()-1,row,band,resample);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor">#endif // _IMGREADERGDAL_H_</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// //fetch raster band</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">// GDALRasterBand *poBand;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// assert(band<nrOfBand()+1);</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// poBand = m_gds->GetRasterBand(band+1);//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// buffer.resize(maxCol-minCol+1);</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// assert(minCol<nrOfCol());</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// assert(row<nrOfRow());</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// poBand->RasterIO(GF_Read,minCol,row,buffer.size(),1,&(buffer[0]),buffer.size(),1,GDT_Int16,0,0);</span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgReaderOgr_8cc_source.html b/doc/html/ImgReaderOgr_8cc_source.html
new file mode 100644
index 0000000..5842bb5
--- /dev/null
+++ b/doc/html/ImgReaderOgr_8cc_source.html
@@ -0,0 +1,485 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgReaderOgr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderOgr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgReaderOgr.cc: class to read vector files using OGR API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "cpl_string.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> ImgReaderOgr::ImgReaderOgr(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> : m_fs(<span class="stringliteral">' '</span>)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {}</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> ImgReaderOgr::ImgReaderOgr(<span class="keyword">const</span> std::string& filename)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> open(filename);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ImgReaderOgr::~ImgReaderOgr(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> ImgReaderOgr::open(<span class="keyword">const</span> std::string& filename)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> m_fs=<span class="charliteral">' '</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> m_filename = filename;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> setCodec();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> ImgReaderOgr::close(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> OGRDataSource::DestroyDataSource(m_datasource);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> ImgReaderOgr::setCodec(<span class="keywordtype">void</span>){</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">//register the drivers</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> OGRRegisterAll();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//open the input OGR datasource. Datasources can be files, RDBMSes, directories full of files, or even remote web services depending on the driver being used. However, the datasource name is always a single string.</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> m_datasource = OGRSFDriverRegistrar::Open(m_filename.c_str(), FALSE);<span class="comment">//FAlSE: do not update</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>( m_datasource == NULL ){</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> std::string errorString=<span class="stringliteral">"Open failed"</span>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">bool</span> ImgReaderOgr::getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry, <span class="keywordtype">int</span> layer)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> OGREnvelope oExt;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>(getLayer(layer)->GetExtent(&oExt,TRUE)==OGRERR_NONE){</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> ulx=oExt.MinX;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> uly=oExt.MaxY;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> lrx=oExt.MaxX;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> lry=oExt.MinY;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">bool</span> ImgReaderOgr::getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">bool</span> success=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> OGREnvelope oExt;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<getLayerCount();++ilayer){</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(getLayer(ilayer)->GetExtent(&oExt,TRUE)==OGRERR_NONE){</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span>(!ilayer){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> ulx=oExt.MinX;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> uly=oExt.MaxY;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> lrx=oExt.MaxX;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> lry=oExt.MinY;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>(ulx>oExt.MinX)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> ulx=oExt.MinX;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span>(uly<oExt.MaxY)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> uly=oExt.MaxY;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span>(lrx<oExt.MaxX)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> lrx=oExt.MaxX;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span>(lry>oExt.MinY)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> lry=oExt.MinY;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> success=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> success=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> success;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ImgReaderOgr::getFeatureCount(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span>(m_datasource->GetLayer(layer)->GetFeatureCount());</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">int</span> ImgReaderOgr::getFieldCount(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span>(layer<0)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> layer=m_datasource->GetLayerCount()-1;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span>(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">int</span> ImgReaderOgr::getFields(std::vector<std::string>& fields, <span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(layer<0)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> layer=m_datasource->GetLayerCount()-1;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> fields.clear();</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> fields[iField]=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">return</span>(fields.size());</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">int</span> ImgReaderOgr::getFields(std::vector<OGRFieldDefn*>& fields, <span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(layer<0)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> layer=m_datasource->GetLayerCount()-1;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> fields.clear();</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> fields[iField]=poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> assert(fields.size()==getFieldCount(layer));</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span>(fields.size());</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> std::string ImgReaderOgr::getProjection(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(m_datasource->GetLayer(layer)->GetSpatialRef()){</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">char</span>* ppszResult;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> m_datasource->GetLayer(layer)->GetSpatialRef()->exportToWkt(&ppszResult);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">return</span>(ppszResult);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> OGRwkbGeometryType ImgReaderOgr::getGeometryType(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">return</span> m_datasource->GetLayer(layer)->GetLayerDefn()->GetGeomType();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> std::ostream& operator<<(std::ostream& theOstream, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& theImageReader){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">//An OGRDataSource can potentially have many layers associated with it. The number of layers available can be queried with OGRDataSource::GetLayerCount() and individual layers fetched by index using OGRDataSource::GetLayer(). However, we wil just fetch the layer by name.</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">//todo: try to open and catch if failure...</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// ofstream fpoints(filename.c_str(),ios::out);</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> nlayerRead=theImageReader.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayerRead;++ilayer){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> OGRLayer *readLayer=theImageReader.getLayer(ilayer);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> OGRFeatureDefn *poFDefn = readLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> theOstream << <span class="stringliteral">"#"</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">int</span> iField=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> theOstream << fieldname << theImageReader.getFieldSeparator();</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> theOstream << std::endl;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> readLayer->ResetReading();</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">while</span>( (poFeature = readLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> assert(poGeometry != NULL);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">double</span> x,y;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> x=poPoint->getX();</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> y=poPoint->getY();</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> std::vector<std::string> vfields(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> std::string featurename;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> std::vector<std::string>::iterator fit=vfields.begin();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> *(fit++)=poFeature->GetFieldAsString(iField);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> theOstream.precision(12);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> theOstream << x << theImageReader.getFieldSeparator() << y;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">for</span>(fit=vfields.begin();fit!=vfields.end();++fit)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> theOstream << theImageReader.getFieldSeparator() << *fit;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> theOstream << std::endl;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> ++ifeature;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span>(theOstream);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// OGRLayer * ImgReaderOgr::executeSql(const std::string& output, const std::string& sqlStatement, OGRGeometry* spatialFilter)</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// OGRLayer *poResultSet;</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// poResultSet = m_datasource->ExecuteSQL(sqlStatement.c_str(), spatialFilter,NULL );</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// if( poResultSet != NULL ){</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// ImgWriterOgr imgWriter;</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// imgWriter.open(output);</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// imgWriter.copyLayer(poResultSet,output);</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// m_datasource->ReleaseResultSet( poResultSet );</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// imgWriter.close();</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ImgReaderOgr::readDataImageOgr(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<float></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> std::vector<std::string>& fields,</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keyword">const</span> std::vector<short>& bands,</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">const</span> std::string& label,</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">const</span> std::vector<std::string>& layers,</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">int</span> verbose)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> mapPixels.clear();</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">int</span> totalSamples=0; </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> std::cout << <span class="stringliteral">"reading OGR dataset "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<getLayerCount();++ilayer){</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> std::string currentLayername=getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(layers.size())</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(find(layers.begin(),layers.end(),currentLayername)==layers.end())</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">//only retain bands in fields</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> getFields(fields,ilayer);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> std::vector<std::string>::iterator fit=fields.begin();</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> std::cout << <span class="stringliteral">"reading fields: "</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">while</span>(fit!=fields.end()){</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> std::cout << *fit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ");</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>((*fit).substr(0,1)==<span class="stringliteral">"B"</span>||(*fit).substr(0,1)==<span class="stringliteral">"b"</span>){</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>((*fit).substr(1).find_first_not_of(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "</span>)!=std::string::npos){</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">int</span> theBand=atoi((*fit).substr(1).c_str());</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">if</span>(bands.size()){</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">bool</span> validBand=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<bands.size();++iband){</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(theBand==bands[iband])</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> validBand=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span>(validBand)</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> ++fit;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> fields.erase(fit);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> ++fit;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>((*fit)==<span class="stringliteral">"B"</span> || (*fit)==<span class="stringliteral">"b"</span> || (*fit)==<span class="stringliteral">"Band"</span>)<span class="comment">//B is only band</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> ++fit;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> fields.erase(fit);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> std::cout << <span class="stringliteral">"fields:"</span>;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">for</span>(std::vector<std::string>::iterator fit=fields.begin();fit!=fields.end();++fit)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> std::cout << <span class="stringliteral">" "</span> << *fit;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(!nband){</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> std::cout << <span class="stringliteral">"reading data"</span> << std::endl;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> nband=readData(mapPixels,OFTReal,fields,label,ilayer,<span class="keyword">true</span>,verbose==2);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> assert(nband==readData(mapPixels,OFTReal,fields,label,ilayer,<span class="keyword">true</span>,<span class="keyword">false</span>));</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> nsample=getFeatureCount(ilayer);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> totalSamples+=nsample;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> std::cout << <span class="stringliteral">": "</span> << nsample << <span class="stringliteral">" samples read with "</span> << nband << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> std::ostringstream estr;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> estr << e << <span class="stringliteral">" "</span> << m_filename;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">throw</span>(estr.str());</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> std::cout << <span class="stringliteral">"total number of samples read "</span> << totalSamples << std::endl;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">return</span> totalSamples;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ImgReaderOgr::readDataImageOgr(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<float></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> std::vector<std::string>& fields,</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">double</span> start,</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">double</span> end,</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">const</span> std::string& label,</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">const</span> std::vector<std::string>& layers,</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordtype">int</span> verbose)</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> mapPixels.clear();</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">int</span> totalSamples=0; </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> std::cout << <span class="stringliteral">"reading OGR dataset file "</span> << m_filename << std::endl;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<getLayerCount();++ilayer){</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> std::string currentLayername=getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(layers.size())</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>(find(layers.begin(),layers.end(),currentLayername)==layers.end())</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">//only retain bands in fields</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> getFields(fields,ilayer);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::vector<std::string>::iterator fit=fields.begin();</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> std::cout << <span class="stringliteral">"reading fields: "</span>;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">while</span>(fit!=fields.end()){</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> std::cout << *fit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">// size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ");</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">if</span>((*fit).substr(0,1)==<span class="stringliteral">"B"</span>||(*fit).substr(0,1)==<span class="stringliteral">"b"</span>){</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span>((*fit).substr(1).find_first_not_of(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "</span>)!=std::string::npos){</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">int</span> iband=atoi((*fit).substr(1).c_str());</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>((start||end)&&(iband<start||iband>end))</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> fields.erase(fit);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> ++fit;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*fit==<span class="stringliteral">"B"</span> || *fit==<span class="stringliteral">"b"</span>|| *fit==<span class="stringliteral">"Band"</span>)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> ++fit;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> fields.erase(fit);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> std::cout << <span class="stringliteral">"fields:"</span>;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">for</span>(std::vector<std::string>::iterator fit=fields.begin();fit!=fields.end();++fit)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> std::cout << <span class="stringliteral">" "</span> << *fit;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(!nband){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cout << <span class="stringliteral">"reading data"</span> << std::endl;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> nband=readData(mapPixels,OFTReal,fields,label,ilayer,<span class="keyword">true</span>,verbose==2);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> assert(nband==readData(mapPixels,OFTReal,fields,label,ilayer,<span class="keyword">true</span>,<span class="keyword">false</span>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> nsample=getFeatureCount(ilayer);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> totalSamples+=nsample;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> std::cout << <span class="stringliteral">": "</span> << nsample << <span class="stringliteral">" samples read with "</span> << nband << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> std::ostringstream estr;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> estr << e << <span class="stringliteral">" "</span> << m_filename;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">throw</span>(estr.str());</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> std::cout << <span class="stringliteral">": "</span> << nsample << <span class="stringliteral">" samples read with "</span> << nband << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> std::cout << <span class="stringliteral">"total number of samples read "</span> << totalSamples << std::endl;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">return</span> totalSamples;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgReaderOgr_8h_source.html b/doc/html/ImgReaderOgr_8h_source.html
new file mode 100644
index 0000000..229a9c9
--- /dev/null
+++ b/doc/html/ImgReaderOgr_8h_source.html
@@ -0,0 +1,1026 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgReaderOgr.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderOgr.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgReaderOgr.h: class to read vector files using OGR API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGREADEROGR_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGREADEROGR_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "ogrsf_frmts.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classImgReaderOgr.html"> 35</a></span> <span class="keyword">class </span><a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ~<a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// int readData(Vector2d<double>& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, int layer=0, bool pos=false);//default layer 0 and no pos information in data</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readXY(std::vector<T>& xVector, std::vector<T>& yVector, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readY(std::vector<T>& yVector, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readData(std::vector<T>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, OGRFeature *poFeature, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> pos=<span class="keyword">false</ [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readData(std::vector<T>& data, <span class="keyword">const</span> OGRFieldType& fieldType, <span class="keyword">const</span> std::string& theField, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</s [...]
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readData(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> pos=<span cla [...]
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readData(std::map<<span class="keywordtype">int</span>,<a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::str [...]
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readData(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::string& label, <span cla [...]
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readDataImageOgr(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<float></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> std::vector<std::string>& fields,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">const</span> std::vector<short>& bands,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">const</span> std::string& label,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> std::vector<std::string>& layers,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readDataImageOgr(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<float></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> std::vector<std::string>& fields,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> start,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">double</span> end,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> std::string& label,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> std::vector<std::string>& layers,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// void shape2ascii(std::ostream& theOstream, const std::string& pointname, int layer=0, bool verbose=false);</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> getFeatureCount(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">int</span> getFieldCount(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> OGRLayer* getLayer(<span class="keywordtype">int</span> layer=0){<span class="keywordflow">return</span> m_datasource->GetLayer(layer);};</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> std::string getProjection(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> OGRwkbGeometryType getGeometryType(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> std::string getLayerName(<span class="keywordtype">int</span> layer=0){<span class="keywordflow">return</span> m_datasource->GetLayer(layer)->GetLayerDefn()->GetName();};</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// int getLayer(int layer=0) const;</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> getFields(std::vector<std::string>& fields, <span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> getFields(std::vector<OGRFieldDefn*>& fields, <span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> OGRDataSource* getDataSource(<span class="keywordtype">void</span>) {<span class="keywordflow">return</span> m_datasource;};</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> OGRSFDriver* getDriver(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_datasource->GetDriver();};</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">int</span> getLayerCount(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_datasource->GetLayerCount();};</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// OGRLayer *executeSql(const std::string& output,const std::string& sqlStatement, OGRGeometry* spatialFilter=NULL);</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readSql(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::string& sqlStatement, OGRGeometry* spatialFilter=NULL, [...]
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">int</span> readSql(std::map<<span class="keywordtype">int</span>,<a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::strin [...]
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">bool</span> getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry, <span class="keywordtype">int</span> layer);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">bool</span> getExtent(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> setFieldSeparator(<span class="keyword">const</span> <span class="keywordtype">char</span> fs){ m_fs=fs;};</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">char</span> getFieldSeparator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_fs;};</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">friend</span> std::ostream& operator<<(std::ostream& theOstream, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& theImageReader);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> setCodec(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> std::string m_filename;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> OGRDataSource *m_datasource;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">char</span> m_fs;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> };</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">//read data from all features in a map, organized by classes</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readData(std::map<<span class="keywordtype">int</span>,<a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</sp [...]
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(poLayer!=NULL){</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> posOffset=(pos)?2:0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> theClass=0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> std::vector<T> theFeature;<span class="comment">//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> std::cerr << <span class="stringliteral">"Warning: poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> assert(poGeometry != NULL );</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> OGRPoint *poPoint;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> theFeature.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> theFeature.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> OGRPolygon * poPolygon = (OGRPolygon *) poGeometry;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> poPolygon->Centroid(&thePoint);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> theFeature.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> theFeature.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> } </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">//Centroid for non polygon geometry not supported until OGR 1.8.0, comment out if version < 1.8.0 is installed...";</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> poGeometry->Centroid(&thePoint);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> theFeature.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> theFeature.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> } </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> std::string featurename;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(fieldname==label)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> theClass=poFeature->GetFieldAsInteger(iField);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> data[theClass].push_back(theFeature);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> ++ifeature;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> ++ifeature;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::cout << <span class="stringliteral">"number of features read: "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">typename</span> std::map<int,Vector2d<T> >::const_iterator mit=data.begin();</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> std::cout << <span class="stringliteral">"read classes: "</span> << std::flush;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">while</span>(mit!=data.end()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> std::cout << mit->first << <span class="stringliteral">" "</span> << std::flush;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(!nband)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> nband=fields.size();</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> assert((mit->second)[0].size()==nband+2);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> assert((mit->second)[0].size()==nband);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> ++mit;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> std::cout << std::endl << std::flush;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span>(nband);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">//read data from all features in a map, organized by class names</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readData(std::map<std::string,<a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::string& labe [...]
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(poLayer!=NULL){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> assert(poFDefn!=NULL);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">int</span> posOffset=(pos)?2:0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> std::cout << <span class="stringliteral">"going through features to fill in string map"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> std::string theClass;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> std::vector<T> theFeature;<span class="comment">//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> std::cerr << <span class="stringliteral">"Warning: poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> assert(poGeometry != NULL );</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> OGRPoint *poPoint;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> theFeature.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> theFeature.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> poGeometry->Centroid(&thePoint);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> theFeature.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> theFeature.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> } </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">//Centroid for non polygon geometry not supported until OGR 1.8.0, comment out if version < 1.8.0 is installed...";</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> poGeometry->Centroid(&thePoint);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> theFeature.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> theFeature.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> } </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();//got LayerDefn already...</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> std::string featurename;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span>(fieldname==label){</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> theClass=poFeature->GetFieldAsString(iField);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> std::cout << <span class="stringliteral">"read feature for "</span> << theClass << std::endl;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> assert(poFDefn!=NULL);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> data[theClass].push_back(theFeature);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> ++ifeature;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> std::cout << <span class="stringliteral">"number of features read: "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">typename</span> std::map<std::string,Vector2d<T> >::const_iterator mit=data.begin();</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> std::cout << <span class="stringliteral">"read classes: "</span> << std::flush;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">while</span>(mit!=data.end()){</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> std::cout << mit->first << <span class="stringliteral">" "</span> << std::flush;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(!nband)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> nband=fields.size();</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> assert((mit->second)[0].size()==nband+2);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> assert((mit->second)[0].size()==nband);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> ++mit;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> std::cout << std::endl << std::flush;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">return</span>(nband);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">//read x positions</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readXY(std::vector<T>& xVector, std::vector<T>& yVector, <span class="keywordtype">int</span> layer, <span class="keywordtype">bool</span> verbose){</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">else</span><span class="comment">// if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cout << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// assert(poGeometry != NULL </span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> xVector.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> yVector.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> ++ifeature;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> assert(xVector.size()==yVector.size());</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span>(xVector.size()){</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">return</span> xVector.size();</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">//read data from a single feature</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readData(std::vector<T>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, OGRFeature *poFeature, <span class="keywordtype">int</span> layer, <span class="keywordtype">bool</span> pos, <span class="keywo [...]
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> std::cerr << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> }</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> assert(poGeometry != NULL);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> OGRPoint *poPoint;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> data.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> data.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> poGeometry->Centroid(&thePoint);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> data.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> data.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> } </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">//Centroid for non polygon geometry not supported until OGR 1.8.0, comment out if version < 1.8.0 is installed...";</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> poGeometry->Centroid(&thePoint);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> data.push_back(thePoint.getX());</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> data.push_back(thePoint.getY());</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> } </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> std::string featurename;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> data.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> }</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> data.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> data.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> data.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> }</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> {</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// assert(data.size()==ifeature);</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span>(data.size()){</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> assert(data.size()==fields.size()+2);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> assert(data.size()==fields.size());</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">return</span> fields.size();</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment">//read one field from all features</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">inline</span> <span class="keywordtype">int</span> ImgReaderOgr::readData(std::vector<T>& data, <span class="keyword">const</span> OGRFieldType& fieldType, <span class="keyword">const</span> std::string& theField, <span class="keywordtype">int</span> layer, <span class="keywordtype">bool [...]
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> {</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordtype">int</span> nfield=(theField!=<span class="stringliteral">""</span>)? poFDefn->GetFieldCount() : 1;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">if</span>(theField==<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">//read first field available </span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> std::cout << <span class="stringliteral">"read first field from total of "</span> << nfield << std::endl;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">// std::vector<T> theFeature;//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> T theFeature;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">else</span><span class="comment">// if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> std::cout << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// assert(poGeometry != NULL </span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<nfield;++iField){</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span>(fieldname!=theField)</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> theFeature=poFeature->GetFieldAsDouble(iField);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> data.push_back(theFeature);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> std::cout << <span class="stringliteral">"feature is: "</span> << theFeature << std::endl;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> ++ifeature;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> }</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">if</span>(data.size()){</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">return</span> data.size();</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> }</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="comment">//specialization for string: read one field from all features</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> <> <span class="keyword">inline</span> <span class="keywordtype">int</span> ImgReaderOgr::readData(std::vector<std::string>& data, <span class="keyword">const</span> OGRFieldType& fieldType, <span class="keyword">const</span> std::string& theField, <span class="keywordtype">int</span> layer, <span class="keywordtype">bool</span> verbose)</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> {</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordtype">int</span> nfield=(theField!=<span class="stringliteral">""</span>)? poFDefn->GetFieldCount() : 1;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">if</span>(theField==<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="comment">//read first field available </span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> std::cout << <span class="stringliteral">"read first field from total of "</span> << nfield << std::endl;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> std::string theFeature;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">else</span><span class="comment">// if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> std::cout << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> }</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment">// assert(poGeometry != NULL </span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">// && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<nfield;++iField){</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">if</span>(fieldname!=theField)</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">case</span>(OFTString):</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> theFeature=poFeature->GetFieldAsString(iField);</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> {</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> }</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> data.push_back(theFeature);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> std::cout << <span class="stringliteral">"feature is: "</span> << theFeature << std::endl;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> ++ifeature;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(data.size()){</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span> data.size();</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> }</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">//read data from all features </span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readData(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keywordtype">int</span> layer, <span class="keywordtype">bool</span> pos [...]
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> poLayer = m_datasource->GetLayer(layer);</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordtype">int</span> posOffset=(pos)?2:0;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> std::vector<T> theFeature;<span class="comment">//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> std::cerr << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> assert(poGeometry != NULL </div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> theFeature.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> theFeature.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> std::string featurename;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> }</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> }</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> {</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> }</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> data.push_back(theFeature);</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> ++ifeature;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment">// assert(data.size()==ifeature);</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">if</span>(data.size()){</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> assert(data[0].size()==fields.size()+2);</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> assert(data[0].size()==fields.size());</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">return</span> fields.size();</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readSql(std::map<<span class="keywordtype">int</span>, <a class="code" href="classVector2d.html">Vector2d<T></a> >& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</spa [...]
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> {</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> poLayer = m_datasource->ExecuteSQL(sqlStatement.c_str(), spatialFilter,NULL );</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keywordflow">if</span>(poLayer!=NULL){</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> }</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">int</span> posOffset=(pos)?2:0;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordtype">int</span> theClass=0;</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> std::vector<T> theFeature;<span class="comment">//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> std::cerr << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> }</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> assert(poGeometry != NULL </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> theFeature.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> theFeature.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> }</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> std::string featurename;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">if</span>(fieldname==label)</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> theClass=poFeature->GetFieldAsInteger(iField);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> }</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> {</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> }</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> }</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> data[theClass].push_back(theFeature);</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> ++ifeature;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> }</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> std::cout << <span class="stringliteral">"number of features read: "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="keyword">typename</span> std::map<int,Vector2d<T> >::const_iterator mit=data.begin();</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> std::cout << <span class="stringliteral">"read classes: "</span> << std::flush;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">while</span>(mit!=data.end()){</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> std::cout << mit->first << <span class="stringliteral">" "</span> << std::flush;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">if</span>(!nband)</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> nband=fields.size();</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> assert((mit->second)[0].size()==nband+2);</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> assert((mit->second)[0].size()==nband);</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> ++mit;</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> std::cout << std::endl << std::flush;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">return</span>(nband);</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> }</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> }</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">int</span> ImgReaderOgr::readSql(<a class="code" href="classVector2d.html">Vector2d<T></a>& data, <span class="keyword">const</span> OGRFieldType& fieldType, std::vector<std::string>& fields, <span class="keyword">const</span> std::string& sqlStatement, OGRGeometry* spatialF [...]
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> {</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> poLayer = m_datasource->ExecuteSQL(sqlStatement.c_str(), spatialFilter,NULL );</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="keywordflow">if</span>(poLayer!=NULL){</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">if</span>(fields.empty()){</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> std::cout << <span class="stringliteral">"resized fields to "</span> << fields.size() << std::endl;</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> }</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordtype">int</span> posOffset=(pos)?2:0;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> std::cout << <span class="stringliteral">"going through features"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> std::vector<T> theFeature;<span class="comment">//(fields.size()+posOffset);//x,y+selectedfields</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> std::cout << <span class="stringliteral">"reading feature "</span> << ifeature << std::endl << std::flush;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">if</span>(poGeometry == NULL)</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> std::cerr << <span class="stringliteral">"no geometry defined"</span> << std::endl << std::flush;</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> std::cerr << <span class="stringliteral">"poGeometry type: "</span> << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> }</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> assert(poGeometry != NULL </div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">if</span>(pos){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> theFeature.push_back(poPoint->getX());</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> theFeature.push_back(poPoint->getY());</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> std::string featurename;</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">switch</span>(fieldType){</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> }</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> }</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span>(fields.size()<poFDefn->GetFieldCount()){</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span>(find(fields.begin(),fields.end(),fieldname)!=fields.end())</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> fields[iField]=fieldname;</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> theFeature.push_back(poFeature->GetFieldAsDouble(iField));</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> }</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> {</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> std::string errorstring=<span class="stringliteral">"field type not supported in ImgReaderOgr::ReadData"</span>;</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> }</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> }</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> data.push_back(theFeature);</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> ++ifeature;</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> }</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> m_datasource->ReleaseResultSet( poLayer );</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">// assert(data.size()==ifeature);</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordflow">if</span>(data.size()){</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">if</span>(pos)</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> assert(data[0].size()==fields.size()+2);</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> assert(data[0].size()==fields.size());</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">return</span> fields.size();</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> }</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> }</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> ess << <span class="stringliteral">"no layer in "</span> << m_filename;</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> }</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> }</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="preprocessor">#endif // _IMGREADEROGR_H_</span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgRegression_8cc_source.html b/doc/html/ImgRegression_8cc_source.html
new file mode 100644
index 0000000..988a640
--- /dev/null
+++ b/doc/html/ImgRegression_8cc_source.html
@@ -0,0 +1,468 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/ImgRegression.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgRegression.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgRegression.cc: class to calculate regression between two raster datasets</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "ImgRegression.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">using namespace </span>imgregression;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> ImgRegression::ImgRegression(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> : m_threshold(0), m_down(1)</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {}</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> ImgRegression::~ImgRegression(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {}</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">double</span> ImgRegression::getRMSE(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">double</span>& c1, <span class="keywor [...]
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> c0=0;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> c1=1;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> icol1=0,irow1=0;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> std::vector<double> rowBuffer1(imgReader1.nrOfCol());</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> std::vector<double> rowBuffer2(imgReader2.nrOfCol());</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> srand(time(NULL));</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">for</span>(irow1=0;irow1<imgReader1.nrOfRow();++irow1){</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span>(irow1%m_down)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> icol1=0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> icol2=0,irow2=0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> geox=0,geoy=0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> imgReader1.readData(rowBuffer1,GDT_Float64,irow1,band1);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span>(irow2<0||irow2>=imgReader2.nrOfRow())</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> imgReader2.readData(rowBuffer2,GDT_Float64,irow2,band2);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">for</span>(icol1=0;icol1<imgReader1.nrOfCol();++icol1){</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span>(icol1%m_down)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> p*=100.0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span>(icol2<0||icol2>=imgReader2.nrOfCol())</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol1];</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol2];</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span>(imgReader1.isNoData(value1)||imgReader2.isNoData(value2))</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> std::cout << geox << <span class="stringliteral">" "</span> << geoy << <span class="stringliteral">" "</span> << icol1 << <span class="stringliteral">" "</span> << irow1 << <span class="stringliteral">" "</span> << icol2 << <span class="stringliteral">" "</span> << irow2 << <span class=" [...]
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">double</span> err=0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> err=stat.linear_regression_err(buffer1,buffer2,c0,c1);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> std::cout << <span class="stringliteral">"linear regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with rmse: "</span> << err [...]
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">double</span> ImgRegression::getR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">double</span>& c1, <span class="keywordt [...]
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> c0=0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> c1=1;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> icol1=0,irow1=0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> std::vector<double> rowBuffer1(imgReader1.nrOfCol());</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> std::vector<double> rowBuffer2(imgReader2.nrOfCol());</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> srand(time(NULL));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span>(irow1=0;irow1<imgReader1.nrOfRow();++irow1){</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(irow1%m_down)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> icol1=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">double</span> icol2=0,irow2=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">double</span> geox=0,geoy=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> imgReader1.readData(rowBuffer1,GDT_Float64,irow1,band1);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(irow2<0||irow2>=imgReader2.nrOfRow())</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> imgReader2.readData(rowBuffer2,GDT_Float64,irow2,band2);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">for</span>(icol1=0;icol1<imgReader1.nrOfCol();++icol1){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(icol1%m_down)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> p*=100.0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(icol2<0||icol2>=imgReader2.nrOfCol())</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol1];</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol2];</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(imgReader1.isNoData(value1)||imgReader2.isNoData(value2))</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> std::cout << geox << <span class="stringliteral">" "</span> << geoy << <span class="stringliteral">" "</span> << icol1 << <span class="stringliteral">" "</span> << irow1 << <span class="stringliteral">" "</span> << icol2 << <span class="stringliteral">" "</span> << irow2 << <span class=" [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">double</span> r2=0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> r2=stat.linear_regression(buffer1,buffer2,c0,c1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> std::cout << <span class="stringliteral">"linear regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with r^2: "</span> << r2 &l [...]
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">return</span> r2;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">double</span> ImgRegression::pgetR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">double</span>& c1, <span class="keyword [...]
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> c0=0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> c1=1;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">int</span> icol1=0,irow1=0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::vector<double> rowBuffer1(imgReader1.nrOfCol());</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> std::vector<double> rowBuffer2(imgReader2.nrOfCol());</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> srand(time(NULL));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span>(irow1=0;irow1<imgReader1.nrOfRow();++irow1){</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span>(irow1%m_down)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> icol1=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">double</span> icol2=0,irow2=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">double</span> geox=0,geoy=0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> imgReader1.readData(rowBuffer1,GDT_Float64,irow1,band1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(irow2<0||irow2>=imgReader2.nrOfRow())</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> imgReader2.readData(rowBuffer2,GDT_Float64,irow2,band2);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">for</span>(icol1=0;icol1<imgReader1.nrOfCol();++icol1){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(icol1%m_down)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> p*=100.0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> imgReader1.image2geo(icol1,irow1,geox,geoy);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> imgReader2.geo2image(geox,geoy,icol2,irow2);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(icol2<0||icol2>=imgReader2.nrOfCol())</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol1];</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol2];</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(imgReader1.isNoData(value1)||imgReader2.isNoData(value2))</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> std::cout << geox << <span class="stringliteral">" "</span> << geoy << <span class="stringliteral">" "</span> << icol1 << <span class="stringliteral">" "</span> << irow1 << <span class="stringliteral">" "</span> << icol2 << <span class="stringliteral">" "</span> << irow2 << <span class=" [...]
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">double</span> r=0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> r=stat.correlation(buffer1,buffer2);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// r=stat.gsl_correlation(buffer1,buffer2);</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">double</span> m1=0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">double</span> v1=0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">double</span> m2=0;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">double</span> v2=0;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> stat.meanVar(buffer1,m1,v1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> stat.meanVar(buffer2,m2,v2);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(v1>0){</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(r>=0)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> c1=v2/v1;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> c1=-v2/v1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> c0=m2-c1*m1;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> std::cout << <span class="stringliteral">"orthogonal regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with r^2: "</span> << r [...]
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> r*r;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">double</span> ImgRegression::getRMSE(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band2, <span class="keywordtype">double</span>& c0, <span clas [...]
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> c0=0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> c1=1;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordtype">int</span> icol=0,irow=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> std::vector<double> rowBuffer1(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> std::vector<double> rowBuffer2(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> srand(time(NULL));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> assert(band1>=0);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> assert(band1<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> assert(band2>=0);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> assert(band2<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span>(irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>(irow%m_down)</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> icol=0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> imgReader.readData(rowBuffer1,GDT_Float64,irow,band1);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> imgReader.readData(rowBuffer2,GDT_Float64,irow,band2);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">for</span>(icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(icol%m_down)</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> p*=100.0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol];</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol];</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(imgReader.isNoData(value1)||imgReader.isNoData(value2))</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> std::cout << icol << <span class="stringliteral">" "</span> << irow << <span class="stringliteral">" "</span> << buffer1.back() << <span class="stringliteral">" "</span> << buffer2.back() << std::endl;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">double</span> err=0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> err=stat.linear_regression_err(buffer1,buffer2,c0,c1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> std::cout << <span class="stringliteral">"linear regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with rmse: "</span> << err [...]
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">double</span> ImgRegression::getR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band2, <span class="keywordtype">double</span>& c0, <span class= [...]
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> c0=0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> c1=1;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">int</span> icol=0,irow=0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> std::vector<double> rowBuffer1(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> std::vector<double> rowBuffer2(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> srand(time(NULL));</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> assert(band1>=0);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> assert(band1<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> assert(band2>=0);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> assert(band2<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span>(irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span>(irow%m_down)</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> icol=0;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> imgReader.readData(rowBuffer1,GDT_Float64,irow,band1);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> imgReader.readData(rowBuffer2,GDT_Float64,irow,band2);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">for</span>(icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span>(icol%m_down)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> p*=100.0;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol];</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol];</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(imgReader.isNoData(value1)||imgReader.isNoData(value2))</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> std::cout << icol << <span class="stringliteral">" "</span> << irow << <span class="stringliteral">" "</span> << buffer1.back() << <span class="stringliteral">" "</span> << buffer2.back() << std::endl;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">double</span> r2=0;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> r2=stat.linear_regression(buffer1,buffer2,c0,c1);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> std::cout << <span class="stringliteral">"linear regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with r^2: "</span> << r2 &l [...]
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">return</span> r2;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordtype">double</span> ImgRegression::pgetR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band2, <span class="keywordtype">double</span>& c0, <span class [...]
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> c0=0;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> c1=1;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordtype">int</span> icol=0,irow=0;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> std::vector<double> rowBuffer1(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> std::vector<double> rowBuffer2(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> std::vector<double> buffer1;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> std::vector<double> buffer2;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> srand(time(NULL));</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> assert(band1>=0);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> assert(band1<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> assert(band2>=0);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> assert(band2<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">for</span>(irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">if</span>(irow%m_down)</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> icol=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> imgReader.readData(rowBuffer1,GDT_Float64,irow,band1);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> imgReader.readData(rowBuffer2,GDT_Float64,irow,band2);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">for</span>(icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(icol%m_down)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">if</span>(m_threshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> p*=100.0;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(p>m_threshold)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">//check for nodata</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordtype">double</span> value1=rowBuffer1[icol];</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">double</span> value2=rowBuffer2[icol];</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">if</span>(imgReader.isNoData(value1)||imgReader.isNoData(value2))</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> buffer1.push_back(value1);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> buffer2.push_back(value2);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> std::cout << icol << <span class="stringliteral">" "</span> << irow << <span class="stringliteral">" "</span> << buffer1.back() << <span class="stringliteral">" "</span> << buffer2.back() << std::endl;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordtype">double</span> r=0;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>(buffer1.size()&&buffer2.size()){</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> r=stat.correlation(buffer1,buffer2);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">// r=stat.gsl_correlation(buffer1,buffer2);</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">double</span> m1=0;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">double</span> v1=0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordtype">double</span> m2=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordtype">double</span> v2=0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> stat.meanVar(buffer1,m1,v1);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> stat.meanVar(buffer2,m2,v2);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">if</span>(v1>0){</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">if</span>(r>=0)</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> c1=v2/v1;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> c1=-v2/v1;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> c0=m2-c1*m1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> std::cout << <span class="stringliteral">"orthogonal regression based on "</span> << buffer1.size() << <span class="stringliteral">" points: "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << <span class="stringliteral">" with r^2: "</span> << r [...]
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">return</span> r*r;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgRegression_8h_source.html b/doc/html/ImgRegression_8h_source.html
new file mode 100644
index 0000000..d203855
--- /dev/null
+++ b/doc/html/ImgRegression_8h_source.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/ImgRegression.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgRegression.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgRegression.h: class to calculate regression between two raster datasets</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGREGRESSION_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGREGRESSION_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "StatFactory.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span>imgregression</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classimgregression_1_1ImgRegression.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classimgregression_1_1ImgRegression.html">ImgRegression</a>{</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classimgregression_1_1ImgRegression.html">ImgRegression</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> ~<a class="code" href="classimgregression_1_1ImgRegression.html">ImgRegression</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">double</span> getRMSE(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1, <span class="keywordtype">unsi [...]
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">double</span> getRMSE(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> b1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> b2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">d [...]
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">double</span> getR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1, <span class="keywordtype">unsign [...]
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">double</span> pgetR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader1, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">double</span>& c1, <span class="keywordtype">unsig [...]
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">double</span> getR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> b1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> b2, <span class="keywordtype">double</span>& c0, <span class="keywordtype">dou [...]
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">double</span> pgetR2(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band1, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> band2, <span class="keywordtype">double</span>& c0, <span class="keywordty [...]
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> setThreshold(<span class="keywordtype">double</span> theThreshold){m_threshold=theThreshold;};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> setDown(<span class="keywordtype">int</span> theDown){m_down=theDown;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> m_down;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> m_threshold;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> };</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#endif //_IMGREGRESSION_H_</span></div>
+<div class="ttc" id="classimgregression_1_1ImgRegression_html"><div class="ttname"><a href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgRegression_8h_source.html#l00030">ImgRegression.h:30</a></div></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgWriterGdal_8cc_source.html b/doc/html/ImgWriterGdal_8cc_source.html
new file mode 100644
index 0000000..0500069
--- /dev/null
+++ b/doc/html/ImgWriterGdal_8cc_source.html
@@ -0,0 +1,727 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgWriterGdal.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterGdal.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgWriterGdal.cc: class to write raster files using GDAL API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <time.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "ogr_spatialref.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "gdal_alg.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ImgWriterGdal::ImgWriterGdal(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> : m_gds(NULL), m_ncol(0), m_nrow(0), m_nband(0)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {}</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// ImgWriterGdal::ImgWriterGdal(void)</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// : m_gds(NULL), m_magic_x(1), m_magic_y(1), m_isGeoRef(false), m_ncol(0), m_nrow(0), m_nband(0), m_interleave("BAND"), m_compression("LZW")</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// {}</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ImgWriterGdal::~ImgWriterGdal(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// delete m_gds;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// GDALDumpOpenDatasets(stderr);</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// GDALDestroyDriverManager();//could still be be used by other objects</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> ImgWriterGdal::open(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgSrc, <span class="keyword">const</span> std::vector<std::string>& options)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// m_isGeoRef=imgSrc.isGeoRef();</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> m_filename=filename;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> m_ncol=imgSrc.nrOfCol();</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> m_nrow=imgSrc.nrOfRow();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> m_nband=imgSrc.nrOfBand();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> m_type=imgSrc.getDataType();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> m_options=options;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// m_interleave=imgSrc.getInterleave();</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// m_compression=imgSrc.getCompression();</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// imgSrc.getMagicPixel(m_magic_x,m_magic_y);</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> setCodec(imgSrc);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// void ImgWriterGdal::open(const std::string& filename, int ncol, int nrow, int nband, const GDALDataType& dataType, const std::string& imageType, const std::string& interleave, const std::string& compression, int magicX, int magicY)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// m_isGeoRef=false;</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// m_filename = filename;</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// m_ncol = ncol;</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// m_nrow = nrow;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// m_nband = nband;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// m_type=dataType;</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// m_interleave = interleave;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// m_compression=compression;</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// m_magic_x=magicX;</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// m_magic_y=magicY;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// setCodec(imageType);</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> ImgWriterGdal::open(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">int</span> ncol, <span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> nband, <span class="keyword">const</span> GDALDataType& dataType, <span class="keyword">const</span> std::string& imageType, <span class="keyword">const</span> std [...]
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// m_isGeoRef=false;</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> m_filename = filename;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> m_ncol = ncol;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> m_nrow = nrow;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> m_nband = nband;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> m_type=dataType;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// m_interleave = interleave;</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// m_compression=compression;</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> m_options=options;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// m_magic_x=magicX;</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// m_magic_y=magicY;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> setCodec(imageType);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> ImgWriterGdal::close(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> GDALClose(m_gds);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span>(std::vector<std::string>::const_iterator optionIt=m_options.begin();optionIt!=m_options.end();++optionIt)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> papszOptions=CSLAddString(papszOptions,optionIt->c_str());</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> CSLDestroy(papszOptions);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> ImgWriterGdal::setCodec(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgSrc){</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> GDALAllRegister();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> GDALDriver *poDriver;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> poDriver = GetGDALDriverManager()->GetDriverByName(imgSrc.getDriverDescription().c_str());</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>( poDriver == NULL ){</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">char</span> **papszMetadata;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> papszMetadata = poDriver->GetMetadata();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//todo: try and catch if CREATE is not supported (as in PNG)</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> assert( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">for</span>(std::vector<std::string>::const_iterator optionIt=m_options.begin();optionIt!=m_options.end();++optionIt)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> papszOptions=CSLAddString(papszOptions,optionIt->c_str());</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// char **papszOptions=NULL;</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// std::ostringstream compressList;</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// compressList << "COMPRESS=" << m_compression;</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// papszOptions = CSLAddString(papszOptions,(compressList.str()).c_str());</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// std::ostringstream interleaveList;</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// interleaveList << "INTERLEAVE=" << m_interleave;</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// papszOptions = CSLAddString(papszOptions,(interleaveList.str()).c_str());</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> m_gds=poDriver->Create(m_filename.c_str(),m_ncol,m_nrow,m_nband,m_type,papszOptions);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// if(imgSrc.isGeoRef()){</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> setProjection(imgSrc.getProjection());</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> imgSrc.getGeoTransform(gt);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> setGeoTransform(gt);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> m_gds->SetMetadata(imgSrc.getMetadata() ); </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_DOCUMENTNAME"</span>, m_filename.c_str());</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> std::string versionString=<span class="stringliteral">"pktools "</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> versionString+=VERSION;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> versionString+=<span class="stringliteral">" by Pieter Kempeneers"</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_SOFTWARE"</span>, versionString.c_str());</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> time_t rawtime;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> time ( &rawtime );</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> time_t tim=time(NULL);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> tm *now=localtime(&tim);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> std::ostringstream datestream;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">//date std::string must be 20 characters long...</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> datestream << now->tm_year+1900;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(now->tm_mon+1<10)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> datestream << <span class="stringliteral">":0"</span> << now->tm_mon+1;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> datestream << <span class="stringliteral">":"</span> << now->tm_mon+1;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(now->tm_mday<10)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> datestream << <span class="stringliteral">":0"</span> << now->tm_mday;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> datestream << <span class="stringliteral">":"</span> << now->tm_mday;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(now->tm_hour<10)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> datestream << <span class="stringliteral">" 0"</span> << now->tm_hour;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> datestream << <span class="stringliteral">" "</span> << now->tm_hour;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(now->tm_min<10)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> datestream << <span class="stringliteral">":0"</span> << now->tm_min;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> datestream << <span class="stringliteral">":"</span> << now->tm_min;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(now->tm_sec<10)</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> datestream << <span class="stringliteral">":0"</span> << now->tm_sec;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> datestream << <span class="stringliteral">":"</span> << now->tm_sec;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_DATETIME"</span>, datestream.str().c_str());</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// list<std::string> lmeta;</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// imgReader.getMetadata(lmeta);</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// list<std::string>::const_iterator lit=lmeta.begin();</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// while(lit!=lmeta.end()){</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// cout << *lit << endl;</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// ++lit;</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// m_gds->SetMetadataItem( "INTERLEAVE", m_interleave.c_str(), "IMAGE_STRUCTURE" );</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// m_gds->SetMetadataItem( "COMPRESS", m_compression.c_str(), "IMAGE_STRUCTURE" );</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(imgSrc.getColorTable()!=NULL)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> setColorTable(imgSrc.getColorTable());</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">void</span> ImgWriterGdal::setCodec(<span class="keyword">const</span> std::string& imageType)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> {</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> GDALAllRegister();</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> GDALDriver *poDriver;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> poDriver = GetGDALDriverManager()->GetDriverByName(imageType.c_str());</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>( poDriver == NULL ){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::ostringstream s;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> s << <span class="stringliteral">"FileOpenError ("</span> << imageType << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">char</span> **papszMetadata;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> papszMetadata = poDriver->GetMetadata();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">//todo: try and catch if CREATE is not supported (as in PNG)</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> assert( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ));</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">for</span>(std::vector<std::string>::const_iterator optionIt=m_options.begin();optionIt!=m_options.end();++optionIt)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> papszOptions=CSLAddString(papszOptions,optionIt->c_str());</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// std::ostringstream compressList;</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// compressList << "COMPRESS=" << m_compression;</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// papszOptions = CSLAddString(papszOptions,(compressList.str()).c_str());</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// std::ostringstream interleaveList;</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// interleaveList << "INTERLEAVE=" << m_interleave;</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">// papszOptions = CSLAddString(papszOptions,(interleaveList.str()).c_str());</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> m_gds=poDriver->Create(m_filename.c_str(),m_ncol,m_nrow,m_nband,m_type,papszOptions);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// m_gds->SetMetadataItem( "INTERLEAVE", m_interleave.c_str(), "IMAGE_STRUCTURE" );</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// m_gds->SetMetadataItem( "COMPRESSION", m_compression.c_str(), "IMAGE_STRUCTURE" );</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_DOCUMENTNAME"</span>, m_filename.c_str());</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> std::string versionString=<span class="stringliteral">"pktools "</span>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> versionString+=VERSION;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> versionString+=<span class="stringliteral">" by Pieter Kempeneers"</span>;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_SOFTWARE"</span>, versionString.c_str());</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> time_t rawtime;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> time ( &rawtime );</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> time_t tim=time(NULL);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> tm *now=localtime(&tim);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> std::ostringstream datestream;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">//date std::string must be 20 characters long...</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> datestream << now->tm_year+1900;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>(now->tm_mon+1<10)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> datestream << <span class="stringliteral">":0"</span> << now->tm_mon+1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> datestream << <span class="stringliteral">":"</span> << now->tm_mon+1;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(now->tm_mday<10)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> datestream << <span class="stringliteral">":0"</span> << now->tm_mday;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> datestream << <span class="stringliteral">":"</span> << now->tm_mday;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(now->tm_hour<10)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> datestream << <span class="stringliteral">" 0"</span> << now->tm_hour;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> datestream << <span class="stringliteral">" "</span> << now->tm_hour;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span>(now->tm_min<10)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> datestream << <span class="stringliteral">":0"</span> << now->tm_min;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> datestream << <span class="stringliteral">":"</span> << now->tm_min;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(now->tm_sec<10)</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> datestream << <span class="stringliteral">":0"</span> << now->tm_sec;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> datestream << <span class="stringliteral">":"</span> << now->tm_sec;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_DATETIME"</span>, datestream.str().c_str());</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// m_gds->SetMetadataItem( "TIFFTAG_DATETIME", ctime(&rawtime));</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">void</span> ImgWriterGdal::setMetadata(<span class="keywordtype">char</span>** metadata)</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> {</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> assert(m_gds);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> m_gds->SetMetadata(metadata); </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> std::string ImgWriterGdal::getProjection(<span class="keywordtype">void</span>)<span class="keyword"> const </span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> assert(m_gds);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> std::string theProjection=m_gds->GetProjectionRef();</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">//due to error in Gdal? AUTHORITY fields do not seem to work!</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// size_t startpos,endpos;</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// while((startpos=theProjection.find(",AUTHORITY"))!=string::npos){</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// endpos=theProjection.find("]",startpos+1,1)+1;</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">// theProjection.erase(startpos,endpos-startpos);</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">return</span> theProjection;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">void</span> ImgWriterGdal::setGeoTransform(<span class="keywordtype">double</span>* gt){</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// m_isGeoRef=true;</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> m_gt[0]=gt[0];</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> m_gt[1]=gt[1];</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> m_gt[2]=gt[2];</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> m_gt[3]=gt[3];</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> m_gt[4]=gt[4];</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> m_gt[5]=gt[5];</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(m_gds)</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> m_gds->SetGeoTransform(m_gt);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// void ImgWriterGdal::setGeoTransform(double ulx, double uly, double deltaX, double deltaY, double rot1, double rot2)</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// m_isGeoRef=true;</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// m_ulx=ulx;</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// m_uly=uly;</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">// m_delta_x=deltaX;</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// m_delta_y=deltaY;</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">// double adfGeoTransform[6];// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// adfGeoTransform[0]=ulx;</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// adfGeoTransform[1]=deltaX;</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// adfGeoTransform[2]=rot1;</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// adfGeoTransform[3]=uly;</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// adfGeoTransform[4]=rot2;</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// adfGeoTransform[5]=-deltaY;//convention of GDAL!</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// if(m_gds)</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// m_gds->SetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">void</span> ImgWriterGdal::copyGeoTransform(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgSrc)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> setProjection(imgSrc.getProjection());</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> imgSrc.getGeoTransform(gt);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> setGeoTransform(gt);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// imgSrc.getGeoTransform(ulx,uly,deltaX,deltaY,rot1,rot2);</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// setGeoTransform(ulx,uly,deltaX,deltaY,rot1,rot2);</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> std::string ImgWriterGdal::setProjectionProj4(<span class="keyword">const</span> std::string& projection)</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// if(!m_isGeoRef)</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// m_isGeoRef=true;</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> OGRSpatialReference theRef;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> theRef.SetFromUserInput(projection.c_str());</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">char</span> *wktString;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> theRef.exportToWkt(&wktString);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> assert(m_gds);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> m_gds->SetProjection(wktString);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">return</span>(wktString);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">// OGRSpatialReferenceH hSRS; </span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">// char *pszResult = NULL; </span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">// CPLErrorReset(); </span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">// hSRS = OSRNewSpatialReference( NULL ); </span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">// if( OSRSetFromUserInput( hSRS, projection.c_str() ) == OGRERR_NONE ) </span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">// OSRExportToWkt( hSRS, &pszResult ); </span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">// else </span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// { </span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">// std::ostringstream s;</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment">// s << "Error in set projection " << projection;</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">// throw(s.str());</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">// } </span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// std::string theProjection=pszResult;</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// assert(m_gds);</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// m_gds->SetProjection(theProjection.c_str());</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// OSRDestroySpatialReference( hSRS ); </span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// return theProjection; </span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">void</span> ImgWriterGdal::setProjection(<span class="keyword">const</span> std::string& projection)</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment">// if(!m_isGeoRef)</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">// m_isGeoRef=true;</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> OGRSpatialReference oSRS;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">char</span> *pszSRS_WKT = NULL;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> assert(m_gds);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> m_gds->SetProjection(projection.c_str());</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> CPLFree(pszSRS_WKT);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">//default projection: ETSR-LAEA</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> std::string ImgWriterGdal::setProjection(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::string theProjection;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> OGRSpatialReference oSRS;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">char</span> *pszSRS_WKT = NULL;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> oSRS.SetGeogCS(<span class="stringliteral">"ETRS89"</span>,<span class="stringliteral">"European_Terrestrial_Reference_System_1989"</span>,<span class="stringliteral">"GRS 1980"</span>,6378137,298.2572221010042,<span class="stringliteral">"Greenwich"</span>,0,<span class="stringliteral">"degree"</span>,0.0174532925199433);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// cout << setprecision(16) << "major axis: " << oSRS.GetSemiMajor(NULL) << endl;//notice that major axis can be set to a different value than the default to the well known standard corresponding to the name (European_Terrestrial_Reference_System_1989), but that new value, while recognized by GetSemiMajor, will not be written in the geotiff tag!</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> oSRS.SetProjCS( <span class="stringliteral">"ETRS89 / ETRS-LAEA"</span> );</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> oSRS.SetLAEA(52,10,4321000,3210000);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> oSRS.exportToWkt( &pszSRS_WKT );</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> theProjection=pszSRS_WKT;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> CPLFree( pszSRS_WKT );</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> assert(m_gds);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> m_gds->SetProjection(theProjection.c_str());</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span>(theProjection);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordtype">bool</span> ImgWriterGdal::getBoundingBox(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> ulx=gt[0];</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> uly=gt[3];</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> lrx=gt[0]+nrOfCol()*gt[1]+nrOfRow()*gt[2];</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> lry=gt[3]+nrOfCol()*gt[4]+nrOfRow()*gt[5];</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// ulx=m_ulx;</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">// uly=m_uly;</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// lrx=ulx+nrOfCol()*m_delta_x;</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">// lry=uly-nrOfRow()*m_delta_y;</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// ulx=0;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// uly=nrOfRow()-1;</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// lrx=nrOfCol()-1;</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment">// lry=0;</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> }</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">bool</span> ImgWriterGdal::getCentrePos(<span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> x=gt[0]+(nrOfCol()/2.0)*gt[1]+(nrOfRow()/2.0)*gt[2];</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> y=gt[3]+(nrOfCol()/2.0)*gt[4]+(nrOfRow()/2.0)*gt[5];</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">// x=m_ulx+nrOfCol()/2.0*m_delta_x;</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">// y=m_uly-nrOfRow()/2.0*m_delta_y;</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">bool</span> ImgWriterGdal::geo2image(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span>& i, <span class="keywordtype">double</span>& j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">//double values are returned, caller is responsible for interpolation step</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">//double values are returned, caller is responsible for interpolation step</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">double</span> denom=(gt[1]-gt[2]*gt[4]/gt[5]);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordtype">double</span> eps=0.00001;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(fabs(denom)>eps){</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> i=(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> j=(y-gt[3]-gt[4]*(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom)/gt[5];</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> }</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// double ulx=m_ulx;</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">// double uly=m_uly;</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">// i=(x-ulx)/m_delta_x;</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment">// j=(uly-y)/m_delta_y;</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment">// i=x;</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="comment">// j=nrOfRow()-y;</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">//centre of pixel is always returned (regardless of magic pixel reference)!</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">bool</span> ImgWriterGdal::image2geo(<span class="keywordtype">double</span> i, <span class="keywordtype">double</span> j, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment">//assuming</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="comment">//adfGeotransform[0]: ULX (upper left X coordinate)</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">//adfGeotransform[1]: $cos(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">//adfGeotransform[2]: $-sin(\alpha)\cdot\textrm{Xres}$</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">//adfGeotransform[3]: ULY (upper left Y coordinate)</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">//adfGeotransform[4]: $-sin(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">//adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> x=gt[0]+(0.5+i)*gt[1]+(0.5+j)*gt[2];</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> y=gt[3]+(0.5+i)*gt[4]+(0.5+j)*gt[5];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(isGeoRef()){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">// x=m_ulx+(0.5+i)*m_delta_x;</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment">// y=m_uly-(0.5+j)*m_delta_y;</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> }</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordtype">bool</span> ImgWriterGdal::covers(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">return</span>((x > theULX)&&</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> (x < theLRX)&&</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> (y < theULY)&&</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> (y >theLRY));</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">bool</span> ImgWriterGdal::covers(<span class="keywordtype">double</span> ulx, <span class="keywordtype">double</span> uly, <span class="keywordtype">double</span> lrx, <span class="keywordtype">double</span> lry)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">return</span>((ulx < theLRX)&&(lrx > theULX)&&(lry < theULY)&&(uly > theLRY));</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> std::string ImgWriterGdal::getGeoTransform()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">if</span>(m_gds)</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">else</span>{<span class="comment">//virtual writer</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> gt[0]=m_gt[0];</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> gt[1]=m_gt[1];</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> gt[2]=m_gt[2];</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> gt[3]=m_gt[3];</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> gt[4]=m_gt[4];</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> gt[5]=m_gt[5];</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> std::ostringstream s;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> s << <span class="stringliteral">"["</span> << gt[0] << <span class="stringliteral">","</span> << gt[1] << <span class="stringliteral">","</span> << gt[2] << <span class="stringliteral">","</span> << gt[3] << <span class="stringliteral">","</span> << gt[4] << <span class="stringliteral">",& [...]
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">return</span>(s.str());</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordtype">void</span> ImgWriterGdal::getGeoTransform(<span class="keywordtype">double</span>* gt)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">if</span>(m_gds)</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> m_gds->GetGeoTransform(gt);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">else</span>{<span class="comment">//virtual writer</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> gt[0]=m_gt[0];</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> gt[1]=m_gt[1];</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> gt[2]=m_gt[2];</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> gt[3]=m_gt[3];</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> gt[4]=m_gt[4];</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> gt[5]=m_gt[5];</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">// void ImgWriterGdal::getGeoTransform(double& ulx, double& uly, double& deltaX, double& deltaY, double& rot1, double& rot2) const</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">// if(m_gds){</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment">// double adfGeoTransform[6];// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// m_gds->GetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// ulx=adfGeoTransform[0];</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// deltaX=adfGeoTransform[1];</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">// rot1=adfGeoTransform[2];</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// uly=adfGeoTransform[3];</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment">// rot2=adfGeoTransform[4];</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment">// deltaY=-adfGeoTransform[5];//convention of GDAL!</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment">// else{//virtual writer</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="comment">// ulx=m_ulx;</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">// uly=m_uly;</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// deltaX=m_delta_x;</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// deltaY=m_delta_y;</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// rot1=0;</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// rot2=0;</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> GDALDataType ImgWriterGdal::getDataType(<span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> assert(band<m_nband+1);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">return</span> (m_gds->GetRasterBand(band+1))->GetRasterDataType();</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> GDALRasterBand* ImgWriterGdal::getRasterBand(<span class="keywordtype">int</span> band)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> {</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> assert(band<m_nband+1);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">return</span> (m_gds->GetRasterBand(band+1));</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">//filename is ascii file containing 5 columns: index R G B ALFA (0:transparent, 255:solid)</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordtype">void</span> ImgWriterGdal::setColorTable(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">int</span> band)</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> {</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">//todo: fool proof table in file (no checking currently done...)</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> std::ifstream ftable(filename.c_str(),std::ios::in);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> std::string line;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment">// poCT=new GDALColorTable();</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> GDALColorTable colorTable;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordtype">short</span> nline=0;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">while</span>(getline(ftable,line)){</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> ++nline;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> std::istringstream ist(line);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> GDALColorEntry sEntry;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">short</span> id;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> ist >> <span class="keywordtype">id</span> >> sEntry.c1 >> sEntry.c2 >> sEntry.c3 >> sEntry.c4;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="comment">// poCT->SetColorEntry(id,&sEntry);</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> colorTable.SetColorEntry(<span class="keywordtype">id</span>,&sEntry);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="comment">// assert(nline==colorTable.GetColorEntryCount());</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">// (m_gds->GetRasterBand(band+1))->SetColorTable(poCT);</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> (m_gds->GetRasterBand(band+1))->SetColorTable(&colorTable);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">void</span> ImgWriterGdal::setColorTable(GDALColorTable* colorTable, <span class="keywordtype">int</span> band)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> (m_gds->GetRasterBand(band+1))->SetColorTable(colorTable);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="comment">//write an entire image from memory to file</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">bool</span> ImgWriterGdal::writeData(<span class="keywordtype">void</span>* pdata, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> band)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">if</span>(band>=nrOfBand()+1){</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> std::ostringstream s;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> s << <span class="stringliteral">"band ("</span> << band << <span class="stringliteral">") exceeds nrOfBand ("</span> << nrOfBand() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> poBand->RasterIO(GF_Write,0,0,nrOfCol(),nrOfRow(),pdata,nrOfCol(),nrOfRow(),dataType,0,0);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> } </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordtype">void</span> ImgWriterGdal::rasterizeOgr(<a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& ogrReader, <span class="keyword">const</span> std::vector<double>& burnValues, <span class="keyword">const</span> std::vector<std::string>& layernames ){</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> std::vector<int> bands;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> std::vector<double> burnBands;<span class="comment">//burn values for all bands in a single layer</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> std::vector<double> burnLayers;<span class="comment">//burn values for all bands and all layers</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span>(burnValues.empty()){</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> std::string errorString=<span class="stringliteral">"Error: burn values not provided"</span>;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> }</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> burnBands=burnValues;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">while</span>(burnBands.size()<nrOfBand())</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> burnBands.push_back(burnValues[0]);</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nrOfBand();++iband)</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> bands.push_back(iband+1);</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> std::vector<OGRLayerH> layers;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordtype">int</span> nlayer=0;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<ogrReader.getLayerCount();++ilayer){</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> std::string currentLayername=ogrReader.getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">if</span>(layernames.size())</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">if</span>(find(layernames.begin(),layernames.end(),currentLayername)==layernames.end())</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> std::cout << <span class="stringliteral">"processing layer "</span> << currentLayername << std::endl;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> layers.push_back((OGRLayerH)ogrReader.getLayer(ilayer));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> ++nlayer;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nrOfBand();++iband)</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> burnLayers.insert(burnLayers.end(),burnBands.begin(),burnBands.end());</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">void</span> *pTransformArg;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordtype">char</span> **papszOptions;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordtype">double</span> dfComplete=0.0;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">if</span>(GDALRasterizeLayers( (GDALDatasetH)m_gds,nrOfBand(),&(bands[0]),layers.size(),&(layers[0]),NULL,pTransformArg,&(burnLayers[0]),papszOptions,pfnProgress,pProgressArg)!=CE_None){</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> std::cerr << CPLGetLastErrorMsg() << std::endl;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> exit(1);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> }</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> dfComplete=1.0;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgWriterGdal_8h_source.html b/doc/html/ImgWriterGdal_8h_source.html
new file mode 100644
index 0000000..cf7f5d7
--- /dev/null
+++ b/doc/html/ImgWriterGdal_8h_source.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgWriterGdal.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterGdal.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgWriterGdal.h: class to write raster files using GDAL API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">n</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGWRITERGDAL_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGWRITERGDAL_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "gdal_priv.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classImgWriterGdal.html"> 32</a></span> <span class="keyword">class </span><a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ~<a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgSrc, <span class="keyword">const</span> std::vector<std::string>& options=std::vector<std::string>());</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// void open(const std::string& filename, int ncol, int nrow, int nband, const GDALDataType& dataType, const std::string& imageType="GTiff", const std::string& interleave="BAND", const std::string& compression="LZW", int magicX=1, int magicY=1);</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">int</span> ncol, <span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> nband, <span class="keyword">const</span> GDALDataType& dataType, <span class="keyword">const</span> std::string& imageType, <span class="keyword">const</span> std::vector<s [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> std::string getFileName()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_filename;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> nrOfCol(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ncol;};</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> nrOfRow(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_nrow;};</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> nrOfBand(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_nband;};</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> copyGeoTransform(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgSrc);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> std::string setProjection(<span class="keywordtype">void</span>);<span class="comment">//set (and return) default projection ETSR-LAEA</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> setProjection(<span class="keyword">const</span> std::string& projection);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> std::string setProjectionProj4(<span class="keyword">const</span> std::string& projection);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> setImageDescription(<span class="keyword">const</span> std::string& imageDescription){m_gds->SetMetadataItem( <span class="stringliteral">"TIFFTAG_IMAGEDESCRIPTION"</span>,imageDescription.c_str());};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> CPLErr GDALSetNoDataValue(<span class="keywordtype">double</span> noDataValue, <span class="keywordtype">int</span> band=0) {<span class="keywordflow">return</span> getRasterBand(band)->SetNoDataValue(noDataValue);};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> std::string getProjection(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> std::string getGeoTransform() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> getGeoTransform(<span class="keywordtype">double</span>* gt) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> setGeoTransform(<span class="keywordtype">double</span>* gt);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* void setGeoTransform(double ulx, double uly, double deltaX, double deltaY, double rot1=0, double rot2=0); */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">/* void getGeoTransform(double& ulx, double& uly, double& deltaX, double& deltaY, double& rot1, double& rot2) const; */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">bool</span> getBoundingBox(<span class="keywordtype">double</span>& ulx, <span class="keywordtype">double</span>& uly, <span class="keywordtype">double</span>& lrx, <span class="keywordtype">double</span>& lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">bool</span> getCentrePos(<span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">bool</span> covers(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">bool</span> covers(<span class="keywordtype">double</span> ulx, <span class="keywordtype">double</span> uly, <span class="keywordtype">double</span> lrx, <span class="keywordtype">double</span> lry) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">bool</span> geo2image(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span>& i, <span class="keywordtype">double</span>& j) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">bool</span> image2geo(<span class="keywordtype">double</span> i, <span class="keywordtype">double</span> j, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">bool</span> isGeoRef()<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">if</span>(gt[5]<0) <span class="keywordflow">return</span> <span class="keyword">true</span>;<span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;};</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// void getMagicPixel(double& x, double& y) const {x=m_magic_x;y=m_magic_y;};</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> getDeltaX(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">return</span> gt[1];};</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> getDeltaY(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordtype">double</span> gt[6];getGeoTransform(gt);<span class="keywordflow">return</span> -gt[5];};</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> writeData(T& value, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> writeData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <spa [...]
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> writeData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">bool</span> writeData(<span class="keywordtype">void</span>* pdata, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> writeDataBlock(<a class="code" href="classVector2d.html">Vector2d<T></a>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> minRow [...]
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// std::string getInterleave(){return m_interleave;};</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// std::string getCompression(){return m_compression;};</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> GDALDataType getDataType(<span class="keywordtype">int</span> band=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> GDALRasterBand* getRasterBand(<span class="keywordtype">int</span> band);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> setColorTable(<span class="keyword">const</span> std::string& filename, <span class="keywordtype">int</span> band=0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> setColorTable(GDALColorTable* colorTable, <span class="keywordtype">int</span> band=0);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> setMetadata(<span class="keywordtype">char</span>** metadata);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> rasterizeOgr(<a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& ogrReader, <span class="keyword">const</span> std::vector<double>& burnValues=std::vector<double>(), <span class="keyword">const</span> std::vector<std::string>& layernames=std::vector<std::string>());</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> setCodec(<span class="keyword">const</span> std::string& imageType);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> setCodec(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& ImgSrc);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> std::string m_filename;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> GDALDataset *m_gds;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">int</span> m_ncol;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">int</span> m_nrow;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> m_nband;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> GDALDataType m_type;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">double</span> m_gt[6];</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">/* double m_ulx; */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">/* double m_uly; */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">/* double m_delta_x; */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">/* double m_delta_y; */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/* bool m_isGeoRef; */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// std::string m_interleave;</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// std::string m_compression;</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> std::vector<std::string> m_options;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> };</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> ImgWriterGdal::writeData(T& value, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(band>=nrOfBand()+1){</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> std::ostringstream s;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> s << <span class="stringliteral">"band ("</span> << band << <span class="stringliteral">") exceeds nrOfBand ("</span> << nrOfBand() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(col>=nrOfCol()){</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::ostringstream s;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> s << <span class="stringliteral">"col ("</span> << col << <span class="stringliteral">") exceeds nrOfCol ("</span> << nrOfCol() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(col<0){</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> std::ostringstream s;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> s << <span class="stringliteral">"col ("</span> << col << <span class="stringliteral">") is negative"</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(row>=nrOfRow()){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> std::ostringstream s;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> s << <span class="stringliteral">"row ("</span> << row << <span class="stringliteral">") exceeds nrOfRow ("</span> << nrOfRow() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(row<0){</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> std::ostringstream s;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> s << <span class="stringliteral">"row ("</span> << row << <span class="stringliteral">") is negative"</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> poBand->RasterIO(GF_Write,col,row,1,1,&value,1,1,dataType,0,0);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> ImgWriterGdal::writeData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> [...]
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(band>=nrOfBand()+1){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> std::ostringstream s;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> s << <span class="stringliteral">"band ("</span> << band << <span class="stringliteral">") exceeds nrOfBand ("</span> << nrOfBand() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(buffer.size()!=maxCol-minCol+1){</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> std::string errorstring=<span class="stringliteral">"invalid buffer size"</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(minCol>=nrOfCol()){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> std::ostringstream s;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> s << <span class="stringliteral">"minCol ("</span> << minCol << <span class="stringliteral">") exceeds nrOfCol ("</span> << nrOfCol() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(minCol<0){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> std::ostringstream s;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> s << <span class="stringliteral">"mincol ("</span> << minCol << <span class="stringliteral">") is negative"</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(maxCol>=nrOfCol()){</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::ostringstream s;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> s << <span class="stringliteral">"maxCol ("</span> << maxCol << <span class="stringliteral">") exceeds nrOfCol ("</span> << nrOfCol() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span>(maxCol<minCol){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> std::ostringstream s;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> s << <span class="stringliteral">"maxCol ("</span> << maxCol << <span class="stringliteral">") is less than minCol ("</span> << minCol << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(row>=nrOfRow()){</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> std::ostringstream s;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> s << <span class="stringliteral">"row ("</span> << row << <span class="stringliteral">") exceeds nrOfRow ("</span> << nrOfRow() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(row<0){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::ostringstream s;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> s << <span class="stringliteral">"row ("</span> << row << <span class="stringliteral">") is negative"</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> poBand->RasterIO(GF_Write,minCol,row,buffer.size(),1,&(buffer[0]),buffer.size(),1,dataType,0,0);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> ImgWriterGdal::writeData(std::vector<T>& buffer, <span class="keyword">const</span> GDALDataType& dataType, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> band)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(band>=nrOfBand()+1){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::ostringstream s;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> s << <span class="stringliteral">"band ("</span> << band << <span class="stringliteral">") exceeds nrOfBand ("</span> << nrOfBand() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(buffer.size()!=nrOfCol()){</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> std::string errorstring=<span class="stringliteral">"invalid buffer size"</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(row>=nrOfRow()){</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::ostringstream s;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> s << <span class="stringliteral">"row ("</span> << row << <span class="stringliteral">") exceeds nrOfRow ("</span> << nrOfRow() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> poBand->RasterIO(GF_Write,0,row,buffer.size(),1,&(buffer[0]),buffer.size(),1,dataType,0,0);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> ImgWriterGdal::writeDataBlock(<a class="code" href="classVector2d.html">Vector2d<T></a>& buffer, <span class="keyword">const</span> GDALDataType& dataType , <span class="keywordtype">int</span> minCol, <span class="keywordtype">int</span> maxCol, <span class="keywordtype">int< [...]
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">//fetch raster band</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> GDALRasterBand *poBand;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(band>=nrOfBand()+1){</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> std::ostringstream s;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> s << <span class="stringliteral">"band ("</span> << band << <span class="stringliteral">") exceeds nrOfBand ("</span> << nrOfBand() << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> poBand = m_gds->GetRasterBand(band+1);<span class="comment">//GDAL uses 1 based index</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> assert(buffer.size()==maxRow-minRow+1);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=minRow;irow<=maxRow;++irow)</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> writeData(buffer[irow-minRow], dataType, minCol, maxCol, irow, band);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor">#endif // _IMGWRITERGDAL_H_</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// adfGeoTransform[0] /* top left x */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// adfGeoTransform[1] /* w-e pixel resolution */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// adfGeoTransform[2] /* rotation, 0 if image is "north up" */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// adfGeoTransform[3] /* top left y */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// adfGeoTransform[4] /* rotation, 0 if image is "north up" */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// adfGeoTransform[5] /* n-s pixel resolution */</span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgWriterOgr_8cc_source.html b/doc/html/ImgWriterOgr_8cc_source.html
new file mode 100644
index 0000000..59b929b
--- /dev/null
+++ b/doc/html/ImgWriterOgr_8cc_source.html
@@ -0,0 +1,742 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgWriterOgr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterOgr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgWriterOgr.cc: class to write vector files using OGR API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "cpl_string.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> ImgWriterOgr::ImgWriterOgr(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {}</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> ImgWriterOgr::~ImgWriterOgr(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ImgWriterOgr::ImgWriterOgr(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string& imageType)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> open(filename,imageType);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ImgWriterOgr::ImgWriterOgr(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> m_filename=filename;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> setCodec(imgReaderOgr.getDriver());</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> nlayer=imgReaderOgr.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayer;++ilayer){</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> copyFields(imgReaderOgr,ilayer,ilayer);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> ImgWriterOgr::ImgWriterOgr(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr, <span class="keywordtype">bool</span> copyData)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> CPLErrorReset();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> m_filename=filename;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> setCodec(imgReaderOgr.getDriver());</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> nlayer=imgReaderOgr.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayer;++ilayer){</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> copyFields(imgReaderOgr,ilayer,ilayer);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span>(copyData){</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">while</span>(<span class="keyword">true</span>){<span class="comment">// (poFeature = imgReaderOgr.getLayer()->GetNextFeature()) != NULL ){</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> poFeature = imgReaderOgr.getLayer(ilayer)->GetNextFeature();</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>( poFeature == NULL )</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> OGRFeature *poDstFeature = NULL;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> poDstFeature=createFeature(ilayer);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">//todo: check here if SetFrom works (experienced segmentation fault)</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span>( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> std::string errorString=<span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> fmt=errorString.c_str();</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> fmt,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> poFeature->GetFID(), getLayerName().c_str() );</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// CPLError( CE_Failure, CPLE_AppDefined,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// "Unable to translate feature %d from layer %s.\n",</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// poFeature->GetFID(), getLayerName().c_str() );</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> poDstFeature->SetFID( poFeature->GetFID() );</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> CPLErrorReset();</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span>(createFeature( poDstFeature,ilayer ) != OGRERR_NONE){</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> std::string errorString=<span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> fmt=errorString.c_str();</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> fmt,</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> poFeature->GetFID(), getLayerName().c_str() );</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">void</span> ImgWriterOgr::open(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> m_filename=filename;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> setCodec(imgReaderOgr.getDriver());</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">int</span> nlayer=imgReaderOgr.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayer;++ilayer){</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> copyFields(imgReaderOgr,ilayer,ilayer);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> ImgWriterOgr::open(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string& imageType)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> m_filename = filename;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> setCodec(imageType);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> ImgWriterOgr::close(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> OGRDataSource::DestroyDataSource(m_datasource);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">//---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">void</span> ImgWriterOgr::setCodec(<span class="keyword">const</span> std::string& imageType){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">//register the drivers</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> OGRRegisterAll();</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">//fetch the OGR file driver</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> OGRSFDriver *poDriver;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(imageType.c_str());</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>( poDriver == NULL ){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> m_datasource = OGRSFDriverRegistrar::Open( m_filename.c_str(), TRUE );</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span>( m_datasource == NULL ){</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> m_datasource = OGRSFDriverRegistrar::Open( m_filename.c_str(), FALSE );</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> ( m_datasource != NULL){<span class="comment">// we can only open in not update mode</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> std::string errorString=<span class="stringliteral">"Update mode not supported, delete output dataset first"</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> OGRDataSource::DestroyDataSource(m_datasource);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> m_datasource = NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">else</span> <span class="comment">//create the data source</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> m_datasource=poDriver->CreateDataSource(m_filename.c_str(),NULL);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">else</span>{<span class="comment">//datasets exists, always overwrite all layers (no update append for now)</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">int</span> nLayerCount = m_datasource->GetLayerCount();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iLayer = 0; iLayer < nLayerCount; ++iLayer){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(m_datasource->DeleteLayer(iLayer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::string errorstring=<span class="stringliteral">"DeleteLayer() failed when overwrite requested"</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(m_datasource==NULL){</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> std::string errorString=<span class="stringliteral">"Creation of output file failed"</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">void</span> ImgWriterOgr::setCodec(OGRSFDriver *poDriver){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> OGRRegisterAll();</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>( poDriver == NULL ){</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> m_datasource = OGRSFDriverRegistrar::Open( m_filename.c_str(), TRUE );</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>( m_datasource == NULL ){</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> m_datasource = OGRSFDriverRegistrar::Open( m_filename.c_str(), FALSE );</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> ( m_datasource != NULL){<span class="comment">// we can only open in not update mode</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> std::string errorString=<span class="stringliteral">"Update mode not supported, delete output dataset first"</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> OGRDataSource::DestroyDataSource(m_datasource);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> m_datasource = NULL;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">else</span> <span class="comment">//create the data source</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> m_datasource=poDriver->CreateDataSource(m_filename.c_str(),NULL);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">else</span>{<span class="comment">//datasets exists, always overwrite all layers (no update append for now)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">int</span> nLayerCount = m_datasource->GetLayerCount();</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iLayer = 0; iLayer < nLayerCount; ++iLayer){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(m_datasource->DeleteLayer(iLayer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::string errorstring=<span class="stringliteral">"DeleteLayer() failed when overwrite requested"</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(m_datasource==NULL){</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> std::string errorString=<span class="stringliteral">"Creation of output file failed"</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// OGRLayer* ImgWriterOgr::copyLayer(OGRLayer* poSrcLayer, const std::string& layername, char** papszOptions)</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// return(m_datasource->CopyLayer(poSrcLayer, layername.c_str(),papszOptions));</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> OGRLayer* ImgWriterOgr::createLayer(<span class="keyword">const</span> std::string& layername, <span class="keyword">const</span> std::string& theProjection, <span class="keyword">const</span> OGRwkbGeometryType& eGType, <span class="keywordtype">char</span>** papszOptions)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>( !m_datasource->TestCapability( ODsCCreateLayer ) ){</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> std::string errorString=<span class="stringliteral">"Test capability to create layer failed"</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//papszOptions = CSLSetNameValue( papszOptions, "DIM", "1" );</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">//if points: use wkbPoint</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">//if no constraints on the types geometry to be written: use wkbUnknown </span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> OGRLayer* poLayer;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> OGRSpatialReference oSRS;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(theProjection!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> oSRS.SetFromUserInput(theProjection.c_str());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> poLayer=m_datasource->CreateLayer( layername.c_str(), &oSRS, eGType,papszOptions );</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// if(theProjection.find("EPSPG:")!=std::string::npos){</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// int epsg_code=atoi(theProjection.substr(theProjection.find_first_not_of("EPSG:")).c_str());</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// OGRSpatialReference oSRS;</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// oSRS.importFromEPSG(epsg_code);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// poLayer=m_datasource->CreateLayer( layername.c_str(), &oSRS, eGType,papszOptions );</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// OGRSpatialReference oSRS(theProjection.c_str());</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// poLayer=m_datasource->CreateLayer( layername.c_str(), &oSRS, eGType,papszOptions );</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// oSRS.importFromProj4(theProjection);</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> poLayer=m_datasource->CreateLayer( layername.c_str(), NULL, eGType,papszOptions );</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">//check if destroy is needed?!</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> CSLDestroy( papszOptions );</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>( poLayer == NULL ){</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> std::string errorstring=<span class="stringliteral">"Layer creation failed"</span>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> poLayer;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">void</span> ImgWriterOgr::createField(<span class="keyword">const</span> std::string& fieldname, <span class="keyword">const</span> OGRFieldType& fieldType, <span class="keywordtype">int</span> theLayer)</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> OGRFieldDefn oField( fieldname.c_str(), fieldType );</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">if</span>(fieldType==OFTString)</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> oField.SetWidth(32);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span>(theLayer<0)</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> theLayer=m_datasource->GetLayerCount()-1;<span class="comment">//get back layer</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(m_datasource->GetLayer(theLayer)->CreateField( &oField ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> std::ostringstream es;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> es << <span class="stringliteral">"Creating field "</span> << fieldname << <span class="stringliteral">" failed"</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> std::string errorString=es.str();</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">int</span> ImgWriterOgr::getFields(std::vector<std::string>& fields, <span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(layer<0)</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> layer=m_datasource->GetLayerCount()-1;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> fields.clear();</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> fields[iField]=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span>(fields.size());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">int</span> ImgWriterOgr::getFields(std::vector<OGRFieldDefn*>& fields, <span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span>(layer<0)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> layer=m_datasource->GetLayerCount()-1;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> fields.clear();</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> fields.resize(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> fields[iField]=poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> assert(fields.size()==getFieldCount(layer));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">return</span>(fields.size());</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">void</span> ImgWriterOgr::copyFields(<span class="keyword">const</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr, <span class="keywordtype">int</span> srcLayer, <span class="keywordtype">int</span> targetLayer){</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span>(targetLayer<0)</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> targetLayer=m_datasource->GetLayerCount()-1;<span class="comment">//get back layer</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">//get fields from imgReaderOgr</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> std::vector<OGRFieldDefn*> fields;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> imgReaderOgr.getFields(fields,srcLayer);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<fields.size();++iField){</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(m_datasource->GetLayer(targetLayer)->CreateField(fields[iField]) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> std::ostringstream es;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> es << <span class="stringliteral">"Creating field "</span> << fields[iField]->GetNameRef() << <span class="stringliteral">" failed"</span>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> std::string errorString=es.str();</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">void</span> ImgWriterOgr::addPoint(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keyword">const</span> std::map<std::string,double>& pointAttributes, std::string fieldName, <span class="keyword">const</span> std::string& theId, <span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> poFeature=createFeature(layer);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> OGRPoint pt;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> poFeature->SetField( fieldName.c_str(), theId.c_str());</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">for</span>(std::map<std::string,double>::const_iterator mit=pointAttributes.begin();mit!=pointAttributes.end();++mit){</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> poFeature->SetField((mit->first).c_str(), mit->second);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> pt.setX(x);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> pt.setY(y);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> poFeature->SetGeometry( &pt );</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span>(createFeature(poFeature,layer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">void</span> ImgWriterOgr::addPoint(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keyword">const</span> std::map<std::string,double>& pointAttributes, std::string fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> poFeature = createFeature(layer);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> OGRPoint pt;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(pointAttributes.size()+1!=poFeature->GetFieldCount()){</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> ess << <span class="stringliteral">"Failed to add feature: "</span> << pointAttributes.size() << <span class="stringliteral">" !="</span> << poFeature->GetFieldCount() << std::endl;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> assert(pointAttributes.size()+1==poFeature->GetFieldCount());</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> poFeature->SetField( fieldName.c_str(), theId);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">int</span> fid=0;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">for</span>(std::map<std::string,double>::const_iterator mit=pointAttributes.begin();mit!=pointAttributes.end();++mit){</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> poFeature->SetField((mit->first).c_str(),mit->second);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> pt.setX(x);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> pt.setY(y);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> poFeature->SetGeometry( &pt );</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(createFeature(poFeature,layer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">//add a line std::string (polygon), caller is responsible to close the line (end point=start point)</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">void</span> ImgWriterOgr::addLineString(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> poFeature = createFeature(layer);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> poFeature->SetStyleString(<span class="stringliteral">"PEN(c:#FF0000,w:5px)"</span>);<span class="comment">//see also http://www.gdal.org/ogr/ogr_feature_style.html</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> poFeature->SetField( fieldName.c_str(), theId);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> OGRLineString theLineString;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> theLineString.setNumPoints(points.size());</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ip=0;ip<points.size();++ip)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> theLineString.setPoint(ip,points[ip]);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">if</span>(poFeature->SetGeometry( &theLineString )!=OGRERR_NONE){</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> std::string errorString=<span class="stringliteral">"Failed to set line OGRLineString as feature geometry"</span>;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> }</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(createFeature(poFeature,layer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">//add a ring (polygon), caller is responsible to close the line (end point=start point)?</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">void</span> ImgWriterOgr::addRing(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> poFeature = createFeature(layer);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> poFeature->SetStyleString(<span class="stringliteral">"PEN(c:#FF0000,w:5px)"</span>);<span class="comment">//see also http://www.gdal.org/ogr/ogr_feature_style.html</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> poFeature->SetField( fieldName.c_str(), theId);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// OGRLineString theLineString;</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// theLineString.setNumPoints(points.size());</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> OGRPolygon thePolygon;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> OGRLinearRing theRing;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ip=0;ip<points.size();++ip)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> theRing.addPoint(points[ip]);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// theRing.addPoint(points[0]);//close the ring</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> theRing.closeRings();<span class="comment">//redundent with previous line?</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> thePolygon.addRing(&theRing);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// SetSpatialFilter(&thePolygon)</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> poFeature->SetGeometry( &thePolygon );</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span>(createFeature(poFeature,layer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">if</span>(poFeature->SetGeometry( &thePolygon )!=OGRERR_NONE){</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> std::string errorString=<span class="stringliteral">"Failed to set polygon as feature geometry"</span>;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> }</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">//add a line string (polygon), caller is responsible to close the line (end point=start point)</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">void</span> ImgWriterOgr::addLineString(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keyword">const</span> std::string& theId, <span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> poFeature = createFeature(layer);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> poFeature->SetField( fieldName.c_str(), theId.c_str());</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> OGRLineString theLineString;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> theLineString.setNumPoints(points.size());</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ip=0;ip<points.size();++ip)</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> theLineString.setPoint(ip,points[ip]);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span>(poFeature->SetGeometry( &theLineString )!=OGRERR_NONE){</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> std::string errorString=<span class="stringliteral">"Failed to set line OGRLineString as feature geometry"</span>;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">if</span>(createFeature(poFeature,layer)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> }</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> }</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> OGRFeature* ImgWriterOgr::createFeature(<span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">return</span>(OGRFeature::CreateFeature(m_datasource->GetLayer(layer)->GetLayerDefn()));</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> OGRErr ImgWriterOgr::createFeature(OGRFeature *theFeature,<span class="keywordtype">int</span> layer){</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">return</span> m_datasource->GetLayer(layer)->CreateFeature(theFeature);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">int</span> ImgWriterOgr::getFieldCount(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> assert(m_datasource->GetLayerCount()>layer);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span>((poLayer = m_datasource->GetLayer(layer))==NULL){</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> std::string errorstring=<span class="stringliteral">"Could not get layer"</span>;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">return</span>(poFDefn->GetFieldCount());</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">int</span> ImgWriterOgr::getFeatureCount(<span class="keywordtype">int</span> layer)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">return</span>(getLayer(layer)->GetFeatureCount());</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordtype">int</span> ImgWriterOgr::ascii2ogr(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string &layername, <span class="keyword">const</span> std::vector<std::string>& fieldName, <span class="keyword">const</span> std::vector<OGRFieldType>& fieldType, <span class="keywordtype">short</span> colX, <span class="keywo [...]
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> {</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> createLayer(layername, theProjection, eGType, papszOptions);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">//create attribute fields that should appear on the layer. Fields must be added to the layer before any features are written. To create a field we initialize an OGRField object with the information about the field. In the case of Shapefiles, the field width and precision is significant in the creation of the output .dbf file, so we set it specifically, though generally the defaults are O [...]
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">int</span> ncol=fieldName.size();</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> assert(colX>=0);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> assert(colY>=0);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> assert(colX<ncol+2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> assert(colY<ncol+2);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<ncol;++ifield)</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> createField(fieldName[ifield],fieldType[ifield]);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">//create a local OGRFeature, set attributes and attach geometry before trying to write it to the layer. It is imperative that this feature be instantiated from the OGRFeatureDefn associated with the layer it will be written to.</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">//todo: try to open and catch if failure...</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> std::ifstream fpoints(filename.c_str(),std::ios::in);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> std::string line;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> OGRPolygon thePolygon;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> OGRLinearRing theRing;</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> OGRPoint firstPoint;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> OGRFeature *polyFeature;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">if</span>(eGType!=wkbPoint)</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> polyFeature=createFeature();</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span>(fs><span class="charliteral">' '</span>&&fs<=<span class="charliteral">'~'</span>){<span class="comment">//field separator is a regular character (minimum ASCII code is space, maximum ASCII code is tilde)</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> std::string csvRecord;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">while</span>(getline(fpoints,csvRecord)){<span class="comment">//read a line</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> OGRFeature *pointFeature;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> pointFeature=createFeature();</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">bool</span> skip=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> std::istringstream csvstream(csvRecord);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> std::string value;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">int</span> colId=0;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordtype">int</span> fieldId=0;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">while</span>(getline(csvstream,value,fs)){<span class="comment">//read a column</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">if</span>(colId==colX)</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> thePoint.setX(atof(value.c_str()));</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(colId==colY)</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> thePoint.setY(atof(value.c_str()));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">switch</span>(fieldType[fieldId]){</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> pointFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> pointFeature->SetField(fieldId,atoi(value.c_str()));</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">case</span>(OFTString):</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> pointFeature->SetField(fieldId,value.c_str());</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> ++fieldId;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> ++colId;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">if</span>(colId!=fieldId+2){</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> ess << <span class="stringliteral">"Error: colId = "</span> << colId << <span class="stringliteral">" is different from fieldId+2 = "</span> << fieldId;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span>(eGType==wkbPoint){</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> pointFeature->SetGeometry( &thePoint );</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(createFeature(pointFeature)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> OGRFeature::DestroyFeature( pointFeature );</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty()){</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> firstPoint=thePoint;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> theRing.addPoint(&thePoint);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> }</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">else</span>{<span class="comment">//space or tab delimited fields</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">while</span>(getline(fpoints,line)){</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> OGRFeature *pointFeature;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> pointFeature=createFeature();</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">bool</span> skip=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> std::istringstream ist(line);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> std::string value;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordtype">int</span> colId=0;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordtype">int</span> fieldId=0;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">while</span>(ist >> value){</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span>(colId==colX)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> thePoint.setX(atof(value.c_str()));</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(colId==colY)</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> thePoint.setY(atof(value.c_str()));</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">switch</span>(fieldType[fieldId]){</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> pointFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> pointFeature->SetField(fieldId,atoi(value.c_str()));</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">case</span>(OFTString):</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(eGType==wkbPoint)</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> pointFeature->SetField(fieldId,value.c_str());</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty())</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> polyFeature->SetField(fieldId,atof(value.c_str()));</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> ++fieldId;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> ++colId;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(colId!=fieldId+2){</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> std::ostringstream ess;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> ess << <span class="stringliteral">"Error: colId = "</span> << colId << <span class="stringliteral">" is different from fieldId+2 = "</span> << fieldId;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">throw</span>(ess.str());</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(eGType==wkbPoint){</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> pointFeature->SetGeometry( &thePoint );</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">if</span>(createFeature(pointFeature)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> OGRFeature::DestroyFeature( pointFeature );</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> }</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> }</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span>(firstPoint.IsEmpty()){</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> firstPoint=thePoint;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> theRing.addPoint(&thePoint);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">if</span>(eGType!=wkbPoint){</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> theRing.addPoint(&firstPoint);<span class="comment">//close the ring</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> thePolygon.addRing(&theRing);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">// SetSpatialFilter(&thePolygon)</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> polyFeature->SetGeometry( &thePolygon );</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span>(createFeature(polyFeature)!=OGRERR_NONE){</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> std::string errorString=<span class="stringliteral">"Failed to create feature"</span>;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> OGRFeature::DestroyFeature( polyFeature );</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> }</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">return</span> getFeatureCount();</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> ImgWriterOgr::addData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">int</span> theLayer, <span class="keywordtype">bool</span> verbose)</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> {</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> OGRLayer *poLayer;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> assert(m_datasource->GetLayerCount()>theLayer);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> std::cout << <span class="stringliteral">"number of layers: "</span> << m_datasource->GetLayerCount() << std::endl;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> std::cout << <span class="stringliteral">"get layer "</span> << theLayer << std::endl;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> poLayer = m_datasource->GetLayer(theLayer);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> std::cout << <span class="stringliteral">"reset reading"</span> << std::endl;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> poLayer->ResetReading();</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<imgReader.nrOfBand();++iband){</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> std::ostringstream fs;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> fs << <span class="stringliteral">"band"</span> << iband;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> createField(fs.str(),OFTReal,theLayer);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordtype">int</span> nfield=poFDefn->GetFieldCount();</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> std::cout << <span class="stringliteral">"new number of fields: "</span> << nfield << std::endl;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">while</span>( (poFeature = poLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> poGeometry = poFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> assert(poGeometry != NULL </div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">double</span> x=poPoint->getX();</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordtype">double</span> y=poPoint->getY();</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<imgReader.nrOfBand();++iband){</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordtype">double</span> imgData;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> imgReader.readData(imgData,GDT_Float64,x,y,iband);</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">//todo: put imgdata in field</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> std::ostringstream fs;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> fs << <span class="stringliteral">"band"</span> << iband;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> poFeature->SetField(fs.str().c_str(),imgData);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> }</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">return</span>(nfield);</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> }</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ImgWriterOgr_8h_source.html b/doc/html/ImgWriterOgr_8h_source.html
new file mode 100644
index 0000000..4ed7058
--- /dev/null
+++ b/doc/html/ImgWriterOgr_8h_source.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses/ImgWriterOgr.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterOgr.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">ImgWriterOgr.h: class to write vector files using OGR API library</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _IMGWRITEROGR_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _IMGWRITEROGR_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "ogrsf_frmts.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classImgWriterOgr.html"> 35</a></span> <span class="keyword">class </span><a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a>(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string& imageType=<span class="stringliteral">"ESRI Shapefile"</span>);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a>(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a>(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr, <span class="keywordtype">bool</span> copyData);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> ~<a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename, <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> open(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string& imageType=<span class="stringliteral">"ESRI Shapefile"</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> close(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> ascii2ogr(<span class="keyword">const</span> std::string& filename, <span class="keyword">const</span> std::string &layername, <span class="keyword">const</span> std::vector<std::string>& fieldName, <span class="keyword">const</span> std::vector<OGRFieldType>& fieldType, <span class="keywordtype">short</span> colX=1, <span class="keywordtype">sh [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> OGRLayer* createLayer(<span class="keyword">const</span> std::string& layername=<span class="stringliteral">"New layer"</span>, <span class="keyword">const</span> std::string& theProjection=<span class="stringliteral">""</span>, <span class="keyword">const</span> OGRwkbGeometryType& eGType=wkbUnknown, <span class="keywordtype">char</span>** papszOptions=NULL);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> OGRLayer* copyLayer(OGRLayer* poSrcLayer, <span class="keyword">const</span> std::string& layername, <span class="keywordtype">char</span>** papszOptions=NULL);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> createField(<span class="keyword">const</span> std::string& fieldname, <span class="keyword">const</span> OGRFieldType& fieldType, <span class="keywordtype">int</span> theLayer=0);<span class="comment">//default: get back layer</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> OGRLayer* getLayer(<span class="keywordtype">int</span> layer=0)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_datasource->GetLayer(layer);};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> std::string getLayerName(<span class="keywordtype">int</span> layer=0){<span class="keywordflow">return</span> m_datasource->GetLayer(layer)->GetLayerDefn()->GetName();};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> getFields(std::vector<std::string>& fields, <span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> getFields(std::vector<OGRFieldDefn*>& fields, <span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> copyFields(<span class="keyword">const</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a>& imgReaderOgr, <span class="keywordtype">int</span> srcLayer=0, <span class="keywordtype">int</span> targetLayer=0);<span class="comment">//default: get back layer</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> addLineString(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keyword">const</span> std::string& theId, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> addRing(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">void</span> addLineString(std::vector<OGRPoint*>& points, <span class="keyword">const</span> std::string& fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> addPoint(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keyword">const</span> std::map<std::string,double>& pointAttributes, std::string fieldName, <span class="keyword">const</span> std::string& theId, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> addPoint(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keyword">const</span> std::map<std::string,double>& pointAttributes, std::string fieldName, <span class="keywordtype">int</span> theId, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">int</span> addData(<span class="keyword">const</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a>& imgReader, <span class="keywordtype">int</span> layer=0, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> OGRFeature* createFeature(<span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> OGRErr createFeature(OGRFeature* theFeature, <span class="keywordtype">int</span> layer=0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> getFieldCount(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> getFeatureCount(<span class="keywordtype">int</span> layer=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> OGRDataSource* getDataSource(<span class="keywordtype">void</span>) {<span class="keywordflow">return</span> m_datasource;};</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> OGRSFDriver* getDriver(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_datasource->GetDriver();};</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> setCodec(<span class="keyword">const</span> std::string& imageType);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> setCodec(OGRSFDriver *poDriver);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// OGRLayer* getLayer(int layer=0);</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> std::string m_filename;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> OGRDataSource *m_datasource;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// vector<OGRLayer*> m_layers;</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> };</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#endif // _IMGWRITEROGR_H_</span></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/IndexValue_8h_source.html b/doc/html/IndexValue_8h_source.html
new file mode 100644
index 0000000..778b3b5
--- /dev/null
+++ b/doc/html/IndexValue_8h_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base/IndexValue.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">IndexValue.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">IndexValue.h: class to work with structs containing an index and a value</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _INDEXVALUE_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _INDEXVALUE_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="structIndexValue.html"> 23</a></span> <span class="keyword">struct </span><a class="code" href="structIndexValue.html">IndexValue</a>{</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">int</span> position;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> };</div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classCompare__IndexValue.html"> 27</a></span> <span class="keyword">class </span><a class="code" href="classCompare__IndexValue.html">Compare_IndexValue</a>{</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">return</span> pv1.value>pv2.value;<span class="comment">//for decreasing order</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> };</div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classDecrease__IndexValue.html"> 33</a></span> <span class="keyword">class </span><a class="code" href="classDecrease__IndexValue.html">Decrease_IndexValue</a>{</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">return</span> pv1.value>pv2.value;<span class="comment">//for decreasing order</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> };</div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classIncrease__IndexValue.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classIncrease__IndexValue.html">Increase_IndexValue</a>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structIndexValue.html">IndexValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> pv1.value<pv2.value;<span class="comment">//for increasing order</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif </span><span class="comment">/* _INDEXVALUE_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classIncrease__IndexValue_html"><div class="ttname"><a href="classIncrease__IndexValue.html">Increase_IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00039">IndexValue.h:39</a></div></div>
+<div class="ttc" id="classCompare__IndexValue_html"><div class="ttname"><a href="classCompare__IndexValue.html">Compare_IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00027">IndexValue.h:27</a></div></div>
+<div class="ttc" id="structIndexValue_html"><div class="ttname"><a href="structIndexValue.html">IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00023">IndexValue.h:23</a></div></div>
+<div class="ttc" id="classDecrease__IndexValue_html"><div class="ttname"><a href="classDecrease__IndexValue.html">Decrease_IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00033">IndexValue.h:33</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/OptFactory_8h_source.html b/doc/html/OptFactory_8h_source.html
new file mode 100644
index 0000000..d2007be
--- /dev/null
+++ b/doc/html/OptFactory_8h_source.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/OptFactory.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">OptFactory.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">OptFactory.h: factory class for nlopt::opt (selecting algorithm via string)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2013 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _OPTFACTORY_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _OPTFACTORY_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classOptFactory.html"> 25</a></span> <span class="keyword">class </span><a class="code" href="classOptFactory.html">OptFactory</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initMap(std::map<std::string, nlopt::algorithm>& m_algMap){</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">//initialize selMap</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> m_algMap[<span class="stringliteral">"GN_DIRECT"</span>]=nlopt::GN_DIRECT;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> m_algMap[<span class="stringliteral">"GN_DIRECT_L"</span>]=nlopt::GN_DIRECT_L;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> m_algMap[<span class="stringliteral">"GN_DIRECT_L_RAND"</span>]=nlopt::GN_DIRECT_L_RAND;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> m_algMap[<span class="stringliteral">"GN_DIRECT_NOSCAL"</span>]=nlopt::GN_DIRECT_NOSCAL;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> m_algMap[<span class="stringliteral">"GN_DIRECT_L_NOSCAL"</span>]=nlopt::GN_DIRECT_L_NOSCAL;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> m_algMap[<span class="stringliteral">"GN_DIRECT_L_RAND_NOSCAL"</span>]=nlopt::GN_DIRECT_L_RAND_NOSCAL;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> m_algMap[<span class="stringliteral">"GN_ORIG_DIRECT"</span>]=nlopt::GN_ORIG_DIRECT;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> m_algMap[<span class="stringliteral">"GN_ORIG_DIRECT_L"</span>]=nlopt::GN_ORIG_DIRECT_L;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> m_algMap[<span class="stringliteral">"GD_STOGO"</span>]=nlopt::GD_STOGO;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> m_algMap[<span class="stringliteral">"GD_STOGO_RAND"</span>]=nlopt::GD_STOGO_RAND;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> m_algMap[<span class="stringliteral">"LD_LBFGS_NOCEDAL"</span>]=nlopt::LD_LBFGS_NOCEDAL;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> m_algMap[<span class="stringliteral">"LD_LBFGS"</span>]=nlopt::LD_LBFGS;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> m_algMap[<span class="stringliteral">"LN_PRAXIS"</span>]=nlopt::LN_PRAXIS;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> m_algMap[<span class="stringliteral">"LD_VAR1"</span>]=nlopt::LD_VAR1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> m_algMap[<span class="stringliteral">"LD_VAR2"</span>]=nlopt::LD_VAR2;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> m_algMap[<span class="stringliteral">"LD_TNEWTON"</span>]=nlopt::LD_TNEWTON;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> m_algMap[<span class="stringliteral">"LD_TNEWTON_RESTART"</span>]=nlopt::LD_TNEWTON_RESTART;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> m_algMap[<span class="stringliteral">"LD_TNEWTON_PRECOND"</span>]=nlopt::LD_TNEWTON_PRECOND;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> m_algMap[<span class="stringliteral">"LD_TNEWTON_PRECOND_RESTART"</span>]=nlopt::LD_TNEWTON_PRECOND_RESTART;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> m_algMap[<span class="stringliteral">"GN_CRS2_LM"</span>]=nlopt::GN_CRS2_LM;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> m_algMap[<span class="stringliteral">"GN_MLSL"</span>]=nlopt::GN_MLSL;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> m_algMap[<span class="stringliteral">"GD_MLSL"</span>]=nlopt::GD_MLSL;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> m_algMap[<span class="stringliteral">"GN_MLSL_LDS"</span>]=nlopt::GN_MLSL_LDS;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> m_algMap[<span class="stringliteral">"GD_MLSL_LDS"</span>]=nlopt::GD_MLSL_LDS;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> m_algMap[<span class="stringliteral">"LD_MMA"</span>]=nlopt::LD_MMA;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> m_algMap[<span class="stringliteral">"LN_COBYLA"</span>]=nlopt::LN_COBYLA;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> m_algMap[<span class="stringliteral">"LN_NEWUOA"</span>]=nlopt::LN_NEWUOA;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> m_algMap[<span class="stringliteral">"LN_NEWUOA_BOUND"</span>]=nlopt::LN_NEWUOA_BOUND;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> m_algMap[<span class="stringliteral">"LN_NELDERMEAD"</span>]=nlopt::LN_NELDERMEAD;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> m_algMap[<span class="stringliteral">"LN_SBPLX"</span>]=nlopt::LN_SBPLX;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> m_algMap[<span class="stringliteral">"LN_AUGLAG"</span>]=nlopt::LN_AUGLAG;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> m_algMap[<span class="stringliteral">"LD_AUGLAG"</span>]=nlopt::LD_AUGLAG;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> m_algMap[<span class="stringliteral">"LN_AUGLAG_EQ"</span>]=nlopt::LN_AUGLAG_EQ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> m_algMap[<span class="stringliteral">"LD_AUGLAG_EQ"</span>]=nlopt::LD_AUGLAG_EQ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> m_algMap[<span class="stringliteral">"LN_BOBYQA"</span>]=nlopt::LN_BOBYQA;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> m_algMap[<span class="stringliteral">"GN_ISRES"</span>]=nlopt::GN_ISRES;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> m_algMap[<span class="stringliteral">"AUGLAG"</span>]=nlopt::AUGLAG;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> m_algMap[<span class="stringliteral">"AUGLAG_EQ"</span>]=nlopt::AUGLAG_EQ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> m_algMap[<span class="stringliteral">"G_MLSL"</span>]=nlopt::G_MLSL;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> m_algMap[<span class="stringliteral">"G_MLSL_LDS"</span>]=nlopt::G_MLSL_LDS;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> m_algMap[<span class="stringliteral">"LD_SLSQP "</span>]=nlopt::LD_SLSQP;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <a class="code" href="classOptFactory.html">OptFactory</a>(){</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> };</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> ~<a class="code" href="classOptFactory.html">OptFactory</a>(){};</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">static</span> nlopt::opt getOptimizer(<span class="keyword">const</span> std::string& algorithmString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> npar){</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> std::map<std::string, nlopt::algorithm> m_algMap;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> initMap(m_algMap);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">switch</span>(m_algMap[algorithmString]){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT):{</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT,npar);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT_L):{</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT_L,npar);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT_L_RAND):{</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT_L_RAND,npar);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT_NOSCAL):{</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT_NOSCAL,npar);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT_L_NOSCAL):{</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT_L_NOSCAL,npar);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">case</span>(nlopt::GN_DIRECT_L_RAND_NOSCAL):{</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> nlopt::opt theOptimizer(nlopt::GN_DIRECT_L_RAND_NOSCAL,npar);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">case</span>(nlopt::GN_ORIG_DIRECT):{</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> nlopt::opt theOptimizer(nlopt::GN_ORIG_DIRECT,npar);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">case</span>(nlopt::GN_ORIG_DIRECT_L):{</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nlopt::opt theOptimizer(nlopt::GN_ORIG_DIRECT_L,npar);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">case</span>(nlopt::LN_PRAXIS):{</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> nlopt::opt theOptimizer(nlopt::LN_PRAXIS,npar);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">case</span>(nlopt::GN_CRS2_LM):{</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> nlopt::opt theOptimizer(nlopt::GN_CRS2_LM,npar);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">case</span>(nlopt::GN_MLSL):{</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> nlopt::opt theOptimizer(nlopt::GN_MLSL,npar);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">case</span>(nlopt::GN_MLSL_LDS):{</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> nlopt::opt theOptimizer(nlopt::GN_MLSL_LDS,npar);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">case</span>(nlopt::LN_COBYLA):{</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> nlopt::opt theOptimizer(nlopt::LN_COBYLA,npar);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">case</span>(nlopt::LN_NEWUOA):{</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> nlopt::opt theOptimizer(nlopt::LN_NEWUOA,npar);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">case</span>(nlopt::LN_NEWUOA_BOUND):{</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> nlopt::opt theOptimizer(nlopt::LN_NEWUOA_BOUND,npar);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">case</span>(nlopt::LN_NELDERMEAD):{</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> nlopt::opt theOptimizer(nlopt::LN_NELDERMEAD,npar);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">case</span>(nlopt::LN_SBPLX):{</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> nlopt::opt theOptimizer(nlopt::LN_SBPLX,npar);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">case</span>(nlopt::LN_AUGLAG):{</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> nlopt::opt theOptimizer(nlopt::LN_AUGLAG,npar);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">case</span>(nlopt::LN_AUGLAG_EQ):{</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> nlopt::opt theOptimizer(nlopt::LN_AUGLAG_EQ,npar);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">case</span>(nlopt::LN_BOBYQA):{</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> nlopt::opt theOptimizer(nlopt::LN_BOBYQA,npar);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">case</span>(nlopt::GN_ISRES):{</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> nlopt::opt theOptimizer(nlopt::GN_ISRES,npar);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span>(theOptimizer);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">case</span>(nlopt::G_MLSL_LDS):</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">case</span>(nlopt::AUGLAG):</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">case</span>(nlopt::AUGLAG_EQ):</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">case</span>(nlopt::G_MLSL):</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">case</span>(nlopt::GD_MLSL):</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">case</span>(nlopt::GD_MLSL_LDS):</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">case</span>(nlopt::GD_STOGO):</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">case</span>(nlopt::GD_STOGO_RAND):</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">case</span>(nlopt::LD_LBFGS_NOCEDAL):</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">case</span>(nlopt::LD_LBFGS):</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">case</span>(nlopt::LD_VAR1):</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">case</span>(nlopt::LD_VAR2):</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">case</span>(nlopt::LD_TNEWTON):</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">case</span>(nlopt::LD_TNEWTON_RESTART):</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">case</span>(nlopt::LD_TNEWTON_PRECOND):</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">case</span>(nlopt::LD_TNEWTON_PRECOND_RESTART):</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">case</span>(nlopt::LD_MMA):</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">case</span>(nlopt::LD_AUGLAG):</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">case</span>(nlopt::LD_AUGLAG_EQ):</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">case</span>(nlopt::LD_SLSQP):</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">default</span>:{</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> std::string errorString=<span class="stringliteral">"Error: derivative optimization algorithm "</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> errorString+= algorithmString;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> errorString+= <span class="stringliteral">" not supported, select derivative-free algorithm ([GL]N_*])"</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> };</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> };</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor">#endif </span><span class="comment">/* _OPTFACTORY_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classOptFactory_html"><div class="ttname"><a href="classOptFactory.html">OptFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="OptFactory_8h_source.html#l00025">OptFactory.h:25</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Optionpk_8cc_source.html b/doc/html/Optionpk_8cc_source.html
new file mode 100644
index 0000000..fe177e6
--- /dev/null
+++ b/doc/html/Optionpk_8cc_source.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/vis_studio/base/Optionpk.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_457de909e3893805a4d2d0b8c0742bd8.html">vis_studio</a></li><li class="navelem"><a class="el" href="dir_0d45166ba6790a432639a127a727f02c.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Optionpk.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Optionpk.cc: source file used for specialization of template class </span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Optionpk defined in Optionpk.h</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"></span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"></span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">return</span> s;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><> <span class="keyword">inline</span> OGRFieldType string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> OGRFieldType ftype;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> ogr_typecount=11;<span class="comment">//hard coded for now!</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < ogr_typecount; ++iType){</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),s.c_str()))</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ftype=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">return</span> ftype;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">bool</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span>(value)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span>(<span class="stringliteral">"true"</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span>(<span class="stringliteral">"false"</span>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(std::string <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// if(value.empty())</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// return("<empty string>");</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span>(value);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">float</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> std::ostringstream oss;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// oss.precision(1);</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// oss.setf(ios::fixed);</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> oss << value;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> oss.str();</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">double</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> std::ostringstream oss;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// oss.precision(1);</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// oss.setf(ios::fixed);</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> oss << value;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> oss.str();</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo [...]
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> m_longName=longName;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> m_hasArgument=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> m_hide=0;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo [...]
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo [...]
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> m_longName=longName;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> m_hasArgument=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> m_defaultValue=defaultValue;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> m_hasDefault=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> m_hide=hide;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<bool>::Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo,<span class="keyword">const</span> [...]
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> setAll(shortName,longName,helpInfo,defaultValue, hide);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">//specialization (only makes sense for T=std::string), generic function throws exception</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">//find a substring in string option (e.g., option is of type -co INTERLEAVE=BAND)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::vector<std::string>::const_iterator <a class="code" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk<std::string>::findSubstring</a>(<span class="keyword">const</span> std::string& argument)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::vector<std::string>::const_iterator opit=this->begin();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">while</span>(opit!=this->end()){</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(opit->find(argument)!=std::string::npos)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> ++opit;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> opit;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="ttc" id="classOptionpk_html_a0082d074d437413b3beefa06c0521644"><div class="ttname"><a href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk::Optionpk</a></div><div class="ttdeci">Optionpk()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00198">Optionpk.h:198</a></div></div>
+<div class="ttc" id="classOptionpk_html_a092414f315f6b310fc88eaf5688b81f4"><div class="ttname"><a href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk::findSubstring</a></div><div class="ttdeci">std::vector< T >::const_iterator findSubstring(const T &argument) const </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00160">Optionpk.h:160</a></div></div>
+<div class="ttc" id="classOptionpk_html_affd58e09b1baaf0b1754fbf938eea11a"><div class="ttname"><a href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk::setAll</a></div><div class="ttdeci">void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</div><div class="ttdoc">set all attributes of the option, except default and hide </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00277">Optionpk. [...]
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Optionpk_8h_source.html b/doc/html/Optionpk_8h_source.html
new file mode 100644
index 0000000..713ce23
--- /dev/null
+++ b/doc/html/Optionpk_8h_source.html
@@ -0,0 +1,490 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base/Optionpk.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Optionpk.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Optionpk.h: class to handle command line options (inherits from stl vector class)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _OPTIONPK_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _OPTIONPK_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <cstdlib></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdexcept></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <iomanip></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <typeinfo></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifndef WIN32</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor">#include <cxxabi.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#define mytypeid(T) abi::__cxa_demangle(typeid(T).name(),0,0,&status)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#define mytypeid(T) typeid(T).name()</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor">#include "ogr_feature.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classBadConversion.html"> 45</a></span> <span class="keyword">class </span><a class="code" href="classBadConversion.html">BadConversion</a> : <span class="keyword">public</span> std::runtime_error {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="classBadConversion.html">BadConversion</a>(std::string <span class="keyword">const</span>& s)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> : runtime_error(s)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> { }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> };</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> std::istringstream i(s);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> T x;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (!(i >> x) )</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">throw</span> <a class="code" href="classBadConversion.html">BadConversion</a>(s);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T string2type(std::string <span class="keyword">const</span>& s,<span class="keywordtype">bool</span> failIfLeftoverChars){</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> std::istringstream i(s);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">char</span> c;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> T x;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span> (!(i >> x) || (failIfLeftoverChars && i.get(c)))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">throw</span> <a class="code" href="classBadConversion.html">BadConversion</a>(s);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> std::string type2string(T <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> std::ostringstream oss;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> oss << value;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">return</span> oss.str();</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classOptionpk.html"> 106</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="classOptionpk.html">Optionpk</a> : <span class="keyword">public</span> std::vector <T></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk</a>();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo,<span class="keyword">const</span> T& defaultValue, <span class="keywordtype">short</span> hide=0);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">~Optionpk</a>();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e"> 118</a></span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">setHelp</a>(<span class="keyword">const</span> std::string& helpInfo){m_help=helpInfo;};</div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915"> 120</a></span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">setHide</a>(<span class="keywordtype">short</span> hide){m_hide=hide;};</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">retrieveOption</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">template</span><<span class="keyword">class</span> T1> <span class="keyword">friend</span> std::ostream& operator<<(std::ostream & os, const Optionpk<T1>& theOption);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo,<span class="keyword">const</span> T& defaultValue, <span class="keywordtype">short</span> hide);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">setDefault</a>(<span class="keyword">const</span> T& defaultValue);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> std::string getDefaultValue()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_defaultValue;};</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">setShortName</a>(<span class="keyword">const</span> std::string& shortName);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">setLongName</a>(<span class="keyword">const</span> std::string& longName);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742"> 137</a></span> std::string <a class="code" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">getShortName</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_shortName;};</div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69"> 139</a></span> std::string <a class="code" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">getLongName</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_longName;};</div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f"> 141</a></span> std::string <a class="code" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">getHelp</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_help;};</div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff"> 143</a></span> <span class="keyword">static</span> std::string <a class="code" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">getGPLv3License</a>(){</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>std::string<span class="keyword">></span>(<span class="stringliteral">"\n\</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="stringliteral"> This program is free software: you can redistribute it and/or modify\n\</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="stringliteral"> it under the terms of the GNU General Public License as published by\n\</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="stringliteral"> the Free Software Foundation, either version 3 of the License, or\n\</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="stringliteral"> (at your option) any later version.\n\</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="stringliteral"> \n\</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="stringliteral"> This program is distributed in the hope that it will be useful,\n\</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="stringliteral"> but WITHOUT ANY WARRANTY; without even the implied warranty of\n\</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="stringliteral"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="stringliteral"> GNU General Public License for more details.\n\</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="stringliteral"> \n\</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="stringliteral"> You should have received a copy of the GNU General Public License\n\</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="stringliteral"> along with this program. If not, see <http://www.gnu.org/licenses/>.\n"</span>);};</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4"> 160</a></span> <span class="keyword">typename</span> std::vector<T>::const_iterator <a class="code" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">findSubstring</a>(<span class="keyword">const</span> T& argument)<span class="keyword"> const </span>{std::string errorString=<span class="stringliteral">"Error: findSubstr [...]
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">bool</span> hasArgument()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_hasArgument;};</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">bool</span> hasShortOption()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_shortName.compare(<span class="stringliteral">"\0"</span>);};</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">bool</span> hasLongOption()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_longName.compare(<span class="stringliteral">"\0"</span>);};</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> std::string usage() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> std::string usageDoxygen() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> std::string m_shortName;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> std::string m_longName;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::string m_help;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">bool</span> m_hasArgument;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> T m_defaultValue;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">bool</span> m_hasDefault;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">short</span> m_hide;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> };</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classOptionpk.html#a4ab58d03540efa49fe3ebf6a58507f23"> 189</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T1> std::ostream& operator<<(std::ostream& os, const Optionpk<T1>& theOption)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> os << theOption.getLongName() << <span class="stringliteral">": "</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<theOption.size();++index)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> os << type2string<T1>(theOption[index]) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> os << std::endl;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">return</span> os;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644"> 198</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<T>::Optionpk</a>() </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> : m_hasDefault(false)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classOptionpk.html#a027b169ab11595296121c5e1b8499c6e"> 209</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<T>::Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::strin [...]
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> : m_hasDefault(false)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(shortName,longName,helpInfo);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classOptionpk.html#a4356ce7db419ff66abd207028ff1e2fc"> 225</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<T>::Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::strin [...]
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> setAll(shortName,longName,helpInfo,defaultValue, hide);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> std::string <a class="code" href="classOptionpk.html">Optionpk<T>::usage</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> std::ostringstream helpss;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> std::string shortOption=m_shortName;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> std::string longOption=m_longName;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> shortOption.insert(0,<span class="stringliteral">"-"</span>);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> longOption.insert(0,<span class="stringliteral">"--"</span>);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span>(hasShortOption())</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> helpss << <span class="stringliteral">" "</span> << std::setiosflags(std::ios::left) << std::setw(4) << shortOption;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> helpss << <span class="stringliteral">" "</span> << std::setiosflags(std::ios::left) << std::setw(4) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(hasLongOption())</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> helpss << <span class="stringliteral">" "</span> << std::setiosflags(std::ios::left) << std::setw(20) << longOption;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> helpss << <span class="stringliteral">" "</span> << std::setiosflags(std::ios::left) << std::setw(20) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> helpss << <span class="stringliteral">" "</span> << m_help;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(m_hasDefault)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> helpss << <span class="stringliteral">" (default: "</span> << type2string<T>(m_defaultValue) << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">return</span> helpss.str();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> std::string <a class="code" href="classOptionpk.html">Optionpk<T>::usageDoxygen</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> std::ostringstream helpss;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> std::string shortOption=m_shortName;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> std::string longOption=m_longName;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(hasShortOption())</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> helpss << <span class="stringliteral">" | "</span> << std::setiosflags(std::ios::left) << std::setw(6) << shortOption << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> helpss << <span class="stringliteral">" | "</span> << std::setiosflags(std::ios::left) << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(hasLongOption())</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> helpss << std::setiosflags(std::ios::left) << std::setw(20) << longOption << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> helpss << std::setiosflags(std::ios::left) << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> status;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> helpss << std::setiosflags(std::ios::left) << std::setw(4) << mytypeid(T) << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">//helpss << std::setiosflags(std::ios::left) << std::setw(4) << abi::__cxa_demangle(typeid(T).name(),0,0,&status) << " | ";</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(m_hasDefault)</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> helpss <<std::setiosflags(std::ios::left) << std::setw(5) << type2string<T>(m_defaultValue) << <span class="stringliteral">" |"</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> helpss << <span class="stringliteral">" |"</span>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> helpss << m_help << <span class="stringliteral">" | "</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">return</span> helpss.str();</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a"> 277</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<T>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span cla [...]
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> {</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> m_longName=longName;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> m_hasArgument=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> m_hide=0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classOptionpk.html#a7fda7da55d4511d6868e86bd67a90aa9"> 286</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<T>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span cla [...]
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> m_longName=longName;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> m_hasArgument=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> m_defaultValue=defaultValue;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> m_hasDefault=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> m_hide=hide;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff"> 298</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">Optionpk<T>::~Optionpk</a>() </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7"> 305</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">Optionpk<T>::retrieveOption</a>(<span class="keywordtype">int</span> argc, <span class="keywordt [...]
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordtype">bool</span> noHelp=<span class="keyword">true</span>;<span class="comment">//return value, alert main program that hard coded option (help, version, license, doxygen) was invoked</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> std::string helpStringShort=<span class="stringliteral">"-h"</span>;<span class="comment">//short option for help (hard coded)</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> std::string helpStringLong=<span class="stringliteral">"--help"</span>;<span class="comment">//long option for help (hard coded)</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> std::string helpStringDoxygen=<span class="stringliteral">"--doxygen"</span>;<span class="comment">//option to create table of options ready to use for doxygen</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::string versionString=<span class="stringliteral">"--version"</span>;<span class="comment">//option to show current version</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> std::string licenseString=<span class="stringliteral">"--license"</span>;<span class="comment">//option to show current version</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 1; i < argc; ++i ){</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> std::string currentArgument;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> std::string currentOption=argv[i];</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> std::string shortOption=m_shortName;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> std::string longOption=m_longName;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> shortOption.insert(0,<span class="stringliteral">"-"</span>);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> longOption.insert(0,<span class="stringliteral">"--"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">size_t</span> foundEqual=currentOption.rfind(<span class="stringliteral">"="</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos){</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> currentArgument=currentOption.substr(foundEqual+1);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> currentOption=currentOption.substr(0,foundEqual);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>(!helpStringShort.compare(currentOption)){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span>(m_hide<1)</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> std::cout << usage() << std::endl;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!helpStringLong.compare(currentOption)){</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">if</span>(m_hide<2)</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> std::cout << usage() << std::endl;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!helpStringDoxygen.compare(currentOption)){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(m_hide<2)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> std::cout << usageDoxygen() << std::endl;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!versionString.compare(currentOption)){</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> std::string theVersion=<span class="stringliteral">"version "</span>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> theVersion+=VERSION;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> theVersion+=<span class="stringliteral">", Copyright (C) Pieter Kempeneers.\n\</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="stringliteral"> This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="stringliteral"> This is free software, and you are welcome to redistribute it\n \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="stringliteral"> under certain conditions; use option --license for details."</span>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">throw</span>(theVersion);<span class="comment">//no need to continue registering (break prevents from multiplication of version info)</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!licenseString.compare(currentOption)){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">throw</span>(getGPLv3License());</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span>(hasShortOption()&&!(shortOption.compare(currentOption))){<span class="comment">//for -option</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> this->push_back(string2type<T>(currentArgument));</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_hasArgument && i < argc-1)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> this->push_back(string2type<T>(argv[++i]));</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> this->push_back(string2type<T>(<span class="stringliteral">"1"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hasLongOption()&&!(longOption.compare(currentOption))){<span class="comment">//for --option</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos)</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> this->push_back(string2type<T>(currentArgument));</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_hasArgument && i < argc-1)</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> this->push_back(string2type<T>(argv[++i]));</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> this->push_back(string2type<T>(<span class="stringliteral">"1"</span>));</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(!(this->size())&&m_hasDefault)<span class="comment">//only set default value if no options were given</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> this->push_back(m_defaultValue);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">return</span>(noHelp);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">//template<class T> typename std::vector<T>::const_iterator Optionpk<T>::findSubstring(const T& argument) const {std::string errorString="Error: findSubstring only defined for options of type std::string"; throw(errorString);}</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment">//todo: to be put in .cc file</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment"></span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">return</span> s;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">double</span> string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> std::istringstream i;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> i.precision(12);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> i.str(s);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">double</span> x;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span> (!(i >> std::setprecision(12) >> x) )</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">throw</span> <a class="code" href="classBadConversion.html">BadConversion</a>(s);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">float</span> string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> std::istringstream i;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> i.precision(12);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> i.str(s);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">float</span> x;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">if</span> (!(i >> std::setprecision(12) >> x) )</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">throw</span> <a class="code" href="classBadConversion.html">BadConversion</a>(s);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keyword">template</span><> <span class="keyword">inline</span> OGRFieldType string2type(std::string <span class="keyword">const</span>& s){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> OGRFieldType ftype;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">int</span> ogr_typecount=11;<span class="comment">//hard coded for now!</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < ogr_typecount; ++iType){</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),s.c_str()))</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> ftype=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">return</span> ftype;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">bool</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span>(value)</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">return</span>(<span class="stringliteral">"true"</span>);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">return</span>(<span class="stringliteral">"false"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(std::string <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="comment">// if(value.empty())</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment">// return("<empty string>");</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">return</span>(value);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">float</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> std::ostringstream oss;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// oss.precision(1);</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// oss.setf(ios::fixed);</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> oss << value;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">return</span> oss.str();</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> }</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::string type2string(<span class="keywordtype">double</span> <span class="keyword">const</span>& value){</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> std::ostringstream oss;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// oss.precision(1);</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// oss.setf(ios::fixed);</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> oss << value;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">return</span> oss.str();</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo)</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> {</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> m_longName=longName;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> m_hasArgument=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> m_hide=0;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk<bool>::setAll</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo [...]
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> {</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> m_shortName=shortName;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> m_longName=longName;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> m_hasArgument=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> m_help=helpInfo;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> m_defaultValue=defaultValue;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> m_hasDefault=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> m_hide=hide;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<bool>::Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo)</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> {</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> setAll(shortName,longName,helpInfo);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <a class="code" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk<bool>::Optionpk</a>(<span class="keyword">const</span> std::string& shortName, <span class="keyword">const</span> std::string& longName, <span class="keyword">const</span> std::string& helpInfo,<span class="keyword">const</span> [...]
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> {</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> setAll(shortName,longName,helpInfo,defaultValue, hide);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> }</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">//specialization (only makes sense for T=std::string), generic function throws exception</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">//find a substring in string option (e.g., option is of type -co INTERLEAVE=BAND)</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keyword">template</span><> <span class="keyword">inline</span> std::vector<std::string>::const_iterator <a class="code" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk<std::string>::findSubstring</a>(<span class="keyword">const</span> std::string& argument)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> std::vector<std::string>::const_iterator opit=this->begin();</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">while</span>(opit!=this->end()){</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">if</span>(opit->find(argument)!=std::string::npos)</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> ++opit;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">return</span> opit;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="classBadConversion_html"><div class="ttname"><a href="classBadConversion.html">BadConversion</a></div><div class="ttdoc">throw this class when syntax error in command line option </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00045">Optionpk.h:45</a></div></div>
+<div class="ttc" id="classOptionpk_html_ae0d0d55bac2456e6cbcec97892667742"><div class="ttname"><a href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">Optionpk::getShortName</a></div><div class="ttdeci">std::string getShortName() const </div><div class="ttdoc">get the short name to be used as -shortName </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00137">Optionpk.h:137</a></div></div>
+<div class="ttc" id="classOptionpk_html_a0082d074d437413b3beefa06c0521644"><div class="ttname"><a href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk::Optionpk</a></div><div class="ttdeci">Optionpk()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00198">Optionpk.h:198</a></div></div>
+<div class="ttc" id="classOptionpk_html_aacf921491e6b6fab3c4cad8b39594cff"><div class="ttname"><a href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">Optionpk::~Optionpk</a></div><div class="ttdeci">~Optionpk()</div><div class="ttdoc">default destructor </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00298">Optionpk.h:298</a></div></div>
+<div class="ttc" id="classOptionpk_html_a6054c64a684a4aaba41787d9f8be031f"><div class="ttname"><a href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">Optionpk::getHelp</a></div><div class="ttdeci">std::string getHelp() const </div><div class="ttdoc">get help info stored in m_help </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00141">Optionpk.h:141</a></div></div>
+<div class="ttc" id="classOptionpk_html_ae9dc2dafc605ed3e2a8a798063ce7187"><div class="ttname"><a href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">Optionpk::setDefault</a></div><div class="ttdeci">void setDefault(const T &defaultValue)</div><div class="ttdoc">set a default value for the option </div></div>
+<div class="ttc" id="classOptionpk_html_afea9af606e15b12bc49bc25d0477fe8e"><div class="ttname"><a href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">Optionpk::setHelp</a></div><div class="ttdeci">void setHelp(const std::string &helpInfo)</div><div class="ttdoc">set help information </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00118">Optionpk.h:118</a></div></div>
+<div class="ttc" id="classOptionpk_html_a092414f315f6b310fc88eaf5688b81f4"><div class="ttname"><a href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk::findSubstring</a></div><div class="ttdeci">std::vector< T >::const_iterator findSubstring(const T &argument) const </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00160">Optionpk.h:160</a></div></div>
+<div class="ttc" id="classOptionpk_html_acb7e411ce6a318424bf2ad1f9dc846ff"><div class="ttname"><a href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">Optionpk::getGPLv3License</a></div><div class="ttdeci">static std::string getGPLv3License()</div><div class="ttdoc">get license info </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00143">Optionpk.h:143</a></div></div>
+<div class="ttc" id="classOptionpk_html_a6ee7c0fc0cbea09eac543e1d2c5b7457"><div class="ttname"><a href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">Optionpk::setLongName</a></div><div class="ttdeci">void setLongName(const std::string &longName)</div><div class="ttdoc">set the long name to be used as –longName </div></div>
+<div class="ttc" id="classOptionpk_html_af7ce0ff4dfe57f1e6685b67fb1d70b69"><div class="ttname"><a href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">Optionpk::getLongName</a></div><div class="ttdeci">std::string getLongName() const </div><div class="ttdoc">get the long name to be used as –longName </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00139">Optionpk.h:139</a></div></div>
+<div class="ttc" id="classOptionpk_html_affd58e09b1baaf0b1754fbf938eea11a"><div class="ttname"><a href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk::setAll</a></div><div class="ttdeci">void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</div><div class="ttdoc">set all attributes of the option, except default and hide </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00277">Optionpk. [...]
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classOptionpk_html_a561e7d4b4141cd9023563d4dee01b932"><div class="ttname"><a href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">Optionpk::setShortName</a></div><div class="ttdeci">void setShortName(const std::string &shortName)</div><div class="ttdoc">set the short name to be used as -shortName </div></div>
+<div class="ttc" id="classOptionpk_html_a95628f0f149cb9465468facfb3f0f915"><div class="ttname"><a href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">Optionpk::setHide</a></div><div class="ttdeci">void setHide(short hide)</div><div class="ttdoc">hide option from short help -h (1) or make invisible to short and long help –help (2) ...</div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00120">Optionpk.h:120</a></div></div>
+<div class="ttc" id="classOptionpk_html_a7b788a1b8e5c738732a1733613065ef7"><div class="ttname"><a href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">Optionpk::retrieveOption</a></div><div class="ttdeci">bool retrieveOption(int argc, char **argv)</div><div class="ttdoc">read option from command line (use for all options!) </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00305">Optionpk.h:305</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/PosValue_8h_source.html b/doc/html/PosValue_8h_source.html
new file mode 100644
index 0000000..424b5e4
--- /dev/null
+++ b/doc/html/PosValue_8h_source.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base/PosValue.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">PosValue.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">PosValue.h: class to work with structs containing a position and a value</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _POSVALUE_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _POSVALUE_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="structPosValue.html"> 23</a></span> <span class="keyword">struct </span><a class="code" href="structPosValue.html">PosValue</a>{</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">double</span> posx;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">double</span> posy;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> };</div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classCompare__PosValue.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classCompare__PosValue.html">Compare_PosValue</a>{</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">return</span> pv1.value>pv2.value;<span class="comment">//for decreasing order</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> };</div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classDecrease__PosValue.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classDecrease__PosValue.html">Decrease_PosValue</a>{</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> pv1.value>pv2.value;<span class="comment">//for decreasing order</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> };</div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classIncrease__PosValue.html"> 40</a></span> <span class="keyword">class </span><a class="code" href="classIncrease__PosValue.html">Increase_PosValue</a>{</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> operator() (<span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv1, <span class="keyword">const</span> <a class="code" href="structPosValue.html">PosValue</a>& pv2)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">return</span> pv1.value<pv2.value;<span class="comment">//for increasing order</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> };</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#endif </span><span class="comment">/* _POSVALUE_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="structPosValue_html"><div class="ttname"><a href="structPosValue.html">PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00023">PosValue.h:23</a></div></div>
+<div class="ttc" id="classDecrease__PosValue_html"><div class="ttname"><a href="classDecrease__PosValue.html">Decrease_PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00034">PosValue.h:34</a></div></div>
+<div class="ttc" id="classCompare__PosValue_html"><div class="ttname"><a href="classCompare__PosValue.html">Compare_PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00028">PosValue.h:28</a></div></div>
+<div class="ttc" id="classIncrease__PosValue_html"><div class="ttname"><a href="classIncrease__PosValue.html">Increase_PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00040">PosValue.h:40</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ProcessingPktoolsPlugin_8py_source.html b/doc/html/ProcessingPktoolsPlugin_8py_source.html
new file mode 100644
index 0000000..1f855d7
--- /dev/null
+++ b/doc/html/ProcessingPktoolsPlugin_8py_source.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/ProcessingPktoolsPlugin.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ProcessingPktoolsPlugin.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> ProcessingPktoolsPlugin.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os, sys</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">import</span> inspect</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> <a class="code" href="namespaceqgis_1_1core.html">qgis.core</a> <span class="keyword">import</span> *</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.Processing <span class="keyword">import</span> Processing</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> pktools.pktoolsAlgorithmProvider <span class="keyword">import</span> pktoolsAlgorithmProvider</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> cmd_folder = os.path.split(inspect.getfile(inspect.currentframe()))[0]</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> cmd_folder <span class="keywordflow">not</span> <span class="keywordflow">in</span> sys.path:</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> sys.path.insert(0, cmd_folder)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html"> 40</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">ProcessingPktoolsPlugin</a>:</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">def </span>__init__(self):</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> self.<a class="code" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html#a5de532d34abad9efe561b48f8e7fdf32">provider</a> = pktoolsAlgorithmProvider()</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">def </span>initGui(self):</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> Processing.addProvider(self.<a class="code" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html#a5de532d34abad9efe561b48f8e7fdf32">provider</a>)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">def </span>unload(self):</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> Processing.removeProvider(self.<a class="code" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html#a5de532d34abad9efe561b48f8e7fdf32">provider</a>)</div>
+<div class="ttc" id="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin_html_a5de532d34abad9efe561b48f8e7fdf32"><div class="ttname"><a href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html#a5de532d34abad9efe561b48f8e7fdf32">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin.provider</a></div><div class="ttdeci">provider</div><div class="ttdef"><b>Definition:</b> <a href="ProcessingPktoolsPlugin_8py_source.html#l00042">ProcessingPktoolsPlugin.py:42</a>< [...]
+<div class="ttc" id="namespaceqgis_1_1core_html"><div class="ttname"><a href="namespaceqgis_1_1core.html">core</a></div></div>
+<div class="ttc" id="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin_html"><div class="ttname"><a href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="ProcessingPktoolsPlugin_8py_source.html#l00040">ProcessingPktoolsPlugin.py:40</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/StatFactory_8h_source.html b/doc/html/StatFactory_8h_source.html
new file mode 100644
index 0000000..1b50f46
--- /dev/null
+++ b/doc/html/StatFactory_8h_source.html
@@ -0,0 +1,1562 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/StatFactory.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">StatFactory.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">StatFactory.h: class for statistical operations on vectors</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2013 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _STATFACTORY_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _STATFACTORY_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <gsl/gsl_fit.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <gsl/gsl_errno.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <gsl/gsl_spline.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <gsl/gsl_rng.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <gsl/gsl_randist.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <gsl/gsl_cdf.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <gsl/gsl_statistics.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">namespace </span>statfactory</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classstatfactory_1_1StatFactory.html"> 43</a></span> <span class="keyword">class </span><a class="code" href="classstatfactory_1_1StatFactory.html">StatFactory</a>{</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">enum</span> INTERPOLATION_TYPE {undefined=0,linear=1,polynomial=2,cspline=3,cspline_periodic=4,akima=5,akima_periodic=6};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">//todo: expand with other distributions as in http://www.gnu.org/software/gsl/manual/gsl-ref_toc.html#TOC320</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">enum</span> DISTRIBUTION_TYPE {uniform=1,gaussian=2};</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <a class="code" href="classstatfactory_1_1StatFactory.html">StatFactory</a>(<span class="keywordtype">void</span>){};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">virtual</span> ~<a class="code" href="classstatfactory_1_1StatFactory.html">StatFactory</a>(<span class="keywordtype">void</span>){};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> INTERPOLATION_TYPE getInterpolationType(<span class="keyword">const</span> std::string interpolationType){</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> std::map<std::string, INTERPOLATION_TYPE> m_interpMap;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> initMap(m_interpMap);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> m_interpMap[interpolationType];</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> DISTRIBUTION_TYPE getDistributionType(<span class="keyword">const</span> std::string distributionType){</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> std::map<std::string, DISTRIBUTION_TYPE> m_distMap;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> initDist(m_distMap);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> m_distMap[distributionType];</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> };</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">static</span> <span class="keywordtype">void</span> allocAcc(gsl_interp_accel *&acc){</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> acc = gsl_interp_accel_alloc ();</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">static</span> <span class="keywordtype">void</span> getSpline(<span class="keyword">const</span> std::string type, <span class="keywordtype">int</span> size, gsl_spline *& spline){</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> std::map<std::string, INTERPOLATION_TYPE> m_interpMap;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> initMap(m_interpMap);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">switch</span>(m_interpMap[type]){</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">case</span>(polynomial):</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> spline=gsl_spline_alloc(gsl_interp_polynomial,size);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span>(cspline):</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> spline=gsl_spline_alloc(gsl_interp_cspline,size);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span>(cspline_periodic):</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> spline=gsl_spline_alloc(gsl_interp_cspline_periodic,size);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span>(akima):</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> spline=gsl_spline_alloc(gsl_interp_akima,size);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span>(akima_periodic):</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> spline=gsl_spline_alloc(gsl_interp_akima_periodic,size);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span>(linear):</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> spline=gsl_spline_alloc(gsl_interp_linear,size);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> assert(spline);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> };</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">static</span> <span class="keywordtype">int</span> initSpline(gsl_spline *spline, <span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keyword">const</span> <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">return</span> gsl_spline_init (spline, x, y, size);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> };</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">static</span> <span class="keywordtype">double</span> evalSpline(gsl_spline *spline, <span class="keywordtype">double</span> x, gsl_interp_accel *acc){</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> gsl_spline_eval (spline, x, acc);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">static</span> gsl_rng* getRandomGenerator(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> theSeed){</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">const</span> gsl_rng_type * T;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> gsl_rng * r;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// select random number generator </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> r = gsl_rng_alloc (gsl_rng_mt19937);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> gsl_rng_set(r,theSeed);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> getNodataValues(std::vector<double>& nodatav)<span class="keyword"> const</span>{nodatav=m_noDataValues;};</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">bool</span> isNoData(<span class="keywordtype">double</span> value)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(m_noDataValues.empty()) </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> find(m_noDataValues.begin(),m_noDataValues.end(),value)!=m_noDataValues.end();</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> };</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pushNodDataValue(<span class="keywordtype">double</span> noDataValue){</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(find(m_noDataValues.begin(),m_noDataValues.end(),noDataValue)==m_noDataValues.end())</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> m_noDataValues.push_back(noDataValue);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> m_noDataValues.size();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> };</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> setNoDataValues(std::vector<double> vnodata){</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> m_noDataValues=vnodata;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> m_noDataValues.size();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> };</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">double</span> getRandomValue(<span class="keyword">const</span> gsl_rng* r, <span class="keyword">const</span> std::string type, <span class="keywordtype">double</span> a=0, <span class="keywordtype">double</span> b=1)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> std::map<std::string, DISTRIBUTION_TYPE> m_distMap;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> initDist(m_distMap);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> randValue=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">switch</span>(m_distMap[type]){</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">case</span>(uniform):</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> randValue = a+gsl_rng_uniform(r);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">case</span>(gaussian):</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> randValue = a+gsl_ran_gaussian(r, b); </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span> randValue;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> };</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T mymax(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, T minConstraint) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T mymax(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, T maxConstraint) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// template<class T> typename std::vector<T>::const_iterator mymax(const std::vector<T>& v, typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end) const;</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const [...]
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::iterator mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator end) <sp [...]
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const [...]
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::iterator mymin(<span class="keyword">const</span> <span class="keyword">typename</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator end, T m [...]
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end) <span class="keyword">c [...]
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::iterator mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator end) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, T maxConstraint) <span [...]
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::iterator mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator end, T maxConstraint) <span class="keyword">co [...]
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator absmin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end) <span class="keyword"> [...]
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">typename</span> std::vector<T>::const_iterator absmax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end) <span class="keyword"> [...]
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> minmax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, T& theMin, T& theMax) <span class="keyword">const</ [...]
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T sum(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> mean(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> eraseNoData(std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T median(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> var(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> moment(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> cmoment(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> skewness(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> kurtosis(<span class="keyword">const</span> std::vector<T>& v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> meanVar(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">double</span>& m1, <span class="keywordtype">double</span>& v1) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> scale2byte(<span class="keyword">const</span> std::vector<T1>& input, std::vector<T2>& output, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> lbound=0, <span class="keywordtype">unsigned</span> <spa [...]
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> distribution(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, std::vector<double>& output, <span cla [...]
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> distribution(<span class="keyword">const</span> std::vector<T>& input, std::vector<double>& output, <span class="keywordtype">int</span> nbin, <span class="keywordtype">double</span> sigma=0, <span class="keyword">const</span> std::string &filename=<span class="strin [...]
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> distribution2d(<span class="keyword">const</span> std::vector<T>& inputX, <span class="keyword">const</span> std::vector<T>& inputY, std::vector< std::vector<double> >& output, <span class="keywordtype">int</span> nbin, T& minX, T& maxX, T& mi [...]
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> cumulative (<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, std::vector<int>& output, <span class="k [...]
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> percentiles (<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, std::vector<T>& output, <span class="k [...]
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T percentile(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, <span class="keywordtype">double</span> percent, T minimum=0, T maximum=0) <span class= [...]
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> signature(<span class="keyword">const</span> std::vector<T>& input, <span class="keywordtype">double</span>& k, <span class="keywordtype">double</span>& alpha, <span class="keywordtype">double</span>& beta, <span class="keywordtype">double</span> e) <span class="keyword [...]
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">void</span> signature(<span class="keywordtype">double</span> m1, <span class="keywordtype">double</span> m2, <span class="keywordtype">double</span>& k, <span class="keywordtype">double</span>& alpha, <span class="keywordtype">double</span>& beta, <span class="keywordtype">double</span> e) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> normalize(<span class="keyword">const</span> std::vector<T>& input, std::vector<double>& output) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> normalize_pct(std::vector<T>& input) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> rmse(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> correlation(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">int</span> delay=0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// template<class T> double gsl_correlation(const std::vector<T>& x, const std::vector<T>& y) const;</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> gsl_covariance(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> cross_correlation(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">int</span> maxdelay, std::vector<T>& z) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> linear_regression(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> linear_regression_err(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateNoData(<span class="keyword">const</span> std::vector<double>& wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::string& type, std::vector<T>& output, <span class="keywordtype">bool</sp [...]
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateUp(<span class="keyword">const</span> std::vector<double>& wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double>& wavelengthOut, <span class="keyword">const</span> std::string&am [...]
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateUp(<span class="keyword">const</span> std::vector<double>& wavelengthIn, <span class="keyword">const</span> std::vector< std::vector<T> >& input, <span class="keyword">const</span> std::vector<double>& wavelengthOut, <span class="keyword">const< [...]
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// template<class T> void interpolateUp(const std::vector< std::vector<T> >& input, std::vector< std::vector<T> >& output, double start, double end, double step, const gsl_interp_type* type);</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// template<class T> void interpolateUp(const std::vector< std::vector<T> >& input, const std::vector<double>& wavelengthIn, std::vector< std::vector<T> >& output, std::vector<double>& wavelengthOut, double start, double end, double step, const gsl_interp_type* type);</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateUp(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">int</span> nbin) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> nearUp(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateUp(<span class="keywordtype">double</span>* input, <span class="keywordtype">int</span> dim, std::vector<T>& output, <span class="keywordtype">int</span> nbin);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateDown(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">int</span> nbin) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> interpolateDown(<span class="keywordtype">double</span>* input, <span class="keywordtype">int</span> dim, std::vector<T>& output, <span class="keywordtype">int</span> nbin);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initMap(std::map<std::string, INTERPOLATION_TYPE>& m_interpMap){</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">//initialize selMap</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> m_interpMap[<span class="stringliteral">"linear"</span>]=linear;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> m_interpMap[<span class="stringliteral">"polynomial"</span>]=polynomial;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> m_interpMap[<span class="stringliteral">"cspline"</span>]=cspline;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> m_interpMap[<span class="stringliteral">"cspline_periodic"</span>]=cspline_periodic;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> m_interpMap[<span class="stringliteral">"akima"</span>]=akima;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> m_interpMap[<span class="stringliteral">"akima_periodic"</span>]=akima_periodic;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">static</span> <span class="keywordtype">void</span> initDist(std::map<std::string, DISTRIBUTION_TYPE>& m_distMap){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">//initialize distMap</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> m_distMap[<span class="stringliteral">"gaussian"</span>]=gaussian;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> m_distMap[<span class="stringliteral">"uniform"</span>]=uniform;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> std::vector<double> m_noDataValues;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> };</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T&g [...]
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=begin;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">for</span>(<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span>(!isNoData(*it)){</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(*tmpIt>*it)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> tmpIt=it;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::iterator StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator [...]
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">typename</span> std::vector<T>::iterator tmpIt=begin;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(!isNoData(*it)){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>(*tmpIt>*it)</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> tmpIt=it;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T& [...]
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=v.end();</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> T minValue=minConstraint;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>((minConstraint<=*it)&&(*it<=minValue)){</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> tmpIt=it;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> minValue=*it;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::iterator StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator [...]
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">typename</span> std::vector<T>::iterator tmpIt=v.end();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> T minValue=minConstraint;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>((minConstraint<=*it)&&(*it<=minValue)){</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> tmpIt=it;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> minValue=*it;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T&g [...]
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=begin;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(*tmpIt<*it)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> tmpIt=it;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::iterator StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator [...]
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">typename</span> std::vector<T>::iterator tmpIt=begin;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(*tmpIt<*it)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> tmpIt=it;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> end;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T&g [...]
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=v.end();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> T maxValue=maxConstraint;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>((maxValue<=*it)&&(*it<=maxConstraint)){</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> tmpIt=it;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> maxValue=*it;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> }</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">return</span> end;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::iterator StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::iterator begin, <span class="keyword">typename</span> std::vector<T>::iterator [...]
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">typename</span> std::vector<T>::iterator tmpIt=v.end();</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> T maxValue=maxConstraint;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>((maxValue<=*it)&&(*it<=maxConstraint)){</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> tmpIt=it;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> maxValue=*it;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> }</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">return</span> end;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> }</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> T StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(v.empty()){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> std::string errorString=<span class="stringliteral">"Error: vector is empty"</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> T minValue=*(v.begin());</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>(minValue>*it)</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> minValue=*it;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">return</span> minValue;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> T StatFactory::mymin(<span class="keyword">const</span> std::vector<T>& v, T minConstraint)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> T minValue=minConstraint;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span>((minConstraint<=*it)&&(*it<=minValue))</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> minValue=*it;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span> minValue;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> T StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">if</span>(v.empty()){</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> std::string errorString=<span class="stringliteral">"Error: vector is empty"</span>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> T maxValue=*(v.begin());</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">if</span>(maxValue<*it)</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> maxValue=*it;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> }</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">return</span> maxValue;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> }</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> T StatFactory::mymax(<span class="keyword">const</span> std::vector<T>& v, T maxConstraint)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> T maxValue=maxConstraint;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>((maxValue<=*it)&&(*it<=maxConstraint))</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> maxValue=*it;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> }</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">return</span> maxValue;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::absmax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T& [...]
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=begin;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span>(abs(*tmpIt)<abs(*it))</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> tmpIt=it;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">return</span> end;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keyword">typename</span> std::vector<T>::const_iterator StatFactory::absmin(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T& [...]
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keyword">typename</span> std::vector<T>::const_iterator tmpIt=begin;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">if</span>(abs(*tmpIt)>abs(*it))</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> tmpIt=it;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">return</span> tmpIt;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">return</span> end;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> StatFactory::minmax(<span class="keyword">const</span> std::vector<T>& v, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, T& theMi [...]
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> theMin=*begin;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> theMax=*begin;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<T>::const_iterator it = begin; it!=end; ++it){</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">if</span>(theMin>*it)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> theMin=*it;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">if</span>(theMax<*it)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> theMax=*it;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span>(!isValid){</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> theMin=m_noDataValues[0];</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> theMax=m_noDataValues[0];</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> T StatFactory::sum(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> T tmpSum=0;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">for</span> (it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> tmpSum+=*it;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">if</span>(isValid)</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">return</span> tmpSum;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> }</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">double</span> StatFactory::mean(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> T tmpSum=0;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> validSize=0;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">for</span> (it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> ++validSize;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> tmpSum+=*it;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(validSize)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(tmpSum)/validSize;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> StatFactory::eraseNoData(std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">typename</span> std::vector<T>::iterator it=v.begin();</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">while</span>(it!=v.end()){</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> v.erase(it);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> ++it;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T StatFactory::median(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> std::vector<T> tmpV=v;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> eraseNoData(tmpV);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">if</span>(tmpV.size()){</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> sort(tmpV.begin(),tmpV.end());</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(tmpV.size()%2)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">return</span> tmpV[tmpV.size()/2];</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">return</span> 0.5*(tmpV[tmpV.size()/2-1]+tmpV[tmpV.size()/2]);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::var(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> validSize=0;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordtype">double</span> m1=0;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="keywordtype">double</span> m2=0;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">for</span> (it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> m1+=*it;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> m2+=(*it)*(*it);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> ++validSize;</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span>(validSize){</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> m2/=validSize;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> m1/=validSize;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">return</span> m2-m1*m1;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> }</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::moment(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">int</span> n)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> validSize=0;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">// double m1=mean(v);</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span>(it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> m+=pow((*it),n);</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> ++validSize;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(validSize)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">return</span> m/validSize;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> }</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment">//central moment</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::cmoment(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">int</span> n)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> validSize=0;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordtype">double</span> m1=mean(v);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">for</span>(it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> m+=pow((*it-m1),n);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> ++validSize;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">if</span>(validSize)</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">return</span> m/validSize;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> }</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::skewness(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="comment">//todo: what if nodata value?</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">return</span> cmoment(v,3)/pow(var(v),1.5);</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::kurtosis(<span class="keyword">const</span> std::vector<T>& v)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">//todo: what if nodata value?</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">double</span> m2=cmoment(v,2);</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordtype">double</span> m4=cmoment(v,4);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">return</span> m4/m2/m2-3.0;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::meanVar(<span class="keyword">const</span> std::vector<T>& v, <span class="keywordtype">double</span>& m1, <span class="keywordtype">double</span>& v1)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> validSize=0;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> m1=0;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> v1=0;</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="keywordtype">double</span> m2=0;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">for</span> (it = v.begin(); it!= v.end(); ++it){</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> m1+=*it;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> m2+=(*it)*(*it);</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> ++validSize;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">if</span>(validSize){</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> m2/=validSize;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> m1/=validSize;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> v1=m2-m1*m1;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> m1=m_noDataValues[0];</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> v1=m_noDataValues[0];</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> }</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> }</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">template</span><<span class="keyword">class</span> T1, <span class="keyword">class</span> T2> <span class="keywordtype">void</span> StatFactory::scale2byte(<span class="keyword">const</span> std::vector<T1>& input, std::vector<T2>& output, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> lbound, <span class="keywordtype">unsigned</s [...]
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> output.resize(input.size());</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> T1 minimum=mymin(input);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> T1 maximum=mymax(input);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">if</span>(minimum>=maximum){</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> }</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordtype">double</span> scale=(ubound-lbound)/(maximum-minimum);</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="comment">//todo: what if nodata value?</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i<input.size();++i){</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> output[i]=scale*(input[i]-(minimum))+lbound;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> }</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::distribution(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, std::vector<double>& output [...]
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> minmax(input,begin,end,minValue,maxValue);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">if</span>(minimum<maximum&&minimum>minValue)</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> minValue=minimum;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">if</span>(minimum<maximum&&maximum<maxValue)</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> maxValue=maximum;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="comment">//todo: check...</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> minimum=minValue;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> maximum=maxValue;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span>(maximum<=minimum){</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> std::ostringstream s;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> s<<<span class="stringliteral">"Error: could not calculate distribution (min>=max)"</span>;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> }</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">if</span>(!nbin){</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> std::string errorString=<span class="stringliteral">"Error: nbin not defined"</span>;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">if</span>(!input.size()){</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> }</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">if</span>(output.size()!=nbin){</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> output.resize(nbin);</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nbin;output[i++]=0);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> }</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keyword">typename</span> std::vector<T>::const_iterator it;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">for</span>(it=begin;it!=end;++it){</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">if</span>(*it<minimum)</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">if</span>(*it>maximum)</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">if</span>(isNoData(*it))</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span>(sigma>0){</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment">// minimum-=2*sigma;</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="comment">// maximum+=2*sigma;</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="comment">//create kde for Gaussian basis function</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment">//todo: speed up by calculating first and last bin with non-zero contriubtion...</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="comment">//todo: calculate real surface below pdf by using gsl_cdf_gaussian_P(x-mean+binsize,sigma)-gsl_cdf_gaussian_P(x-mean,sigma)</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin){</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordtype">double</span> icenter=minimum+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maximum-minimum)*(ibin+0.5)/nbin;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordtype">double</span> thePdf=gsl_ran_gaussian_pdf(*it-icenter, sigma);</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> output[ibin]+=thePdf;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> }</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">int</span> theBin=0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">if</span>(*it==maximum)</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> theBin=nbin-1;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*it>minimum && *it<maximum)</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> theBin=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>((nbin-1)*(*it)-minimum)/(maximum-minimum));</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> ++output[theBin];</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="comment">// if(*it==maximum)</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="comment">// ++output[nbin-1];</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="comment">// else if(*it>=minimum && *it<maximum)</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="comment">// ++output[static_cast<int>(static_cast<double>((*it)-minimum)/(maximum-minimum)*nbin)];</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> }</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">if</span>(!isValid){</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> }</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!filename.empty()){</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> std::ofstream outputfile;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> outputfile.open(filename.c_str());</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">if</span>(!outputfile){</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> std::ostringstream s;</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> s<<<span class="stringliteral">"Error opening distribution file , "</span> << filename;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> }</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin)</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> outputfile << minimum+static_cast<double>(maximum-minimum)*(ibin+0.5)/nbin << <span class="stringliteral">" "</span> << <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(output[ibin])/input.size() << std::endl;</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> outputfile.close();</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> }</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::distribution2d(<span class="keyword">const</span> std::vector<T>& inputX, <span class="keyword">const</span> std::vector<T>& inputY, std::vector< std::vector<double> >& output, <span class="keywordtype">int</span> nbin, T& minX, T& maxX [...]
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">if</span>(inputX.empty()){</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> std::ostringstream s;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> s<<<span class="stringliteral">"Error: inputX is empty"</span>;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> }</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">if</span>(inputX.size()!=inputY.size()){</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> std::ostringstream s;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> s<<<span class="stringliteral">"Error: inputX is empty"</span>;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> }</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> npoint=inputX.size();</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">if</span>(maxX<=minX)</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> minmax(inputX,inputX.begin(),inputX.end(),minX,maxX);</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">if</span>(maxX<=minX){</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> std::ostringstream s;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minX>=maxX)"</span>;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">if</span>(maxY<=minY)</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> minmax(inputY,inputY.begin(),inputY.end(),minY,maxY);</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span>(maxY<=minY){</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> std::ostringstream s;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minY>=maxY)"</span>;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> }</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">if</span>(nbin<=1){</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> std::ostringstream s;</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> s<<<span class="stringliteral">"Error: nbin must be larger than 1"</span>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> output.resize(nbin);</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nbin;++i){</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> output[i].resize(nbin);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<nbin;++j)</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> output[i][j]=0;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> }</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="keywordtype">int</span> binX=0;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordtype">int</span> binY=0;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ipoint=0;ipoint<npoint;++ipoint){</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">if</span>(inputX[ipoint]==maxX)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> binX=nbin-1;</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> binX=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputX[ipoint]-minX)/(maxX-minX)*nbin);</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">if</span>(inputY[ipoint]==maxY)</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> binY=nbin-1;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> binY=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputY[ipoint]-minY)/(maxY-minY)*nbin);</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">if</span>(binX<0){</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> std::ostringstream s;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> s<<<span class="stringliteral">"Error: binX is smaller than 0"</span>;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">if</span>(output.size()<=binX){</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> std::ostringstream s;</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> s<<<span class="stringliteral">"Error: output size must be larger than binX"</span>;</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">if</span>(binY<0){</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> std::ostringstream s;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> s<<<span class="stringliteral">"Error: binY is smaller than 0"</span>;</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> }</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordflow">if</span>(output.size()<=binY){</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> std::ostringstream s;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> s<<<span class="stringliteral">"Error: output size must be larger than binY"</span>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">if</span>(sigma>0){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="comment">// minX-=2*sigma;</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="comment">// maxX+=2*sigma;</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment">// minY-=2*sigma;</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="comment">// maxY+=2*sigma;</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment">//create kde for Gaussian basis function</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="comment">//todo: speed up by calculating first and last bin with non-zero contriubtion...</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinX=0;ibinX<nbin;++ibinX){</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordtype">double</span> centerX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*ibinX/nbin;</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordtype">double</span> pdfX=gsl_ran_gaussian_pdf(inputX[ipoint]-centerX, sigma);</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinY=0;ibinY<nbin;++ibinY){</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">//calculate \integral_ibinX^(ibinX+1)</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordtype">double</span> centerY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*ibinY/nbin;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordtype">double</span> pdfY=gsl_ran_gaussian_pdf(inputY[ipoint]-centerY, sigma);</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> output[ibinX][binY]+=pdfX*pdfY;</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> }</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> }</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> ++output[binX][binY];</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> }</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span>(!filename.empty()){</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> std::ofstream outputfile;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> outputfile.open(filename.c_str());</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">if</span>(!outputfile){</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> std::ostringstream s;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> s<<<span class="stringliteral">"Error opening distribution file , "</span> << filename;</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> }</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binX=0;binX<nbin;++binX){</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> outputfile << std::endl;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binY=0;binY<nbin;++binY){</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordtype">double</span> binValueX=0;</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span>(nbin==maxX-minX+1)</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> binValueX=minX+binX;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> binValueX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*(binX+0.5)/nbin;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordtype">double</span> binValueY=0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">if</span>(nbin==maxY-minY+1)</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> binValueY=minY+binY;</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> binValueY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*(binY+0.5)/nbin;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="keywordtype">double</span> value=0;</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> value=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(output[binX][binY])/npoint;</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> outputfile << binValueX << <span class="stringliteral">" "</span> << binValueY << <span class="stringliteral">" "</span> << value << std::endl;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment">/* double value=static_cast<double>(output[binX][binY])/npoint; */</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment">/* outputfile << (maxX-minX)*bin/(nbin-1)+minX << " " << (maxY-minY)*bin/(nbin-1)+minY << " " << value << std::endl; */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> }</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> }</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> outputfile.close();</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> }</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> }</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">//todo: what with nodata values?</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::percentiles (<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, std::vector<T>& output, <sp [...]
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(maximum<=minimum)</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> minmax(input,begin,end,minimum,maximum);</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">if</span>(maximum<=minimum){</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> std::ostringstream s;</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> s<<<span class="stringliteral">"Error: maximum must be at least minimum"</span>;</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> }</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="keywordflow">if</span>(nbin<=1){</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> std::ostringstream s;</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> s<<<span class="stringliteral">"Error: nbin must be larger than 1"</span>;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> }</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">if</span>(input.empty()){</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> std::ostringstream s;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> s<<<span class="stringliteral">"Error: input is empty"</span>;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> output.resize(nbin);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> std::vector<T> inputSort;</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> inputSort.assign(begin,end);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keyword">typename</span> std::vector<T>::iterator vit=inputSort.begin();</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">while</span>(vit!=inputSort.end()){</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">if</span>(*vit<minimum||*vit>maximum)</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> inputSort.erase(vit);</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> ++vit;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> std::sort(inputSort.begin(),inputSort.end());</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> vit=inputSort.begin();</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> std::vector<T> inputBin;</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin){</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> inputBin.clear();</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">while</span>(inputBin.size()<inputSort.size()/nbin&&vit!=inputSort.end()){</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> inputBin.push_back(*vit);</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> ++vit;</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">if</span>(inputBin.size()){</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> output[ibin]=mymax(inputBin);</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> }</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> }</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">if</span>(!filename.empty()){</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> std::ofstream outputfile;</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> outputfile.open(filename.c_str());</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="keywordflow">if</span>(!outputfile){</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> std::ostringstream s;</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> s<<<span class="stringliteral">"error opening distribution file , "</span> << filename;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin)</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> outputfile << ibin*100.0/nbin << <span class="stringliteral">" "</span> << static_cast<double>(output[ibin])/input.size() << std::endl;</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> outputfile.close();</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">//todo: what with nodata values?</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T StatFactory::percentile(<span class="keyword">const</span> std::vector<T>& input, <span class="keyword">typename</span> std::vector<T>::const_iterator begin, <span class="keyword">typename</span> std::vector<T>::const_iterator end, <span class="keywordtype">double</span> percent, T minimum, T maximum)<span [...]
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">if</span>(input.empty()){</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> std::ostringstream s;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> s<<<span class="stringliteral">"Error: input is empty"</span>;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> std::vector<T> inputSort;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> inputSort.assign(begin,end);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="keyword">typename</span> std::vector<T>::iterator vit=inputSort.begin();</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">while</span>(vit!=inputSort.end()){</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">if</span>(maximum>minimum){</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordflow">if</span>(*vit<minimum||*vit>maximum)</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> inputSort.erase(vit);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> ++vit;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> }</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> std::sort(inputSort.begin(),inputSort.end());</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">return</span> gsl_stats_quantile_from_sorted_data(&(inputSort[0]),1,inputSort.size(),percent/100.0);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> }</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::signature(<span class="keyword">const</span> std::vector<T>& input, <span class="keywordtype">double</span>&k, <span class="keywordtype">double</span>& alpha, <span class="keywordtype">double</span>& beta, <span class="keywordtype">double</span> e)<span class [...]
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordtype">double</span> m1=moment(input,1);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordtype">double</span> m2=moment(input,2);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> signature(m1,m2,k,alpha,beta,e);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment">//todo: what with nodata values?</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::normalize(<span class="keyword">const</span> std::vector<T>& input, std::vector<double>& output)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="keywordtype">double</span> total=sum(input);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">if</span>(total){</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> output.resize(input.size());</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<input.size();++index)</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> output[index]=input[index]/total;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> output=input;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> }</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment">//todo: what with nodata values?</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::normalize_pct(std::vector<T>& input)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordtype">double</span> total=sum(input);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordflow">if</span>(total){</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keyword">typename</span> std::vector<T>::iterator it;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordflow">for</span>(it=input.begin();it!=input.end();++it)</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> *it=100.0*(*it)/total;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> }</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> }</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::rmse(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">if</span>(x.size()!=y.size()){</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> std::ostringstream s;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> s<<<span class="stringliteral">"Error: x and y not equal in size"</span>;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> }</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span>(x.empty()){</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> std::ostringstream s;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> s<<<span class="stringliteral">"Error: x is empty"</span>;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<x.size();++isample){</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">if</span>(isNoData(x[isample])||isNoData(y[isample]))</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordtype">double</span> e=x[isample]-y[isample];</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> mse+=e*e/x.size();</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">return</span> sqrt(mse);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment">// template<class T> double StatFactory::gsl_correlation(const std::vector<T>& x, const std::vector<T>& y) const{</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">// return(gsl_stats_correlation(&(x[0]),1,&(y[0]),1,x.size()));</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::gsl_covariance(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordflow">return</span>(gsl_stats_covariance(&(x[0]),1,&(y[0]),1,x.size()));</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> }</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::correlation(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">int</span> delay)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordtype">double</span> meanX=0;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordtype">double</span> meanY=0;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordtype">double</span> varX=0;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordtype">double</span> varY=0;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordtype">double</span> sXY=0;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> meanVar(x,meanX,varX);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> meanVar(y,meanY,varY);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordtype">double</span> denom = sqrt(varX*varY);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordtype">bool</span> isValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordflow">if</span>(denom){</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">//Calculate the correlation series</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> sXY = 0;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i<x.size();++i) {</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordtype">int</span> j = i + delay;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">if</span> (j < 0 || j >= y.size())</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(isNoData(x[i])||isNoData(y[j]))</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> isValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keywordflow">if</span>(i<0){</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> std::ostringstream s;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> s<<<span class="stringliteral">"Error: i must be positive"</span>;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">if</span>(i>=x.size()){</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> std::ostringstream s;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> s<<<span class="stringliteral">"Error: i must be smaller than x.size()"</span>;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">if</span>(j<0){</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> std::ostringstream s;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> s<<<span class="stringliteral">"Error: j must be positive"</span>;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> }</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordflow">if</span>(j>=y.size()){</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> std::ostringstream s;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> s<<<span class="stringliteral">"Error: j must be smaller than y.size()"</span>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> }</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> sXY += (x[i] - meanX) * (y[j] - meanY);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> }</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> }</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="keywordflow">if</span>(isValid){</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordtype">double</span> minSize=(x.size()<y.size())?x.size():y.size();</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="keywordflow">return</span>(sXY / denom / (minSize-1));</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_noDataValues.size())</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="keywordflow">return</span> m_noDataValues[0];</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> std::string errorString=<span class="stringliteral">"Error: no valid data found"</span>;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> }</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> }</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment">//todo: what if no valid data?</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::cross_correlation(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">int</span> maxdelay, std::vector<T>& z)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> z.clear();</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordtype">double</span> sumCorrelation=0;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> delay=-maxdelay;delay<maxdelay;delay++) {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> z.push_back(correlation(x,y,delay));</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> sumCorrelation+=z.back();</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="keywordflow">return</span> sumCorrelation;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::linear_regression(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="keywordflow">if</span>(x.size()!=y.size()){</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> std::ostringstream s;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> s<<<span class="stringliteral">"Error: x and y not equal in size"</span>;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> }</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keywordflow">if</span>(x.empty()){</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> std::ostringstream s;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> s<<<span class="stringliteral">"Error: x is empty"</span>;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> }</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordtype">double</span> cov00;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordtype">double</span> cov01;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordtype">double</span> cov11;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordtype">double</span> sumsq;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> gsl_fit_linear(&(x[0]),1,&(y[0]),1,x.size(),&c0,&c1,&cov00,&cov01,&cov11,&sumsq);</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">return</span> (1-sumsq/var(y)/(y.size()-1));</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">double</span> StatFactory::linear_regression_err(<span class="keyword">const</span> std::vector<T>& x, <span class="keyword">const</span> std::vector<T>& y, <span class="keywordtype">double</span> &c0, <span class="keywordtype">double</span> &c1)<span class="keyword"> const</sp [...]
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="keywordflow">if</span>(x.size()!=y.size()){</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> std::ostringstream s;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> s<<<span class="stringliteral">"Error: x and y not equal in size"</span>;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> }</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">if</span>(x.empty()){</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> std::ostringstream s;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> s<<<span class="stringliteral">"Error: x is empty"</span>;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> }</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordtype">double</span> cov00;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordtype">double</span> cov01;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordtype">double</span> cov11;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordtype">double</span> sumsq;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> gsl_fit_linear(&(x[0]),1,&(y[0]),1,x.size(),&c0,&c1,&cov00,&cov01,&cov11,&sumsq);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">return</span> sqrt((sumsq)/(y.size()));</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="comment">//alternatively: use GNU scientific library:</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment">// gsl_stats_correlation (const double data1[], const size_t stride1, const double data2[], const size_t stride2, const size_t n)</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateNoData(<span class="keyword">const</span> std::vector<double>& wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::string& type, std::vector<T>& output, <span class="keywordtyp [...]
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="keywordflow">if</span>(wavelengthIn.empty()){</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> std::ostringstream s;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> s<<<span class="stringliteral">"Error: wavelengthIn is empty"</span>;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> }</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> std::vector<double> wavelengthOut=wavelengthIn;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> std::vector<T> validIn=input;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">if</span>(input.size()!=wavelengthIn.size()){</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> std::ostringstream s;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> s<<<span class="stringliteral">"Error: x and y not equal in size"</span>;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> }</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordtype">int</span> nband=wavelengthIn.size();</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> output.clear();</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment">//remove nodata from input and corresponding wavelengthIn</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">if</span>(m_noDataValues.size()){</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="keyword">typename</span> std::vector<T>::iterator itValue=validIn.begin();</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="keyword">typename</span> std::vector<T>::iterator itWavelength=wavelengthOut.begin();</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordflow">while</span>(itValue!=validIn.end()&&itWavelength!=wavelengthOut.end()){</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordflow">if</span>(isNoData(*itValue)){</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> validIn.erase(itValue);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> wavelengthOut.erase(itWavelength);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> }</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> ++itValue;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> ++itWavelength;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> }</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> }</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">if</span>(validIn.size()>1){</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> interpolateUp(wavelengthOut, validIn, wavelengthIn, type, output, verbose);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> }</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> output=input;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> }</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="keywordflow">else</span><span class="comment">//we can not interpolate if no valid data</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> output=input;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> }</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="keywordflow">else</span><span class="comment">//no nodata values to interpolate</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> output=input;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateUp(<span class="keyword">const</span> std::vector<double>& wavelengthIn, <span class="keyword">const</span> std::vector<T>& input, <span class="keyword">const</span> std::vector<double>& wavelengthOut, <span class="keyword">const</span> std [...]
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordflow">if</span>(wavelengthIn.empty()){</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> std::ostringstream s;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> s<<<span class="stringliteral">"Error: wavelengthIn is empty"</span>;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> }</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">if</span>(input.size()!=wavelengthIn.size()){</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> std::ostringstream s;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> s<<<span class="stringliteral">"Error: input and wavelengthIn not equal in size"</span>;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> }</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">if</span>(wavelengthOut.empty()){</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> std::ostringstream s;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> s<<<span class="stringliteral">"Error: wavelengthOut is empty"</span>;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> }</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="keywordtype">int</span> nband=wavelengthIn.size();</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> output.clear();</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> gsl_interp_accel *acc;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> allocAcc(acc);</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> gsl_spline *spline;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> getSpline(type,nband,spline);</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> assert(spline);</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> assert(&(wavelengthIn[0]));</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> assert(&(input[0]));</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordtype">int</span> status=initSpline(spline,&(wavelengthIn[0]),&(input[0]),nband);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">if</span>(status){</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> std::string errorString=<span class="stringliteral">"Could not initialize spline"</span>;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<wavelengthOut.size();++index){</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="keywordflow">if</span>(wavelengthOut[index]<*wavelengthIn.begin()){</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> output.push_back(*(input.begin()));</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wavelengthOut[index]>wavelengthIn.back()){</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> output.push_back(input.back());</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="keywordtype">double</span> dout=evalSpline(spline,wavelengthOut[index],acc);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> output.push_back(dout);</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> }</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> gsl_spline_free(spline);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> gsl_interp_accel_free(acc);</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> }</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">// template<class T> void StatFactory::interpolateUp(const std::vector<double>& wavelengthIn, const std::vector< std::vector<T> >& input, const std::vector<double>& wavelengthOut, const std::string& type, std::vector< std::vector<T> >& output, bool verbose){</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="comment">// assert(wavelengthIn.size());</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment">// assert(wavelengthOut.size());</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment">// int nsample=input.size(); </span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">// int nband=wavelengthIn.size();</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment">// output.clear();</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">// output.resize(nsample);</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment">// gsl_interp_accel *acc;</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">// allocAcc(acc);</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">// gsl_spline *spline;</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">// getSpline(type,nband,spline);</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">// for(int isample=0;isample<nsample;++isample){</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment">// assert(input[isample].size()==wavelengthIn.size());</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">// initSpline(spline,&(wavelengthIn[0]),&(input[isample][0]),nband); </span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment">// for(int index=0;index<wavelengthOut.size();++index){</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment">// if(type=="linear"){</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">// if(wavelengthOut[index]<wavelengthIn.back())</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment">// output[isample].push_back(*(input.begin()));</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">// else if(wavelengthOut[index]>wavelengthIn.back())</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">// output[isample].push_back(input.back());</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">// double dout=evalSpline(spline,wavelengthOut[index],acc);</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment">// output[isample].push_back(dout);</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment">// gsl_spline_free(spline);</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">// gsl_interp_accel_free(acc);</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateUp(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">int</span> nbin)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="keywordflow">if</span>(input.empty()){</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> std::ostringstream s;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> s<<<span class="stringliteral">"Error: input is empty"</span>;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> }</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordflow">if</span>(!nbin){</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> std::ostringstream s;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> s<<<span class="stringliteral">"Error: nbin must be larger than 0"</span>;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> }</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> output.clear();</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordtype">int</span> dim=input.size();</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dim;++i){</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="keywordtype">double</span> deltaX=0;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordtype">double</span> left=input[i];</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="keywordflow">if</span>(i<dim-1){</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="keywordtype">double</span> right=(i<dim-1)? input[i+1]:input[i];</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> deltaX=(right-left)/static_cast<double>(nbin);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<nbin;++x){</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> output.push_back(left+x*deltaX);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> }</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> }</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> output.push_back(input.back());</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> }</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::nearUp(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="keywordflow">if</span>(input.empty()){</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> std::ostringstream s;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> s<<<span class="stringliteral">"Error: input is empty"</span>;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">if</span>(output.size()<input.size()){</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> std::ostringstream s;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> s<<<span class="stringliteral">"Error: output size is smaller than input size"</span>;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> }</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="keywordtype">int</span> dimInput=input.size();</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keywordtype">int</span> dimOutput=output.size();</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> </div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iin=0;iin<dimInput;++iin){</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iout=0;iout<dimOutput/dimInput;++iout){</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordtype">int</span> indexOutput=iin*dimOutput/dimInput+iout;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keywordflow">if</span>(indexOutput>=output.size()){</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> std::ostringstream s;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> s<<<span class="stringliteral">"Error: indexOutput must be smaller than output.size()"</span>;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> output[indexOutput]=input[iin];</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateUp(<span class="keywordtype">double</span>* input, <span class="keywordtype">int</span> dim, std::vector<T>& output, <span class="keywordtype">int</span> nbin)</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> {</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="keywordflow">if</span>(!nbin){</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> std::ostringstream s;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> s<<<span class="stringliteral">"Error: nbin must be larger than 0"</span>;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> }</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> output.clear();</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dim;++i){</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="keywordtype">double</span> deltaX=0;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="keywordtype">double</span> left=input[i];</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="keywordflow">if</span>(i<dim-1){</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordtype">double</span> right=(i<dim-1)? input[i+1]:input[i];</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> deltaX=(right-left)/static_cast<double>(nbin);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> x=0;x<nbin;++x){</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> output.push_back(left+x*deltaX);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> }</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> }</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> output.push_back(input[dim-1]);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> }</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> }</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateDown(<span class="keyword">const</span> std::vector<T>& input, std::vector<T>& output, <span class="keywordtype">int</span> nbin)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordflow">if</span>(input.empty()){</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> std::ostringstream s;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> s<<<span class="stringliteral">"Error: input is empty"</span>;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="keywordflow">if</span>(!nbin){</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> std::ostringstream s;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> s<<<span class="stringliteral">"Error: nbin must be larger than 0"</span>;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> }</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> output.clear();</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="keywordtype">int</span> dim=input.size();</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> output.push_back(input[0]);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=1;i<dim;++i){</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordflow">if</span>(i%nbin)</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> x=(i-1)/nbin+1;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> output.push_back(input[i]);</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> }</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> }</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> }</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="comment">//todo: nodata?</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> StatFactory::interpolateDown(<span class="keywordtype">double</span>* input, <span class="keywordtype">int</span> dim, std::vector<T>& output, <span class="keywordtype">int</span> nbin)</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> {</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="keywordflow">if</span>(!nbin){</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> std::ostringstream s;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> s<<<span class="stringliteral">"Error: nbin must be larger than 0"</span>;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> }</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> output.clear();</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> output.push_back(input[0]);</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=1;i<dim;++i){</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="keywordflow">if</span>(i%nbin)</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> x=(i-1)/nbin+1;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> output.push_back(input[i]);</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> }</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> }</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="preprocessor">#endif </span><span class="comment">/* _STATFACTORY_H_ */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">// void Histogram::signature(double m1, double m2, double& k, double& alpha, double& beta, double e)</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment">// double y=m1*m1/m2;</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment">// beta=F_1(y,0.1,10.0,e);</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment">// double fb=F(beta);</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="comment">// double g=exp(lgamma(1.0/beta));</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">// alpha=m1*g/exp(lgamma(2.0/beta));</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment">// k=beta/(2*alpha*g);</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="comment">// // std::cout << "y, alpha, beta: " << y << ", " << alpha << ", " << beta << std::endl;</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> </div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="comment">// double Histogram::F(double x)</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">// double g2=exp(lgamma(2.0/x));</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment">// return(g2*g2/exp(lgamma(3.0/x))/exp(lgamma(1.0/x)));</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="comment">// //x1 is under estimate, x2 is over estimate, e is error</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment">// double Histogram::F_1(double y, double x1, double x2, double e)</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">// {</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment">// double f1=F(x1);</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment">// double f2=F(x2);</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment">// assert(f1!=f2);</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment">// double x=x1+(x2-x1)*(y-f1)/(f2-f1);</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">// double f=F(x);</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="comment">// while(f-y>=e||y-f>=e){</span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="comment">// if(f<y)</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment">// x1=x;</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">// else </span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="comment">// x2=x;</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment">// if(x1==x2)</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment">// return x1;</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="comment">// assert(f1!=f2);</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment">// x=x1+(x2-x1)*(y-f1)/(f2-f1);</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment">// f=F(x);</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment">// return x;</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">// }</span></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/Vector2d_8h_source.html b/doc/html/Vector2d_8h_source.html
new file mode 100644
index 0000000..f6c28f4
--- /dev/null
+++ b/doc/html/Vector2d_8h_source.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base/Vector2d.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Vector2d.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">Vector2d.h: 2-dimensional vector class (inherits from stl vector class)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _VECTOR2D_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _VECTOR2D_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <list></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <numeric></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <gsl/gsl_matrix.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "IndexValue.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classVector2d.html"> 31</a></span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="classVector2d.html">Vector2d</a>: <span class="keyword">public</span> std::vector<std::vector <T> ></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classVector2d.html">Vector2d</a>();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classVector2d.html">Vector2d</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1);<span class="comment">//copy constructor</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ~<a class="code" href="classVector2d.html">Vector2d</a>();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classVector2d.html">Vector2d</a>(<span class="keywordtype">int</span> nrow);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classVector2d.html">Vector2d</a>(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="classVector2d.html">Vector2d</a>(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol, <span class="keyword">const</span> T& value);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="classVector2d.html">Vector2d</a>(<span class="keyword">const</span> gsl_matrix* gsl_m);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> resize(<span class="keywordtype">int</span> nrow)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> std::vector< std::vector<T> >::resize(nrow);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> resize(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> nRows()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->size();};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> nCols()<span class="keyword"> const </span>{<span class="keywordflow">if</span>(this->size()) <span class="keywordflow">return</span> this->begin()->size(); <span class="keywordflow">else</span> <span class="keywordflow">return</span> 0;};</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> selectCol(<span class="keywordtype">int</span> col, std::vector<T> &output) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> selectCol(<span class="keywordtype">int</span> col, T* output) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> std::vector<T> selectCol(<span class="keywordtype">int</span> col);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> selectCols(<span class="keyword">const</span> std::list<int> &cols, <a class="code" href="classVector2d.html">Vector2d<T></a> &output) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> setMask(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a> &mask, T msknodata, T nodata=0);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">void</span> transpose(<a class="code" href="classVector2d.html">Vector2d<T></a> &output)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> output.resize(nCols(),nRows());</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nRows();++irow){</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nCols();++icol){</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> output[icol][irow]=(*this)[irow][icol];</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> selectCols(<span class="keyword">const</span> std::list<int> &cols);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> sort(<a class="code" href="classVector2d.html">Vector2d<T></a>& output); </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> scale(<span class="keyword">const</span> std::vector<double> &scaleVector, <span class="keyword">const</span> std::vector<double> &offsetVector, <a class="code" href="classVector2d.html">Vector2d<T></a>& scaledOutput);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> scale(<span class="keyword">const</span> T lbound, <span class="keyword">const</span> T ubound, std::vector<double> &scaleVector, std::vector<double> &offsetVector, <a class="code" href="classVector2d.html">Vector2d<T></a>& scaledOutput);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <a class="code" href="classVector2d.html">Vector2d<T></a> operator=(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="classVector2d.html">Vector2d<T></a> operator+=(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// std::ostream& operator<<(std::ostream& os, const Vector2d<T>& v);</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// template<class T> std::ostream& operator<<(std::ostream& os, const Vector2d<T>& v);</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span><<span class="keyword">class</span> T1> <span class="keyword">friend</span> std::ostream& operator<<(std::ostream & os, const Vector2d<T1>& v);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classVector2d.html">Vector2d<T></a> sum(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v2) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> T mymax(<span class="keywordtype">int</span>& x, <span class="keywordtype">int</span>& y, <span class="keywordtype">double</span> maxValue) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> T sum() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> };</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>() </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> : std::vector< std::vector<T> >()</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::~Vector2d</a>() </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">//copy constructor</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> this->resize(v1.size());</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<v1.size();++irow)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> this->at(irow)=v1[irow];</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T></a> <a class="code" href="classVector2d.html">Vector2d<T>::operator=</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">//check for assignment to self (of the form v=v)</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span>(<span class="keyword">this</span>==&v1)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> this->resize(v1.size());</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<v1.size();++irow)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> this->at(irow)=v1[irow];</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T></a> <a class="code" href="classVector2d.html">Vector2d<T>::operator+=</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> assert(v1.nRows()==nRows());</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> assert(v1.nCols()==nCols());</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nRows();++irow)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<nCols();++icol)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> (*<span class="keyword">this</span>)[irow][icol]+=v1[irow][icol];</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>(<span class="keywordtype">int</span> nrow) </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> : std::vector< std::vector<T> >(nrow)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol) </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// : std::vector< std::vector<T> >(nrow)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> this->resize(nrow);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> (this->operator[](irow)).resize(ncol);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// (*this)[irow].resize(ncol);</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol, <span class="keyword">const</span> T& value) </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> this->resize(nrow);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> (this->operator[](irow)).resize(ncol);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> (this-><span class="keyword">operator</span>[](irow))[icol]=value;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T>::Vector2d</a>(<span class="keyword">const</span> gsl_matrix* gsl_m)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> this->resize(gsl_m->size1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> (this->operator[](irow)).resize(gsl_m->size2);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<this->operator[](irow).size();++icol)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> (this-><span class="keyword">operator</span>[](irow))[icol]=gsl_matrix_get(gsl_m,irow,icol);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::resize</a>(<span class="keywordtype">int</span> nrow, <span class="keywordtype">int</span> ncol)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> this->std::vector< std::vector<T> >::resize(nrow);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> (this->operator[](irow)).resize(ncol);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::selectCols</a>(<span class="keyword">const</span> std::list<int> &cols, <a class="code" href="classVector2d.html">Vector2d<T></a> &output)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> output.resize(this->size());</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> std::list<int>::const_iterator it;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> output[irow].resize(cols.size());</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> it=cols.begin();</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<cols.size();++icol)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> output[irow][icol]=(*<span class="keyword">this</span>)[irow][*(it++)];</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::selectCol</a>(<span class="keywordtype">int</span> col, std::vector<T> &output)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> assert(col>=0);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> assert(col<(*<span class="keyword">this</span>)[0].size());</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> output.resize(this->size());</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> output[irow]=(*this)[irow][col];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">template</span><<span class="keyword">class</span> T> std::vector<T> <a class="code" href="classVector2d.html">Vector2d<T>::selectCol</a>(<span class="keywordtype">int</span> col)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> assert(col>=0);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> assert(col<(*<span class="keyword">this</span>)[0].size());</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> std::vector<T> output(this->size());</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> output[irow]=(*<span class="keyword">this</span>)[irow][col];</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span>(output);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::selectCol</a>(<span class="keywordtype">int</span> col, T* output)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> assert(col>=0);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> assert(col<(*<span class="keyword">this</span>)[0].size());</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> output[irow]=(*this)[irow][col];</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::selectCols</a>(<span class="keyword">const</span> std::list<int> &cols)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=((*<span class="keyword">this</span>)[irow]).size()-1;icol>=0;--icol)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(find(cols.begin(),cols.end(),icol)==cols.end())</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> (*<span class="keyword">this</span>)[irow].erase(((*<span class="keyword">this</span>)[irow]).begin()+icol);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::setMask</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a> &mask, T msknodata, T nodata)</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> {</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> assert(mask.nRows()==nRows());</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> assert(mask.nCols()==nCols());</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<((*this)[irow]).size()-1;++icol)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(mask[irow][icol]==msknodata)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> (*this)[irow][icol]=nodata;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">template</span><<span class="keyword">class</span> T1> std::ostream& operator<<(std::ostream& os, const Vector2d<T1>& v)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<v.size();++irow){</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<v[irow].size();++icol){</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> os << v[irow][icol] << <span class="stringliteral">"\t"</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> os << std::endl;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">return</span> os;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// os << theOption.getLongName() << ": ";</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// for(int index=0;index<theOption.size();++index)</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// os << type2string<T>(theOption[index]) << " ";</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// os << std::endl;</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// return os;</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::sort</a>(<a class="code" href="classVector2d.html">Vector2d<T></a>& output)</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> {</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">//sort according to first sample (ex. wavelength)</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">int</span> nsample=this->size();<span class="comment">//including first sample (ex. wavelength)</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordtype">int</span> nband=(*this)[0].size(); </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> std::vector<IndexValue> sortW(nband);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilevel=0;ilevel<nband;++ilevel){</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <a class="code" href="structIndexValue.html">IndexValue</a> pv;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> pv.position=ilevel;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> pv.value=(*this)[0][ilevel];</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> sortW[ilevel]=pv;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> std::sort(sortW.begin(),sortW.end(),<a class="code" href="classIncrease__IndexValue.html">Increase_IndexValue</a>());</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> output.resize(nsample); </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nsample;++isample){</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> output[isample].resize(nband);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> output[isample][iband]=(*<span class="keyword">this</span>)[isample][sortW[iband].position];</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::scale</a>(<span class="keyword">const</span> std::vector<double> &scaleVector,<span class="keyword">const</span> std::vector<double> &offsetVector, <a class="code" href="classVector2d.html">Vector2d<T></a>&a [...]
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">int</span> nsample=this->size();<span class="comment">//including first sample (ex. wavelength)</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">int</span> nband=(*this)[0].size();</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> assert(scaleVector.size()==nband);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> assert(offsetVector.size()==nband);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> std::vector<T> pixel(nband);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> scaledOutput.resize(nsample,nband);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nsample;++isample)</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> scaledOutput[isample][iband]=((*<span class="keyword">this</span>)[isample][iband])*scaleVector[iband]+offsetVector[iband];</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="classVector2d.html">Vector2d<T>::scale</a>(<span class="keyword">const</span> T lbound, <span class="keyword">const</span> T ubound, std::vector<double> &scaleVector, std::vector<double> &offsetVector, <a class="code" href="classVector2d.html">Ve [...]
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> {</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//scale to lbound and ubound</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">int</span> nsample=this->size();<span class="comment">//including first sample (ex. wavelength)</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">int</span> nband=(*this)[0].size();</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> scaleVector.resize(nband);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> offsetVector.resize(nband);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> std::vector<T> pixel(nsample);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> T theMin;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> T theMax;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> scaledOutput.resize(nsample,nband);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> pixel=selectCol(iband);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> stat.minmax(pixel, pixel.begin(), pixel.end(), theMin, theMax);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> scaleVector[iband]=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(ubound-lbound)/(theMax-theMin);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> offsetVector[iband]=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(-theMin*scaleVector[iband])-lbound;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<pixel.size();++isample)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> scaledOutput[isample][iband]=((*<span class="keyword">this</span>)[isample][iband])*scaleVector[iband]+offsetVector[iband];</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">template</span><<span class="keyword">class</span> T> <a class="code" href="classVector2d.html">Vector2d<T></a> <a class="code" href="classVector2d.html">Vector2d<T>::sum</a>(<span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T></a>& v1, <span class="keyword">const</span> <a class="code" href="classVector2d.html">Vector2d<T& [...]
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <a class="code" href="classVector2d.html">Vector2d<T></a> vsum(v1.size());</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> assert(v1.size()==v2.size());</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<v1.size();++irow){</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> assert(v1[irow].size()==v2[irow].size());</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> vsum[irow].resize(v1[irow].size());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<v1.size();++icol)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> vsum[irow][icol]=v1[irow][icol]+v2[irow][icol];</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> vsum;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T <a class="code" href="classVector2d.html">Vector2d<T>::sum</a>()<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordtype">double</span> theSum=0;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<this->operator[](irow).size();++icol)</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> theSum+=(this-><span class="keyword">operator</span>[](irow))[icol];</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">return</span> theSum;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">template</span><<span class="keyword">class</span> T> T <a class="code" href="classVector2d.html">Vector2d<T>::mymax</a>(<span class="keywordtype">int</span>& x, <span class="keywordtype">int</span>& y, <span class="keywordtype">double</span> maxValue)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">//todo: what if this->operator[](0)[0] >=maxValue?</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// double theMax=(this->operator[](0))[0];</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">double</span> theMax=0;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<this->size();++irow){</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<(this->operator[](irow)).size();++icol){</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">double</span> currentValue=(this->operator[](irow))[icol];</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">if</span>(currentValue<maxValue&¤tValue>theMax){</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> assert(theMax<maxValue);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> y=irow;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> x=icol;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> theMax=currentValue;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> assert(theMax<maxValue);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">return</span> theMax;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor">#endif </span><span class="comment">/* _VECTOR2D_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classIncrease__IndexValue_html"><div class="ttname"><a href="classIncrease__IndexValue.html">Increase_IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00039">IndexValue.h:39</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="structIndexValue_html"><div class="ttname"><a href="structIndexValue.html">IndexValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexValue_8h_source.html#l00023">IndexValue.h:23</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/____init_____8py_source.html b/doc/html/____init_____8py_source.html
new file mode 100644
index 0000000..0d9f795
--- /dev/null
+++ b/doc/html/____init_____8py_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/__init__.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">__init__.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> __init__.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">def </span>classFactory(iface):</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktools.ProcessingPktoolsPlugin <span class="keyword">import</span> ProcessingPktoolsPlugin</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span> ProcessingPktoolsPlugin()</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">#of beter met ifacer argument?</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">#return ProcessingPktoolsPlugin(iface)</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
new file mode 100644
index 0000000..41de9cb
--- /dev/null
+++ b/doc/html/annotated.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>confusionmatrix</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html" target="_self">ConfusionMatrix</a></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>FANN</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFANN_1_1training__data.html" target="_self">training_data</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFANN_1_1neural__net.html" target="_self">neural_net</a></td><td class="desc"></td></tr>
+<tr id="row_2_"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>filter</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classfilter_1_1Filter.html" target="_self">Filter</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img id="arr_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('3_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>filter2d</b></td><td class="desc"></td></tr>
+<tr id="row_3_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classfilter2d_1_1Filter2d.html" target="_self">Filter2d</a></td><td class="desc"></td></tr>
+<tr id="row_4_"><td class="entry"><img id="arr_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('4_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>imgregression</b></td><td class="desc"></td></tr>
+<tr id="row_4_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classimgregression_1_1ImgRegression.html" target="_self">ImgRegression</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img id="arr_5_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>qgis</b></td><td class="desc"></td></tr>
+<tr id="row_5_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkcomposite</b></td><td class="desc"></td></tr>
+<tr id="row_5_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html" target="_self">pkcomposite</a></td><td class="desc"></td></tr>
+<tr id="row_5_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkcrop</b></td><td class="desc"></td></tr>
+<tr id="row_5_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html" target="_self">pkcrop</a></td><td class="desc"></td></tr>
+<tr id="row_5_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_2_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkdiff_accuracy</b></td><td class="desc"></td></tr>
+<tr id="row_5_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html" target="_self">pkdiff_accuracy</a></td><td class="desc"></td></tr>
+<tr id="row_5_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_3_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkextract</b></td><td class="desc"></td></tr>
+<tr id="row_5_3_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html" target="_self">pkextract</a></td><td class="desc"></td></tr>
+<tr id="row_5_4_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_4_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkextract_grid</b></td><td class="desc"></td></tr>
+<tr id="row_5_4_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html" target="_self">pkextract_grid</a></td><td class="desc"></td></tr>
+<tr id="row_5_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_5_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_5_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkextract_random</b></td><td class="desc"></td></tr>
+<tr id="row_5_5_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html" target="_self">pkextract_random</a></td><td class="desc"></td></tr>
+<tr id="row_5_6_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_6_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_6_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkfilter_spatial</b></td><td class="desc"></td></tr>
+<tr id="row_5_6_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html" target="_self">pkfilter_spatial</a></td><td class="desc"></td></tr>
+<tr id="row_5_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_7_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_7_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkfilter_spectral</b></td><td class="desc"></td></tr>
+<tr id="row_5_7_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html" target="_self">pkfilter_spectral</a></td><td class="desc"></td></tr>
+<tr id="row_5_8_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_8_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_8_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkfilterdem</b></td><td class="desc"></td></tr>
+<tr id="row_5_8_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html" target="_self">pkfilterdem</a></td><td class="desc"></td></tr>
+<tr id="row_5_9_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_9_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_9_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkgetmask</b></td><td class="desc"></td></tr>
+<tr id="row_5_9_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html" target="_self">pkgetmask</a></td><td class="desc"></td></tr>
+<tr id="row_5_10_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_10_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_10_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pklas2img</b></td><td class="desc"></td></tr>
+<tr id="row_5_10_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html" target="_self">pklas2img</a></td><td class="desc"></td></tr>
+<tr id="row_5_11_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_11_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_11_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pkreclass</b></td><td class="desc"></td></tr>
+<tr id="row_5_11_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html" target="_self">pkreclass</a></td><td class="desc"></td></tr>
+<tr id="row_5_12_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_12_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_12_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pksetmask</b></td><td class="desc"></td></tr>
+<tr id="row_5_12_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html" target="_self">pksetmask</a></td><td class="desc"></td></tr>
+<tr id="row_5_13_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_13_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_13_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pksvm</b></td><td class="desc"></td></tr>
+<tr id="row_5_13_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html" target="_self">pksvm</a></td><td class="desc"></td></tr>
+<tr id="row_5_14_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_14_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_14_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pktoolsAlgorithm</b></td><td class="desc"></td></tr>
+<tr id="row_5_14_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html" target="_self">pktoolsAlgorithm</a></td><td class="desc"></td></tr>
+<tr id="row_5_15_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_15_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_15_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pktoolsAlgorithmProvider</b></td><td class="desc"></td></tr>
+<tr id="row_5_15_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html" target="_self">pktoolsAlgorithmProvider</a></td><td class="desc"></td></tr>
+<tr id="row_5_16_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_16_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_16_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>pktoolsUtils</b></td><td class="desc"></td></tr>
+<tr id="row_5_16_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html" target="_self">pktoolsUtils</a></td><td class="desc"></td></tr>
+<tr id="row_5_17_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_5_17_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('5_17_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>ProcessingPktoolsPlugin</b></td><td class="desc"></td></tr>
+<tr id="row_5_17_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html" target="_self">ProcessingPktoolsPlugin</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img id="arr_6_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('6_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>statfactory</b></td><td class="desc"></td></tr>
+<tr id="row_6_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classstatfactory_1_1StatFactory.html" target="_self">StatFactory</a></td><td class="desc"></td></tr>
+<tr id="row_7_" class="even"><td class="entry"><img id="arr_7_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('7_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>Ui</b></td><td class="desc"></td></tr>
+<tr id="row_7_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBadConversion.html" target="_self">BadConversion</a></td><td class="desc">Throw this class when syntax error in command line option </td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCache.html" target="_self">Cache</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCompare__IndexValue.html" target="_self">Compare_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCompare__PosValue.html" target="_self">Compare_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactory.html" target="_self">CostFactory</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactoryANN.html" target="_self">CostFactoryANN</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactorySVM.html" target="_self">CostFactorySVM</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDataModel.html" target="_self">DataModel</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structdecision__function.html" target="_self">decision_function</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDecrease__IndexValue.html" target="_self">Decrease_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDecrease__PosValue.html" target="_self">Decrease_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classEgcs.html" target="_self">Egcs</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFeatureSelector.html" target="_self">FeatureSelector</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFileReaderAscii.html" target="_self">FileReaderAscii</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFileReaderLas.html" target="_self">FileReaderLas</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgReaderGdal.html" target="_self">ImgReaderGdal</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgReaderOgr.html" target="_self">ImgReaderOgr</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgWriterGdal.html" target="_self">ImgWriterGdal</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgWriterOgr.html" target="_self">ImgWriterOgr</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIncrease__IndexValue.html" target="_self">Increase_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIncrease__PosValue.html" target="_self">Increase_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structIndexValue.html" target="_self">IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classKernel.html" target="_self">Kernel</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classLastReturnFilter.html" target="_self">LastReturnFilter</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classONE__CLASS__Q.html" target="_self">ONE_CLASS_Q</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOptFactory.html" target="_self">OptFactory</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOptionpk.html" target="_self">Optionpk</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structPosValue.html" target="_self">PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQMatrix.html" target="_self">QMatrix</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img id="arr_38_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('38_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSolver.html" target="_self">Solver</a></td><td class="desc"></td></tr>
+<tr id="row_38_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSolver_1_1SolutionInfo.html" target="_self">SolutionInfo</a></td><td class="desc"></td></tr>
+<tr id="row_39_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSolver__NU.html" target="_self">Solver_NU</a></td><td class="desc"></td></tr>
+<tr id="row_40_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSVC__Q.html" target="_self">SVC_Q</a></td><td class="desc"></td></tr>
+<tr id="row_41_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__model.html" target="_self">svm_model</a></td><td class="desc"></td></tr>
+<tr id="row_42_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__node.html" target="_self">svm_node</a></td><td class="desc"></td></tr>
+<tr id="row_43_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__parameter.html" target="_self">svm_parameter</a></td><td class="desc"></td></tr>
+<tr id="row_44_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__problem.html" target="_self">svm_problem</a></td><td class="desc"></td></tr>
+<tr id="row_45_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSVR__Q.html" target="_self">SVR_Q</a></td><td class="desc"></td></tr>
+<tr id="row_46_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi__MainWindow.html" target="_self">Ui_MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_47_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classVector2d.html" target="_self">Vector2d</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/bc_s.png b/doc/html/bc_s.png
new file mode 100644
index 0000000..224b29a
Binary files /dev/null and b/doc/html/bc_s.png differ
diff --git a/doc/html/bdwn.png b/doc/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/doc/html/bdwn.png differ
diff --git a/doc/html/build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..48f679e
--- /dev/null
+++ b/doc/html/build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html">build-pkcomposite_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkcomposite_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 13, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 42, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 75, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 108, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 142, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 168, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 199, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 227, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 268, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 297, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 324, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 355, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 383, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> };</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"MainWindow\0\0on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_toolButton_defaults_clicked()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_actionInput_image_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_actionOutput_image_triggered()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_actionQuit_triggered()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_Run_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_actionSelection_Info_file_triggered()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_file_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_toolButton_extent_clicked()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_actionExtent_triggered()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"deleteItemInput()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 0: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span> 1: _t->on_toolButton_defaults_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 2: _t->on_actionInput_image_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_image_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 4: _t->on_actionQuit_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_Run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 7: _t->on_actionSelection_Info_file_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 8: _t->on_toolButton_file_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 9: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 10: _t->on_toolButton_extent_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 11: _t->on_actionExtent_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 12: _t->deleteItemInput(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> };</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> };</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (_id < 13)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> _id -= 13;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html b/doc/html/build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..36632db
--- /dev/null
+++ b/doc/html/build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html
@@ -0,0 +1,782 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html">build-pkcomposite_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QGroupBox></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QListWidget></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classUi__MainWindow.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput_image;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionOutput_image;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionQuit;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionSelection_Info_file;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionExtent;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QListWidget *listWidget_input;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *lry;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *uly;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QLabel *label_2;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLineEdit *lrx;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLineEdit *ulx;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLabel *label_4;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLineEdit *extent;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QToolButton *toolButton_extent;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QComboBox *resample;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QLabel *label_18;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QLabel *label_17;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QComboBox *crule;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_19;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QLineEdit *cband;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QGroupBox *groupBox;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_21;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLineEdit *srcnodata;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label_23;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLabel *label_22;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *min;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QLineEdit *max;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_20;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *bndnodata;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QSpacerItem *horizontalSpacer_6;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QLabel *label_7;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QLabel *label_14;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *file;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLabel *label_10;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QComboBox *oformat;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QComboBox *interleaved;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QLabel *label_9;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QLineEdit *dx;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QLabel *label_8;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QLabel *label_13;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QComboBox *compressed;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QLabel *label_12;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLineEdit *output;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QLabel *label_6;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QLineEdit *a_srs;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLabel *label_15;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QLineEdit *dy;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QLabel *label_5;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QCheckBox *tiled;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QComboBox *otype;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_11;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *dstnodata;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QToolButton *toolButton_file;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QLabel *label_3;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QLabel *label_24;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QLabel *label_25;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> QHBoxLayout *horizontalLayout_2;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> QToolButton *toolButton_Run;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QToolButton *toolButton_defaults;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> MainWindow->resize(798, 859);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> actionInput_image = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> actionInput_image->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput_image"</span>));</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> actionOutput_image = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> actionOutput_image->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput_image"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> actionQuit = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> actionQuit->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionQuit"</span>));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> actionSelection_Info_file = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> actionSelection_Info_file->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionSelection_Info_file"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> actionExtent = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> actionExtent->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionExtent"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> gridLayout_2->addItem(horizontalSpacer_3, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> listWidget_input = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> listWidget_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_input"</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> gridLayout_2->addWidget(listWidget_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> gridLayout_2->addWidget(label, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> gridLayout_2->addWidget(toolButton_input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> lry = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> lry->setObjectName(QString::fromUtf8(<span class="stringliteral">"lry"</span>));</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> gridLayout_2->addWidget(lry, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> uly = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> uly->setObjectName(QString::fromUtf8(<span class="stringliteral">"uly"</span>));</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> gridLayout_2->addWidget(uly, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gridLayout_2->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> gridLayout_2->addItem(horizontalSpacer_2, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> lrx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> lrx->setObjectName(QString::fromUtf8(<span class="stringliteral">"lrx"</span>));</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> gridLayout_2->addWidget(lrx, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> ulx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> ulx->setObjectName(QString::fromUtf8(<span class="stringliteral">"ulx"</span>));</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> gridLayout_2->addWidget(ulx, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> extent = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"extent"</span>));</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> gridLayout_2->addWidget(extent, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> toolButton_extent = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> toolButton_extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_extent"</span>));</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> gridLayout_2->addWidget(toolButton_extent, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> verticalLayout_2->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout(tab_2);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> gridLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> gridLayout_4->addItem(verticalSpacer_3, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> resample = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> resample->setObjectName(QString::fromUtf8(<span class="stringliteral">"resample"</span>));</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_4->addWidget(resample, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> label_18 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> gridLayout_4->addWidget(label_18, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> label_17 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> gridLayout_4->addWidget(label_17, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> crule = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> crule->setObjectName(QString::fromUtf8(<span class="stringliteral">"crule"</span>));</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> gridLayout_4->addWidget(crule, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> label_19 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> gridLayout_4->addWidget(label_19, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> cband = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> cband->setObjectName(QString::fromUtf8(<span class="stringliteral">"cband"</span>));</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> gridLayout_4->addWidget(cband, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> groupBox = <span class="keyword">new</span> QGroupBox(tab_2);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> groupBox->setObjectName(QString::fromUtf8(<span class="stringliteral">"groupBox"</span>));</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout(groupBox);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> gridLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> label_21 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> gridLayout_3->addWidget(label_21, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> srcnodata = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> srcnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"srcnodata"</span>));</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_3->addWidget(srcnodata, 1, 1, 1, 2);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> label_23 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_23->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_23"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_3->addWidget(label_23, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> label_22 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> gridLayout_3->addWidget(label_22, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> min = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> min->setObjectName(QString::fromUtf8(<span class="stringliteral">"min"</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> gridLayout_3->addWidget(min, 2, 1, 1, 2);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> max = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> max->setObjectName(QString::fromUtf8(<span class="stringliteral">"max"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> gridLayout_3->addWidget(max, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> label_20 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> gridLayout_3->addWidget(label_20, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> bndnodata = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> bndnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"bndnodata"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> gridLayout_3->addWidget(bndnodata, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> gridLayout_4->addWidget(groupBox, 3, 0, 1, 4);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> gridLayout_4->addItem(horizontalSpacer_4, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> gridLayout_4->addItem(horizontalSpacer_5, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> horizontalSpacer_6 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> gridLayout->addItem(horizontalSpacer_6, 7, 3, 1, 1);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout->addWidget(label_7, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> label_14 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> gridLayout->addWidget(label_14, 8, 0, 1, 1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> file = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> file->setObjectName(QString::fromUtf8(<span class="stringliteral">"file"</span>));</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> gridLayout->addWidget(file, 9, 1, 1, 1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> label_10 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> gridLayout->addWidget(label_10, 6, 2, 1, 1);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> oformat = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> oformat->setObjectName(QString::fromUtf8(<span class="stringliteral">"oformat"</span>));</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> gridLayout->addWidget(oformat, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> interleaved = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> interleaved->setObjectName(QString::fromUtf8(<span class="stringliteral">"interleaved"</span>));</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> gridLayout->addWidget(interleaved, 7, 1, 1, 1);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> label_9 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> gridLayout->addWidget(label_9, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> dx = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> dx->setObjectName(QString::fromUtf8(<span class="stringliteral">"dx"</span>));</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> gridLayout->addWidget(dx, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> gridLayout->addWidget(label_8, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> label_13 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> gridLayout->addWidget(label_13, 7, 4, 1, 1);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> gridLayout->addWidget(toolButton_ct, 5, 2, 1, 1);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> compressed = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> compressed->setObjectName(QString::fromUtf8(<span class="stringliteral">"compressed"</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> gridLayout->addWidget(compressed, 7, 5, 1, 1);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> gridLayout->addWidget(label_12, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> ct = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> gridLayout->addWidget(ct, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> output = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> gridLayout->addWidget(output, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout->addWidget(toolButton_output, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout->addWidget(label_6, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> a_srs = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> a_srs->setObjectName(QString::fromUtf8(<span class="stringliteral">"a_srs"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout->addWidget(a_srs, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> label_15 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> gridLayout->addWidget(label_15, 9, 0, 1, 1);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> dy = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> dy->setObjectName(QString::fromUtf8(<span class="stringliteral">"dy"</span>));</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> gridLayout->addWidget(dy, 6, 4, 1, 1);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> gridLayout->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> tiled = <span class="keyword">new</span> QCheckBox(tab_3);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> tiled->setObjectName(QString::fromUtf8(<span class="stringliteral">"tiled"</span>));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> gridLayout->addWidget(tiled, 7, 2, 1, 1);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> otype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> otype->setObjectName(QString::fromUtf8(<span class="stringliteral">"otype"</span>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> gridLayout->addWidget(otype, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> label_11 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> gridLayout->addWidget(label_11, 6, 5, 1, 1);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> dstnodata = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> dstnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"dstnodata"</span>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> gridLayout->addWidget(dstnodata, 8, 1, 1, 1);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> toolButton_file = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> toolButton_file->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_file"</span>));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> gridLayout->addWidget(toolButton_file, 9, 2, 1, 1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> label_3 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> gridLayout->addWidget(label_3, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> label_24 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> label_24->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_24"</span>));</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> verticalLayout_4->addWidget(label_24);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> verticalLayout_4->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> label_25 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> label_25->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_25"</span>));</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> verticalLayout_4->addWidget(label_25);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> verticalLayout_4->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> verticalLayout_5->addLayout(verticalLayout_4);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> verticalLayout->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> horizontalLayout_2 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> horizontalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> horizontalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_2"</span>));</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> toolButton_Run = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> toolButton_Run->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_Run"</span>));</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> horizontalLayout_2->addWidget(toolButton_Run);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> horizontalLayout_2->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> toolButton_defaults = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> toolButton_defaults->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_defaults"</span>));</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> horizontalLayout_2->addWidget(toolButton_defaults);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> verticalLayout->addLayout(horizontalLayout_2);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> menuBar->setGeometry(QRect(0, 0, 798, 25));</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> QWidget::setTabOrder(toolButton_input, uly);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> QWidget::setTabOrder(uly, ulx);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> QWidget::setTabOrder(ulx, lrx);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> QWidget::setTabOrder(lrx, lry);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> QWidget::setTabOrder(lry, extent);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> QWidget::setTabOrder(extent, toolButton_extent);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> QWidget::setTabOrder(toolButton_extent, resample);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> QWidget::setTabOrder(resample, crule);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> QWidget::setTabOrder(crule, cband);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> QWidget::setTabOrder(cband, bndnodata);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> QWidget::setTabOrder(bndnodata, srcnodata);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> QWidget::setTabOrder(srcnodata, min);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> QWidget::setTabOrder(min, max);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> QWidget::setTabOrder(max, output);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> QWidget::setTabOrder(toolButton_output, a_srs);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> QWidget::setTabOrder(a_srs, otype);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> QWidget::setTabOrder(otype, oformat);</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> QWidget::setTabOrder(oformat, ct);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> QWidget::setTabOrder(toolButton_ct, dx);</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> QWidget::setTabOrder(dx, dy);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> QWidget::setTabOrder(dy, interleaved);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> QWidget::setTabOrder(interleaved, tiled);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> QWidget::setTabOrder(tiled, compressed);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> QWidget::setTabOrder(compressed, dstnodata);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> QWidget::setTabOrder(dstnodata, file);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> QWidget::setTabOrder(file, toolButton_file);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> QWidget::setTabOrder(toolButton_file, toolButton_Run);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> QWidget::setTabOrder(toolButton_Run, toolButton_defaults);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> QWidget::setTabOrder(toolButton_defaults, commandLineEdit);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> QWidget::setTabOrder(consoleEdit, listWidget_input);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> QWidget::setTabOrder(listWidget_input, tabWidget);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> menuFile->addAction(actionInput_image);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> menuFile->addAction(actionExtent);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> menuFile->addAction(actionOutput_image);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> menuFile->addAction(actionSelection_Info_file);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> menuFile->addAction(actionQuit);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> tabWidget->setCurrentIndex(3);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkcomposite_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> actionInput_image->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input image(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> actionInput_image->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> actionOutput_image->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> actionOutput_image->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> actionQuit->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Quit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> actionQuit->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+Q"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> actionSelection_Info_file->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Selection Info file"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> actionSelection_Info_file->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+F"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> actionExtent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> actionExtent->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+E"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input raster images</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input images"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide geographical extent to crop in coordinate reference system of input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Geographical extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Use an external OGR vector file to define the geographical extent to crop. Coordinate reference systems of input and vector must be identical</p></body></html>"</s [...]
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent via vector:"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> toolButton_extent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"></span> label_18->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Composite rule for mosaic. Default is overwrite</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Composit rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Resample method"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Band used for composit rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> groupBox->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata values in input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"></span> label_21->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>invalid value for input image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"></span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"></span> label_23->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>flag values larger or equal to this value as invalid</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"></span> label_23->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"max value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"></span> label_22->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>flag values smaller or equal to this value as invalid</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"></span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"min value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Band in input image to check if pixel is valid (used for srcnodata, min and max options)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"band"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Composit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Nodata value to put in image if out of bounds or if no valid pixel value is found in input images</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dx"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output resolution in x and y distance measure (e.g., meter). Leave empty to read from input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output resolution"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha</p></body></html>"</span>, 0, QAp [...]
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table (ASCII)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"compressed"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Interleaved"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Create extra raster file containing information on the selected input file for each pixel</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Ouput info on selected pixels"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Assign projection (e.g., epsg:3035). Notice this will not re-project the image. Use gdalwarp instead.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Assign projection (EPSG:code)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> tiled->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Tiled"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dy"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> toolButton_file->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> label_24->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> label_25->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> toolButton_Run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> toolButton_defaults->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> };</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00702"></a><span class="lineno"><a class="line" href="classUi_1_1MainWindow.html"> 702</a></span> <span class="keyword">class </span><a class="code" href="classUi_1_1MainWindow.html">MainWindow</a>: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..61bc130
--- /dev/null
+++ b/doc/html/build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html">build-pkcomposite_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkcomposite_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 13, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 42, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 75, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 108, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 142, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 168, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 199, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 227, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 268, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 297, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 324, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 355, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 383, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> };</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"MainWindow\0\0on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_toolButton_defaults_clicked()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_actionInput_image_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_actionOutput_image_triggered()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_actionQuit_triggered()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_Run_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_actionSelection_Info_file_triggered()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_file_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_toolButton_extent_clicked()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_actionExtent_triggered()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"deleteItemInput()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 0: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span> 1: _t->on_toolButton_defaults_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 2: _t->on_actionInput_image_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_image_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 4: _t->on_actionQuit_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_Run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 7: _t->on_actionSelection_Info_file_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 8: _t->on_toolButton_file_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 9: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 10: _t->on_toolButton_extent_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 11: _t->on_actionExtent_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 12: _t->deleteItemInput(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> };</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> };</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (_id < 13)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> _id -= 13;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h_source.html b/doc/html/build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..16355d7
--- /dev/null
+++ b/doc/html/build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h_source.html
@@ -0,0 +1,781 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html">build-pkcomposite_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QGroupBox></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QListWidget></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput_image;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionOutput_image;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionQuit;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionSelection_Info_file;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionExtent;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QListWidget *listWidget_input;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *lry;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *uly;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QLabel *label_2;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLineEdit *lrx;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLineEdit *ulx;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLabel *label_4;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLineEdit *extent;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QToolButton *toolButton_extent;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QComboBox *resample;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QLabel *label_18;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QLabel *label_17;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QComboBox *crule;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_19;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QLineEdit *cband;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QGroupBox *groupBox;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_21;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLineEdit *srcnodata;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label_23;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLabel *label_22;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *min;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QLineEdit *max;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_20;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *bndnodata;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QSpacerItem *horizontalSpacer_6;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QLabel *label_7;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QLabel *label_14;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *file;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLabel *label_10;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QComboBox *oformat;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QComboBox *interleaved;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QLabel *label_9;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QLineEdit *dx;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QLabel *label_8;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QLabel *label_13;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QComboBox *compressed;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QLabel *label_12;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLineEdit *output;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QLabel *label_6;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QLineEdit *a_srs;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLabel *label_15;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QLineEdit *dy;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QLabel *label_5;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QCheckBox *tiled;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QComboBox *otype;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_11;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *dstnodata;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QToolButton *toolButton_file;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QLabel *label_3;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QLabel *label_24;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QLabel *label_25;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> QHBoxLayout *horizontalLayout_2;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> QToolButton *toolButton_Run;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QToolButton *toolButton_defaults;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> MainWindow->resize(798, 859);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> actionInput_image = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> actionInput_image->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput_image"</span>));</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> actionOutput_image = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> actionOutput_image->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput_image"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> actionQuit = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> actionQuit->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionQuit"</span>));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> actionSelection_Info_file = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> actionSelection_Info_file->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionSelection_Info_file"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> actionExtent = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> actionExtent->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionExtent"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> gridLayout_2->addItem(horizontalSpacer_3, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> listWidget_input = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> listWidget_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_input"</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> gridLayout_2->addWidget(listWidget_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> gridLayout_2->addWidget(label, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> gridLayout_2->addWidget(toolButton_input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> lry = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> lry->setObjectName(QString::fromUtf8(<span class="stringliteral">"lry"</span>));</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> gridLayout_2->addWidget(lry, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> uly = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> uly->setObjectName(QString::fromUtf8(<span class="stringliteral">"uly"</span>));</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> gridLayout_2->addWidget(uly, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gridLayout_2->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> gridLayout_2->addItem(horizontalSpacer_2, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> lrx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> lrx->setObjectName(QString::fromUtf8(<span class="stringliteral">"lrx"</span>));</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> gridLayout_2->addWidget(lrx, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> ulx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> ulx->setObjectName(QString::fromUtf8(<span class="stringliteral">"ulx"</span>));</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> gridLayout_2->addWidget(ulx, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> extent = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"extent"</span>));</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> gridLayout_2->addWidget(extent, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> toolButton_extent = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> toolButton_extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_extent"</span>));</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> gridLayout_2->addWidget(toolButton_extent, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> verticalLayout_2->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout(tab_2);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> gridLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> gridLayout_4->addItem(verticalSpacer_3, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> resample = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> resample->setObjectName(QString::fromUtf8(<span class="stringliteral">"resample"</span>));</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_4->addWidget(resample, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> label_18 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> gridLayout_4->addWidget(label_18, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> label_17 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> gridLayout_4->addWidget(label_17, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> crule = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> crule->setObjectName(QString::fromUtf8(<span class="stringliteral">"crule"</span>));</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> gridLayout_4->addWidget(crule, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> label_19 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> gridLayout_4->addWidget(label_19, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> cband = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> cband->setObjectName(QString::fromUtf8(<span class="stringliteral">"cband"</span>));</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> gridLayout_4->addWidget(cband, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> groupBox = <span class="keyword">new</span> QGroupBox(tab_2);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> groupBox->setObjectName(QString::fromUtf8(<span class="stringliteral">"groupBox"</span>));</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout(groupBox);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> gridLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> label_21 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> gridLayout_3->addWidget(label_21, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> srcnodata = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> srcnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"srcnodata"</span>));</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_3->addWidget(srcnodata, 1, 1, 1, 2);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> label_23 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_23->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_23"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_3->addWidget(label_23, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> label_22 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> gridLayout_3->addWidget(label_22, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> min = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> min->setObjectName(QString::fromUtf8(<span class="stringliteral">"min"</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> gridLayout_3->addWidget(min, 2, 1, 1, 2);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> max = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> max->setObjectName(QString::fromUtf8(<span class="stringliteral">"max"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> gridLayout_3->addWidget(max, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> label_20 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> gridLayout_3->addWidget(label_20, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> bndnodata = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> bndnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"bndnodata"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> gridLayout_3->addWidget(bndnodata, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> gridLayout_4->addWidget(groupBox, 3, 0, 1, 4);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> gridLayout_4->addItem(horizontalSpacer_4, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> gridLayout_4->addItem(horizontalSpacer_5, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> horizontalSpacer_6 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> gridLayout->addItem(horizontalSpacer_6, 7, 3, 1, 1);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout->addWidget(label_7, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> label_14 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> gridLayout->addWidget(label_14, 8, 0, 1, 1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> file = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> file->setObjectName(QString::fromUtf8(<span class="stringliteral">"file"</span>));</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> gridLayout->addWidget(file, 9, 1, 1, 1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> label_10 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> gridLayout->addWidget(label_10, 6, 2, 1, 1);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> oformat = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> oformat->setObjectName(QString::fromUtf8(<span class="stringliteral">"oformat"</span>));</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> gridLayout->addWidget(oformat, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> interleaved = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> interleaved->setObjectName(QString::fromUtf8(<span class="stringliteral">"interleaved"</span>));</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> gridLayout->addWidget(interleaved, 7, 1, 1, 1);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> label_9 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> gridLayout->addWidget(label_9, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> dx = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> dx->setObjectName(QString::fromUtf8(<span class="stringliteral">"dx"</span>));</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> gridLayout->addWidget(dx, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> gridLayout->addWidget(label_8, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> label_13 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> gridLayout->addWidget(label_13, 7, 4, 1, 1);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> gridLayout->addWidget(toolButton_ct, 5, 2, 1, 1);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> compressed = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> compressed->setObjectName(QString::fromUtf8(<span class="stringliteral">"compressed"</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> gridLayout->addWidget(compressed, 7, 5, 1, 1);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> gridLayout->addWidget(label_12, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> ct = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> gridLayout->addWidget(ct, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> output = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> gridLayout->addWidget(output, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout->addWidget(toolButton_output, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout->addWidget(label_6, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> a_srs = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> a_srs->setObjectName(QString::fromUtf8(<span class="stringliteral">"a_srs"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout->addWidget(a_srs, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> label_15 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> gridLayout->addWidget(label_15, 9, 0, 1, 1);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> dy = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> dy->setObjectName(QString::fromUtf8(<span class="stringliteral">"dy"</span>));</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> gridLayout->addWidget(dy, 6, 4, 1, 1);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> gridLayout->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> tiled = <span class="keyword">new</span> QCheckBox(tab_3);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> tiled->setObjectName(QString::fromUtf8(<span class="stringliteral">"tiled"</span>));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> gridLayout->addWidget(tiled, 7, 2, 1, 1);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> otype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> otype->setObjectName(QString::fromUtf8(<span class="stringliteral">"otype"</span>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> gridLayout->addWidget(otype, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> label_11 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> gridLayout->addWidget(label_11, 6, 5, 1, 1);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> dstnodata = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> dstnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"dstnodata"</span>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> gridLayout->addWidget(dstnodata, 8, 1, 1, 1);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> toolButton_file = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> toolButton_file->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_file"</span>));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> gridLayout->addWidget(toolButton_file, 9, 2, 1, 1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> label_3 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> gridLayout->addWidget(label_3, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> label_24 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> label_24->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_24"</span>));</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> verticalLayout_4->addWidget(label_24);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> verticalLayout_4->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> label_25 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> label_25->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_25"</span>));</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> verticalLayout_4->addWidget(label_25);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> verticalLayout_4->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> verticalLayout_5->addLayout(verticalLayout_4);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> verticalLayout->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> horizontalLayout_2 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> horizontalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> horizontalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_2"</span>));</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> toolButton_Run = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> toolButton_Run->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_Run"</span>));</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> horizontalLayout_2->addWidget(toolButton_Run);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> horizontalLayout_2->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> toolButton_defaults = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> toolButton_defaults->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_defaults"</span>));</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> horizontalLayout_2->addWidget(toolButton_defaults);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> verticalLayout->addLayout(horizontalLayout_2);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> menuBar->setGeometry(QRect(0, 0, 798, 25));</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> QWidget::setTabOrder(toolButton_input, uly);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> QWidget::setTabOrder(uly, ulx);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> QWidget::setTabOrder(ulx, lrx);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> QWidget::setTabOrder(lrx, lry);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> QWidget::setTabOrder(lry, extent);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> QWidget::setTabOrder(extent, toolButton_extent);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> QWidget::setTabOrder(toolButton_extent, resample);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> QWidget::setTabOrder(resample, crule);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> QWidget::setTabOrder(crule, cband);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> QWidget::setTabOrder(cband, bndnodata);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> QWidget::setTabOrder(bndnodata, srcnodata);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> QWidget::setTabOrder(srcnodata, min);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> QWidget::setTabOrder(min, max);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> QWidget::setTabOrder(max, output);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> QWidget::setTabOrder(toolButton_output, a_srs);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> QWidget::setTabOrder(a_srs, otype);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> QWidget::setTabOrder(otype, oformat);</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> QWidget::setTabOrder(oformat, ct);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> QWidget::setTabOrder(toolButton_ct, dx);</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> QWidget::setTabOrder(dx, dy);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> QWidget::setTabOrder(dy, interleaved);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> QWidget::setTabOrder(interleaved, tiled);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> QWidget::setTabOrder(tiled, compressed);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> QWidget::setTabOrder(compressed, dstnodata);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> QWidget::setTabOrder(dstnodata, file);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> QWidget::setTabOrder(file, toolButton_file);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> QWidget::setTabOrder(toolButton_file, toolButton_Run);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> QWidget::setTabOrder(toolButton_Run, toolButton_defaults);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> QWidget::setTabOrder(toolButton_defaults, commandLineEdit);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> QWidget::setTabOrder(consoleEdit, listWidget_input);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> QWidget::setTabOrder(listWidget_input, tabWidget);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> menuFile->addAction(actionInput_image);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> menuFile->addAction(actionExtent);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> menuFile->addAction(actionOutput_image);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> menuFile->addAction(actionSelection_Info_file);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> menuFile->addAction(actionQuit);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> tabWidget->setCurrentIndex(3);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkcomposite_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> actionInput_image->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input image(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> actionInput_image->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> actionOutput_image->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> actionOutput_image->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> actionQuit->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Quit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> actionQuit->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+Q"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> actionSelection_Info_file->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Selection Info file"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> actionSelection_Info_file->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+F"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> actionExtent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> actionExtent->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+E"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input raster images</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input images"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide geographical extent to crop in coordinate reference system of input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Geographical extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Use an external OGR vector file to define the geographical extent to crop. Coordinate reference systems of input and vector must be identical</p></body></html>"</s [...]
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent via vector:"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> toolButton_extent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"></span> label_18->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Composite rule for mosaic. Default is overwrite</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Composit rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Resample method"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Band used for composit rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> groupBox->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata values in input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"></span> label_21->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>invalid value for input image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"></span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"></span> label_23->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>flag values larger or equal to this value as invalid</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"></span> label_23->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"max value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"></span> label_22->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>flag values smaller or equal to this value as invalid</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"></span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"min value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Band in input image to check if pixel is valid (used for srcnodata, min and max options)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"band"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Composit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Nodata value to put in image if out of bounds or if no valid pixel value is found in input images</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dx"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output resolution in x and y distance measure (e.g., meter). Leave empty to read from input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output resolution"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha</p></body></html>"</span>, 0, QAp [...]
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table (ASCII)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"compressed"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Interleaved"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Create extra raster file containing information on the selected input file for each pixel</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Ouput info on selected pixels"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Assign projection (e.g., epsg:3035). Notice this will not re-project the image. Use gdalwarp instead.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Assign projection (EPSG:code)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> tiled->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Tiled"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dy"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> toolButton_file->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> label_24->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> label_25->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> toolButton_Run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> toolButton_defaults->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> };</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..a94b4d2
--- /dev/null
+++ b/doc/html/build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html">build-pkcrop_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkcrop_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 15, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 69, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 100, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 131, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 158, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 186, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 219, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 245, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 273, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 296, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 324, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 344, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 365, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> 378, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> };</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_toolButton_extent_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_toolButton_Run_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_defaults_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_actionQuit_triggered()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_autoscale_clicked()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"on_actionExtent_triggered()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">"on_manual_clicked()\0on_noscale_clicked()\0"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">"deleteItem()\0on_toolButton_clicked()\0"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> };</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 1: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 2: _t->on_toolButton_extent_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 3: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_Run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_defaults_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 7: _t->on_actionQuit_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 8: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 9: _t->on_autoscale_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 10: _t->on_actionExtent_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> 11: _t->on_manual_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">case</span> 12: _t->on_noscale_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">case</span> 13: _t->deleteItem(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">case</span> 14: _t->on_toolButton_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> };</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (_id < 15)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> _id -= 15;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h_source.html b/doc/html/build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..6990e7e
--- /dev/null
+++ b/doc/html/build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h_source.html
@@ -0,0 +1,802 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html">build-pkcrop_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QGroupBox></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QListWidget></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QRadioButton></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionInput;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionExtent;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionQuit;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLineEdit *uly;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_extent;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *lrx;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *lry;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QListWidget *listWidget_band;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QListWidget *listWidget_input;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLineEdit *extent;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLabel *label_2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLabel *label_4;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *ulx;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QLabel *label_16;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QToolButton *toolButton;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QSpacerItem *horizontalSpacer_9;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QComboBox *resample;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QSpacerItem *verticalSpacer;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QLineEdit *dy;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLabel *label_9;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QSpacerItem *horizontalSpacer_8;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QGroupBox *groupBox;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QRadioButton *autoscale;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *offset;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QRadioButton *manual;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_21;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLabel *label_20;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QRadioButton *noscale;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLineEdit *scale;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_10;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QLineEdit *as_from;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QLabel *label_11;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QLineEdit *as_to;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QSpacerItem *horizontalSpacer_11;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLabel *label_15;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLineEdit *dx;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QLabel *label_18;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QLabel *label_17;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QSpacerItem *horizontalSpacer_10;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QComboBox *otype;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QComboBox *compressed;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLabel *label_6;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLabel *label_5;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QLabel *label_3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLineEdit *output;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QCheckBox *tiled;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QLabel *label_13;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QLineEdit *a_srs;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QLabel *label_7;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_14;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QComboBox *oformat;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QLabel *label_12;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QComboBox *interleaved;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QLabel *label_8;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QSpacerItem *horizontalSpacer_6;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QLabel *label_24;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> QLabel *label_25;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> QHBoxLayout *horizontalLayout_2;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QToolButton *toolButton_Run;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QSpacerItem *horizontalSpacer_7;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> QToolButton *toolButton_defaults;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> QButtonGroup *buttonGroup;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> MainWindow->resize(821, 701);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> actionExtent = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> actionExtent->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionExtent"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> actionQuit = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> actionQuit->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionQuit"</span>));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> uly = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> uly->setObjectName(QString::fromUtf8(<span class="stringliteral">"uly"</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> gridLayout_2->addWidget(uly, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> toolButton_extent = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> toolButton_extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_extent"</span>));</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> gridLayout_2->addWidget(toolButton_extent, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> gridLayout_2->addItem(horizontalSpacer_2, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> lrx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> lrx->setObjectName(QString::fromUtf8(<span class="stringliteral">"lrx"</span>));</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> gridLayout_2->addWidget(lrx, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> lry = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> lry->setObjectName(QString::fromUtf8(<span class="stringliteral">"lry"</span>));</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> gridLayout_2->addWidget(lry, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> listWidget_band = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> listWidget_band->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_band"</span>));</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> gridLayout_2->addWidget(listWidget_band, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> listWidget_input = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> listWidget_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_input"</span>));</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> gridLayout_2->addWidget(listWidget_input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> gridLayout_2->addItem(horizontalSpacer_3, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> extent = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"extent"</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> gridLayout_2->addWidget(extent, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gridLayout_2->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> gridLayout_2->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> ulx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> ulx->setObjectName(QString::fromUtf8(<span class="stringliteral">"ulx"</span>));</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> gridLayout_2->addWidget(ulx, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> label_16 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> gridLayout_2->addWidget(label_16, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> gridLayout_2->addWidget(label, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> toolButton = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> toolButton->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton"</span>));</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_2->addWidget(toolButton, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> verticalLayout_2->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout(tab_2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> gridLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> horizontalSpacer_9 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> gridLayout_4->addItem(horizontalSpacer_9, 1, 9, 1, 1);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> resample = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> resample->setObjectName(QString::fromUtf8(<span class="stringliteral">"resample"</span>));</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> gridLayout_4->addWidget(resample, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> verticalSpacer = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> gridLayout_4->addItem(verticalSpacer, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> dy = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> dy->setObjectName(QString::fromUtf8(<span class="stringliteral">"dy"</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> gridLayout_4->addWidget(dy, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> gridLayout_4->addItem(verticalSpacer_3, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_9 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> gridLayout_4->addWidget(label_9, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> horizontalSpacer_8 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_4->addItem(horizontalSpacer_8, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> groupBox = <span class="keyword">new</span> QGroupBox(tab_2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> groupBox->setObjectName(QString::fromUtf8(<span class="stringliteral">"groupBox"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout(groupBox);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> gridLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> autoscale = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> buttonGroup = <span class="keyword">new</span> QButtonGroup(MainWindow);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> buttonGroup->setObjectName(QString::fromUtf8(<span class="stringliteral">"buttonGroup"</span>));</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> buttonGroup->addButton(autoscale);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> autoscale->setObjectName(QString::fromUtf8(<span class="stringliteral">"autoscale"</span>));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> gridLayout_3->addWidget(autoscale, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> offset = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> offset->setObjectName(QString::fromUtf8(<span class="stringliteral">"offset"</span>));</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> gridLayout_3->addWidget(offset, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> manual = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> buttonGroup->addButton(manual);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> manual->setObjectName(QString::fromUtf8(<span class="stringliteral">"manual"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> gridLayout_3->addWidget(manual, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> label_21 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> gridLayout_3->addWidget(label_21, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> label_20 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> gridLayout_3->addWidget(label_20, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> noscale = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> buttonGroup->addButton(noscale);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> noscale->setObjectName(QString::fromUtf8(<span class="stringliteral">"noscale"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> gridLayout_3->addWidget(noscale, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> scale = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> scale->setObjectName(QString::fromUtf8(<span class="stringliteral">"scale"</span>));</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> gridLayout_3->addWidget(scale, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> gridLayout_3->addItem(horizontalSpacer_4, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> label_10 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> gridLayout_3->addWidget(label_10, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> as_from = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> as_from->setObjectName(QString::fromUtf8(<span class="stringliteral">"as_from"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout_3->addWidget(as_from, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> label_11 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> gridLayout_3->addWidget(label_11, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> as_to = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> as_to->setObjectName(QString::fromUtf8(<span class="stringliteral">"as_to"</span>));</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> gridLayout_3->addWidget(as_to, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> horizontalSpacer_11 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> gridLayout_3->addItem(horizontalSpacer_11, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> gridLayout_4->addWidget(groupBox, 3, 0, 1, 8);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> gridLayout_4->addWidget(label_15, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> dx = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> dx->setObjectName(QString::fromUtf8(<span class="stringliteral">"dx"</span>));</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> gridLayout_4->addWidget(dx, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> label_18 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> gridLayout_4->addWidget(label_18, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> label_17 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> gridLayout_4->addWidget(label_17, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> gridLayout_4->addItem(horizontalSpacer_5, 1, 6, 1, 1);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> horizontalSpacer_10 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> gridLayout_4->addItem(horizontalSpacer_10, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> otype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> otype->setObjectName(QString::fromUtf8(<span class="stringliteral">"otype"</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> gridLayout->addWidget(otype, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> compressed = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> compressed->setObjectName(QString::fromUtf8(<span class="stringliteral">"compressed"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> gridLayout->addWidget(compressed, 6, 5, 1, 1);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> gridLayout->addWidget(label_6, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout->addWidget(toolButton_output, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> label_3 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout->addWidget(label_3, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> gridLayout->addWidget(toolButton_ct, 5, 2, 1, 1);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> output = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> gridLayout->addWidget(output, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> tiled = <span class="keyword">new</span> QCheckBox(tab_3);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> tiled->setObjectName(QString::fromUtf8(<span class="stringliteral">"tiled"</span>));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> gridLayout->addWidget(tiled, 6, 2, 1, 1);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> label_13 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> gridLayout->addWidget(label_13, 6, 4, 1, 1);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> a_srs = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> a_srs->setObjectName(QString::fromUtf8(<span class="stringliteral">"a_srs"</span>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> gridLayout->addWidget(a_srs, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> gridLayout->addWidget(label_7, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> label_14 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> gridLayout->addWidget(label_14, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> nodata = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> gridLayout->addWidget(nodata, 7, 1, 1, 1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> oformat = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> oformat->setObjectName(QString::fromUtf8(<span class="stringliteral">"oformat"</span>));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> gridLayout->addWidget(oformat, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> ct = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> gridLayout->addWidget(ct, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> gridLayout->addWidget(label_12, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> interleaved = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> interleaved->setObjectName(QString::fromUtf8(<span class="stringliteral">"interleaved"</span>));</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> gridLayout->addWidget(interleaved, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> gridLayout->addWidget(label_8, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> horizontalSpacer_6 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> gridLayout->addItem(horizontalSpacer_6, 6, 3, 1, 1);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> label_24 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> label_24->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_24"</span>));</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> verticalLayout_4->addWidget(label_24);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> verticalLayout_4->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> label_25 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> label_25->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_25"</span>));</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> verticalLayout_4->addWidget(label_25);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> verticalLayout_4->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> verticalLayout_5->addLayout(verticalLayout_4);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 112, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> verticalLayout->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> verticalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> horizontalLayout_2 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> horizontalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> horizontalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_2"</span>));</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> toolButton_Run = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> toolButton_Run->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_Run"</span>));</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> horizontalLayout_2->addWidget(toolButton_Run);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> horizontalSpacer_7 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> horizontalLayout_2->addItem(horizontalSpacer_7);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> toolButton_defaults = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> toolButton_defaults->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_defaults"</span>));</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> horizontalLayout_2->addWidget(toolButton_defaults);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> verticalLayout->addLayout(horizontalLayout_2);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> menuBar->setGeometry(QRect(0, 0, 821, 25));</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> QWidget::setTabOrder(toolButton_input, uly);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> QWidget::setTabOrder(uly, ulx);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> QWidget::setTabOrder(ulx, lrx);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> QWidget::setTabOrder(lrx, lry);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> QWidget::setTabOrder(lry, extent);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> QWidget::setTabOrder(extent, toolButton_extent);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> QWidget::setTabOrder(toolButton_extent, listWidget_band);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> QWidget::setTabOrder(listWidget_band, resample);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> QWidget::setTabOrder(resample, dx);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> QWidget::setTabOrder(dx, dy);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> QWidget::setTabOrder(dy, noscale);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> QWidget::setTabOrder(noscale, autoscale);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> QWidget::setTabOrder(autoscale, scale);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> QWidget::setTabOrder(scale, offset);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> QWidget::setTabOrder(offset, output);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> QWidget::setTabOrder(toolButton_output, a_srs);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> QWidget::setTabOrder(a_srs, otype);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> QWidget::setTabOrder(otype, oformat);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> QWidget::setTabOrder(oformat, ct);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> QWidget::setTabOrder(toolButton_ct, interleaved);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> QWidget::setTabOrder(interleaved, tiled);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> QWidget::setTabOrder(tiled, compressed);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> QWidget::setTabOrder(compressed, nodata);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> QWidget::setTabOrder(nodata, toolButton_Run);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> QWidget::setTabOrder(toolButton_Run, toolButton_defaults);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> QWidget::setTabOrder(toolButton_defaults, manual);</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> QWidget::setTabOrder(manual, consoleEdit);</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> QWidget::setTabOrder(consoleEdit, commandLineEdit);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> QWidget::setTabOrder(commandLineEdit, listWidget_input);</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> QWidget::setTabOrder(listWidget_input, tabWidget);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> menuFile->addAction(actionExtent);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> menuFile->addAction(actionQuit);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkcrop_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> actionExtent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> actionExtent->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+E"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> actionQuit->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Quit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> actionQuit->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+Q"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> toolButton_extent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide geographical extent to crop in coordinate reference system of input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Geographical extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Use an external OGR vector file to define the geographical extent to crop. Coordinate reference systems of input and vector must be identical</p></body></html>"</s [...]
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent via vector:"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor">#ifndef QT_NO_WHATSTHIS</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"></span> label_16->setWhatsThis(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>First select input image. Then select bands by clicking in the table (use Ctrl and Shift to select multiple bands)</p></body></html>"</span>, 0, QApplication::U [...]
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor">#endif // QT_NO_WHATSTHIS</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"></span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Select bands"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image(s)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input image(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> toolButton->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"clear"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output resolution in x and y distance measure (e.g., meter). Leave empty to read from input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output resolution"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> groupBox->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Scale data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"></span> autoscale->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Auto scale input data from to (e.g., use from=0 and to=255 for Byte type image)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"></span> autoscale->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"autoscale"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"></span> manual->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Manually scale data using scale and offset: output=scale*input+offset</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"></span> manual->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"manual"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"offset"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"scale"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"></span> noscale->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Do not scale the data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span> noscale->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"no scaling"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"from"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"to"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dx"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dy"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Resample method"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Scaling"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Assign projection (e.g., epsg:3035). Notice this will not re-project the image. Use gdalwarp instead.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Assign projection (EPSG:code)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output raster image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> tiled->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Tiled"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"compressed"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Nodata value to put in image if out of bounds</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Interleaved"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha</p></body></html>"</span>, 0, QAp [...]
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table (ASCII)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> label_24->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> label_25->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> toolButton_Run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> toolButton_defaults->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> };</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..59131a1
--- /dev/null
+++ b/doc/html/build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_f92e37ed5759424bff98155847b1034b.html">build-pkcrop_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkcrop_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 15, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 69, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 100, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 131, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 158, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 186, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 219, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 245, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 273, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 296, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 324, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 344, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 365, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> 378, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> };</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_toolButton_extent_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_toolButton_Run_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_defaults_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_actionQuit_triggered()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_autoscale_clicked()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"on_actionExtent_triggered()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">"on_manual_clicked()\0on_noscale_clicked()\0"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">"deleteItem()\0on_toolButton_clicked()\0"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> };</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 1: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 2: _t->on_toolButton_extent_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 3: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_Run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_defaults_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 7: _t->on_actionQuit_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 8: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 9: _t->on_autoscale_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 10: _t->on_actionExtent_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> 11: _t->on_manual_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">case</span> 12: _t->on_noscale_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">case</span> 13: _t->deleteItem(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">case</span> 14: _t->on_toolButton_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> };</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (_id < 15)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> _id -= 15;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h_source.html b/doc/html/build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..26f8276
--- /dev/null
+++ b/doc/html/build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h_source.html
@@ -0,0 +1,802 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_f92e37ed5759424bff98155847b1034b.html">build-pkcrop_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QGroupBox></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QListWidget></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QRadioButton></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionInput;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionExtent;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionQuit;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLineEdit *uly;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_extent;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *lrx;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *lry;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QListWidget *listWidget_band;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QListWidget *listWidget_input;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLineEdit *extent;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLabel *label_2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLabel *label_4;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *ulx;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QLabel *label_16;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QToolButton *toolButton;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QSpacerItem *horizontalSpacer_9;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QComboBox *resample;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QSpacerItem *verticalSpacer;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QLineEdit *dy;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLabel *label_9;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QSpacerItem *horizontalSpacer_8;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QGroupBox *groupBox;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QRadioButton *autoscale;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *offset;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QRadioButton *manual;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_21;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLabel *label_20;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QRadioButton *noscale;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLineEdit *scale;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_10;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QLineEdit *as_from;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QLabel *label_11;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QLineEdit *as_to;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QSpacerItem *horizontalSpacer_11;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLabel *label_15;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLineEdit *dx;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QLabel *label_18;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QLabel *label_17;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QSpacerItem *horizontalSpacer_10;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QComboBox *otype;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QComboBox *compressed;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLabel *label_6;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLabel *label_5;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QLabel *label_3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLineEdit *output;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QCheckBox *tiled;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QLabel *label_13;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QLineEdit *a_srs;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QLabel *label_7;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_14;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QComboBox *oformat;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QLabel *label_12;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QComboBox *interleaved;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QLabel *label_8;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QSpacerItem *horizontalSpacer_6;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QLabel *label_24;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> QLabel *label_25;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> QHBoxLayout *horizontalLayout_2;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QToolButton *toolButton_Run;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> QSpacerItem *horizontalSpacer_7;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> QToolButton *toolButton_defaults;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> QButtonGroup *buttonGroup;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> MainWindow->resize(821, 701);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> actionExtent = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> actionExtent->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionExtent"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> actionQuit = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> actionQuit->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionQuit"</span>));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> uly = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> uly->setObjectName(QString::fromUtf8(<span class="stringliteral">"uly"</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> gridLayout_2->addWidget(uly, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> toolButton_extent = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> toolButton_extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_extent"</span>));</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> gridLayout_2->addWidget(toolButton_extent, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> gridLayout_2->addItem(horizontalSpacer_2, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> lrx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> lrx->setObjectName(QString::fromUtf8(<span class="stringliteral">"lrx"</span>));</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> gridLayout_2->addWidget(lrx, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> lry = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> lry->setObjectName(QString::fromUtf8(<span class="stringliteral">"lry"</span>));</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> gridLayout_2->addWidget(lry, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> listWidget_band = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> listWidget_band->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_band"</span>));</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> gridLayout_2->addWidget(listWidget_band, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> listWidget_input = <span class="keyword">new</span> QListWidget(tab);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> listWidget_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"listWidget_input"</span>));</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> gridLayout_2->addWidget(listWidget_input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> gridLayout_2->addItem(horizontalSpacer_3, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> extent = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> extent->setObjectName(QString::fromUtf8(<span class="stringliteral">"extent"</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> gridLayout_2->addWidget(extent, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gridLayout_2->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> gridLayout_2->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> ulx = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> ulx->setObjectName(QString::fromUtf8(<span class="stringliteral">"ulx"</span>));</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> gridLayout_2->addWidget(ulx, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> label_16 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> gridLayout_2->addWidget(label_16, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> gridLayout_2->addWidget(label, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> toolButton = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> toolButton->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton"</span>));</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_2->addWidget(toolButton, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> verticalLayout_2->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout(tab_2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> gridLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> horizontalSpacer_9 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> gridLayout_4->addItem(horizontalSpacer_9, 1, 9, 1, 1);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> resample = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> resample->setObjectName(QString::fromUtf8(<span class="stringliteral">"resample"</span>));</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> gridLayout_4->addWidget(resample, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> verticalSpacer = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> gridLayout_4->addItem(verticalSpacer, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> dy = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> dy->setObjectName(QString::fromUtf8(<span class="stringliteral">"dy"</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> gridLayout_4->addWidget(dy, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> gridLayout_4->addItem(verticalSpacer_3, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_9 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> gridLayout_4->addWidget(label_9, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> horizontalSpacer_8 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_4->addItem(horizontalSpacer_8, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> groupBox = <span class="keyword">new</span> QGroupBox(tab_2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> groupBox->setObjectName(QString::fromUtf8(<span class="stringliteral">"groupBox"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout(groupBox);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> gridLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> autoscale = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> buttonGroup = <span class="keyword">new</span> QButtonGroup(MainWindow);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> buttonGroup->setObjectName(QString::fromUtf8(<span class="stringliteral">"buttonGroup"</span>));</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> buttonGroup->addButton(autoscale);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> autoscale->setObjectName(QString::fromUtf8(<span class="stringliteral">"autoscale"</span>));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> gridLayout_3->addWidget(autoscale, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> offset = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> offset->setObjectName(QString::fromUtf8(<span class="stringliteral">"offset"</span>));</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> gridLayout_3->addWidget(offset, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> manual = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> buttonGroup->addButton(manual);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> manual->setObjectName(QString::fromUtf8(<span class="stringliteral">"manual"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> gridLayout_3->addWidget(manual, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> label_21 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> gridLayout_3->addWidget(label_21, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> label_20 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> gridLayout_3->addWidget(label_20, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> noscale = <span class="keyword">new</span> QRadioButton(groupBox);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> buttonGroup->addButton(noscale);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> noscale->setObjectName(QString::fromUtf8(<span class="stringliteral">"noscale"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> gridLayout_3->addWidget(noscale, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> scale = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> scale->setObjectName(QString::fromUtf8(<span class="stringliteral">"scale"</span>));</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> gridLayout_3->addWidget(scale, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> gridLayout_3->addItem(horizontalSpacer_4, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> label_10 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> gridLayout_3->addWidget(label_10, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> as_from = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> as_from->setObjectName(QString::fromUtf8(<span class="stringliteral">"as_from"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout_3->addWidget(as_from, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> label_11 = <span class="keyword">new</span> QLabel(groupBox);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> gridLayout_3->addWidget(label_11, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> as_to = <span class="keyword">new</span> QLineEdit(groupBox);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> as_to->setObjectName(QString::fromUtf8(<span class="stringliteral">"as_to"</span>));</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> gridLayout_3->addWidget(as_to, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> horizontalSpacer_11 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> gridLayout_3->addItem(horizontalSpacer_11, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> gridLayout_4->addWidget(groupBox, 3, 0, 1, 8);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> gridLayout_4->addWidget(label_15, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> dx = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> dx->setObjectName(QString::fromUtf8(<span class="stringliteral">"dx"</span>));</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> gridLayout_4->addWidget(dx, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> label_18 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> gridLayout_4->addWidget(label_18, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> label_17 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> gridLayout_4->addWidget(label_17, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> gridLayout_4->addItem(horizontalSpacer_5, 1, 6, 1, 1);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> horizontalSpacer_10 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> gridLayout_4->addItem(horizontalSpacer_10, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> otype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> otype->setObjectName(QString::fromUtf8(<span class="stringliteral">"otype"</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> gridLayout->addWidget(otype, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> compressed = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> compressed->setObjectName(QString::fromUtf8(<span class="stringliteral">"compressed"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> gridLayout->addWidget(compressed, 6, 5, 1, 1);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> gridLayout->addWidget(label_6, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout->addWidget(toolButton_output, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> label_3 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout->addWidget(label_3, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_3);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> gridLayout->addWidget(toolButton_ct, 5, 2, 1, 1);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> output = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> gridLayout->addWidget(output, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> tiled = <span class="keyword">new</span> QCheckBox(tab_3);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> tiled->setObjectName(QString::fromUtf8(<span class="stringliteral">"tiled"</span>));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> gridLayout->addWidget(tiled, 6, 2, 1, 1);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> label_13 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> gridLayout->addWidget(label_13, 6, 4, 1, 1);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> a_srs = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> a_srs->setObjectName(QString::fromUtf8(<span class="stringliteral">"a_srs"</span>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> gridLayout->addWidget(a_srs, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> gridLayout->addWidget(label_7, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> label_14 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> gridLayout->addWidget(label_14, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> nodata = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> gridLayout->addWidget(nodata, 7, 1, 1, 1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> oformat = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> oformat->setObjectName(QString::fromUtf8(<span class="stringliteral">"oformat"</span>));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> gridLayout->addWidget(oformat, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> ct = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> gridLayout->addWidget(ct, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> gridLayout->addWidget(label_12, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> interleaved = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> interleaved->setObjectName(QString::fromUtf8(<span class="stringliteral">"interleaved"</span>));</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> gridLayout->addWidget(interleaved, 6, 1, 1, 1);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> gridLayout->addWidget(label_8, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> horizontalSpacer_6 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> gridLayout->addItem(horizontalSpacer_6, 6, 3, 1, 1);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> label_24 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> label_24->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_24"</span>));</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> verticalLayout_4->addWidget(label_24);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> verticalLayout_4->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> label_25 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> label_25->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_25"</span>));</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> verticalLayout_4->addWidget(label_25);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> verticalLayout_4->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> verticalLayout_5->addLayout(verticalLayout_4);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 112, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> verticalLayout->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> verticalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> horizontalLayout_2 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> horizontalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> horizontalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_2"</span>));</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> toolButton_Run = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> toolButton_Run->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_Run"</span>));</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> horizontalLayout_2->addWidget(toolButton_Run);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> horizontalSpacer_7 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> horizontalLayout_2->addItem(horizontalSpacer_7);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> toolButton_defaults = <span class="keyword">new</span> QToolButton(centralWidget);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> toolButton_defaults->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_defaults"</span>));</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> horizontalLayout_2->addWidget(toolButton_defaults);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> verticalLayout->addLayout(horizontalLayout_2);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> menuBar->setGeometry(QRect(0, 0, 821, 25));</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> QWidget::setTabOrder(toolButton_input, uly);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> QWidget::setTabOrder(uly, ulx);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> QWidget::setTabOrder(ulx, lrx);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> QWidget::setTabOrder(lrx, lry);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> QWidget::setTabOrder(lry, extent);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> QWidget::setTabOrder(extent, toolButton_extent);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> QWidget::setTabOrder(toolButton_extent, listWidget_band);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> QWidget::setTabOrder(listWidget_band, resample);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> QWidget::setTabOrder(resample, dx);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> QWidget::setTabOrder(dx, dy);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> QWidget::setTabOrder(dy, noscale);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> QWidget::setTabOrder(noscale, autoscale);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> QWidget::setTabOrder(autoscale, scale);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> QWidget::setTabOrder(scale, offset);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> QWidget::setTabOrder(offset, output);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> QWidget::setTabOrder(toolButton_output, a_srs);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> QWidget::setTabOrder(a_srs, otype);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> QWidget::setTabOrder(otype, oformat);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> QWidget::setTabOrder(oformat, ct);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> QWidget::setTabOrder(toolButton_ct, interleaved);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> QWidget::setTabOrder(interleaved, tiled);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> QWidget::setTabOrder(tiled, compressed);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> QWidget::setTabOrder(compressed, nodata);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> QWidget::setTabOrder(nodata, toolButton_Run);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> QWidget::setTabOrder(toolButton_Run, toolButton_defaults);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> QWidget::setTabOrder(toolButton_defaults, manual);</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> QWidget::setTabOrder(manual, consoleEdit);</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> QWidget::setTabOrder(consoleEdit, commandLineEdit);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> QWidget::setTabOrder(commandLineEdit, listWidget_input);</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> QWidget::setTabOrder(listWidget_input, tabWidget);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> menuFile->addAction(actionExtent);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> menuFile->addAction(actionQuit);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkcrop_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> actionExtent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> actionExtent->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+E"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> actionQuit->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Quit"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> actionQuit->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+Q"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> toolButton_extent->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide geographical extent to crop in coordinate reference system of input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Geographical extent"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Use an external OGR vector file to define the geographical extent to crop. Coordinate reference systems of input and vector must be identical</p></body></html>"</s [...]
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extent via vector:"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor">#ifndef QT_NO_WHATSTHIS</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"></span> label_16->setWhatsThis(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>First select input image. Then select bands by clicking in the table (use Ctrl and Shift to select multiple bands)</p></body></html>"</span>, 0, QApplication::U [...]
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor">#endif // QT_NO_WHATSTHIS</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"></span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Select bands"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image(s)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input image(s)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> toolButton->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"clear"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output resolution in x and y distance measure (e.g., meter). Leave empty to read from input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output resolution"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> groupBox->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Scale data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"></span> autoscale->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Auto scale input data from to (e.g., use from=0 and to=255 for Byte type image)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"></span> autoscale->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"autoscale"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"></span> manual->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Manually scale data using scale and offset: output=scale*input+offset</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"></span> manual->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"manual"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"offset"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"scale"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"></span> noscale->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Do not scale the data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span> noscale->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"no scaling"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"from"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"to"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dx"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"dy"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Resample method"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Scaling"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Assign projection (e.g., epsg:3035). Notice this will not re-project the image. Use gdalwarp instead.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Assign projection (EPSG:code)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output raster image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> tiled->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Tiled"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"compressed"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output image format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Nodata value to put in image if out of bounds</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output nodata value"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Interleaved"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha</p></body></html>"</span>, 0, QAp [...]
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table (ASCII)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> label_24->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> label_25->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> toolButton_Run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> toolButton_defaults->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> };</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..98047d1
--- /dev/null
+++ b/doc/html/build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_5f1e10fd305b434def78aaf73fd56d60.html">build-pkdiff_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkdiff_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 11, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 70, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 96, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 124, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 154, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 183, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 214, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 248, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 276, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 308, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> };</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">"on_actionReference_triggered()\0"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"on_actionMask_triggered()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_mask_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_reference_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_commandLinkButtonPrepareTable_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">case</span> 1: _t->on_actionReference_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">case</span> 2: _t->on_actionMask_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_mask_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_reference_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 8: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 9: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 10: _t->on_commandLinkButtonPrepareTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> };</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> };</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span> (_id < 11)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> _id -= 11;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h_source.html b/doc/html/build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..ff8da6b
--- /dev/null
+++ b/doc/html/build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h_source.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_5f1e10fd305b434def78aaf73fd56d60.html">build-pkdiff_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionReference;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionColor_table;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QWidget *layoutWidget;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_2;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLineEdit *lclass;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *output;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLabel *label_6;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *input;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QCheckBox *confusion;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLabel *label_14;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_13;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *mask;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QToolButton *toolButton_mask;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *msknodata;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QSpacerItem *horizontalSpacer_15;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label_3;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QLabel *label_4;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QLabel *label_5;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QLineEdit *lref;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLabel *label_reference;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLineEdit *reference;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QToolButton *toolButton_reference;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QComboBox *f;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_7;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QWidget *widget;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QToolButton *commandLinkButtonPrepareTable;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QVBoxLayout *verticalLayout_6;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_18;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_19;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> MainWindow->resize(810, 777);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> actionReference = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> actionReference->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionReference"</span>));</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> actionColor_table = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> actionColor_table->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionColor_table"</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> layoutWidget = <span class="keyword">new</span> QWidget(tab_2);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> layoutWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"layoutWidget"</span>));</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> layoutWidget->setGeometry(QRect(9, 9, 761, 264));</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout(layoutWidget);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> gridLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> gridLayout_2->setContentsMargins(0, 0, 0, 0);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> label_2 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> gridLayout_2->addWidget(label_2, 5, 5, 1, 1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> toolButton_output = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> gridLayout_2->addWidget(toolButton_output, 4, 3, 1, 1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> lclass = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> lclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"lclass"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> gridLayout_2->addWidget(lclass, 4, 6, 1, 1);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> output = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> gridLayout_2->addWidget(output, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> label_6 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> gridLayout_2->addWidget(label_6, 4, 5, 1, 1);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> input = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> gridLayout_2->addWidget(input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> confusion = <span class="keyword">new</span> QCheckBox(layoutWidget);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> confusion->setObjectName(QString::fromUtf8(<span class="stringliteral">"confusion"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> gridLayout_2->addWidget(confusion, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> label_14 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> gridLayout_2->addWidget(label_14, 3, 5, 1, 1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> toolButton_input = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> gridLayout_2->addWidget(toolButton_input, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> label_13 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> gridLayout_2->addWidget(label_13, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> mask = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"mask"</span>));</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> gridLayout_2->addWidget(mask, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> toolButton_mask = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> toolButton_mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_mask"</span>));</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> gridLayout_2->addWidget(toolButton_mask, 3, 3, 1, 1);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> msknodata = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> msknodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"msknodata"</span>));</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> gridLayout_2->addWidget(msknodata, 3, 6, 1, 1);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> horizontalSpacer_15 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gridLayout_2->addItem(horizontalSpacer_15, 3, 4, 1, 1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> label_3 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> gridLayout_2->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> nclass = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> gridLayout_2->addWidget(nclass, 7, 2, 1, 1);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> label_4 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> label_5 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> gridLayout_2->addWidget(label_5, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> lref = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> lref->setObjectName(QString::fromUtf8(<span class="stringliteral">"lref"</span>));</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> gridLayout_2->addWidget(lref, 2, 6, 1, 1);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> label_reference = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> label_reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_reference"</span>));</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gridLayout_2->addWidget(label_reference, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> reference = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"reference"</span>));</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> gridLayout_2->addWidget(reference, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> toolButton_reference = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> toolButton_reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_reference"</span>));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> gridLayout_2->addWidget(toolButton_reference, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> gridLayout_2->addItem(verticalSpacer_2, 8, 0, 1, 1);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> f = <span class="keyword">new</span> QComboBox(layoutWidget);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> f->setObjectName(QString::fromUtf8(<span class="stringliteral">"f"</span>));</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> gridLayout_2->addWidget(f, 5, 6, 1, 1);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> label_7 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gridLayout_2->addWidget(label_7, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> nodata = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_2->addWidget(nodata, 0, 6, 1, 1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> label = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> gridLayout_2->addWidget(label, 0, 5, 1, 1);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> widget = <span class="keyword">new</span> QWidget(tab_2);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> widget->setObjectName(QString::fromUtf8(<span class="stringliteral">"widget"</span>));</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> widget->setGeometry(QRect(11, 281, 391, 331));</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(widget);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> verticalLayout_2->setContentsMargins(0, 0, 0, 0);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> commandLinkButtonPrepareTable = <span class="keyword">new</span> QToolButton(widget);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> commandLinkButtonPrepareTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLinkButtonPrepareTable"</span>));</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> verticalLayout_2->addWidget(commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> tableView_labels = <span class="keyword">new</span> QTableView(widget);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> verticalLayout_6 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> verticalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> verticalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> verticalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_6"</span>));</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> verticalLayout_6->addWidget(label_18);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> verticalLayout_6->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> verticalLayout_6->addWidget(label_19);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> verticalLayout_6->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> verticalLayout->addLayout(horizontalLayout);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> menuBar->setGeometry(QRect(0, 0, 810, 27));</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> QWidget::setTabOrder(toolButton_input, nodata);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> QWidget::setTabOrder(nodata, reference);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> QWidget::setTabOrder(reference, toolButton_reference);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> QWidget::setTabOrder(toolButton_reference, lref);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> QWidget::setTabOrder(lref, mask);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> QWidget::setTabOrder(mask, toolButton_mask);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> QWidget::setTabOrder(toolButton_mask, msknodata);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> QWidget::setTabOrder(msknodata, output);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> QWidget::setTabOrder(toolButton_output, lclass);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> QWidget::setTabOrder(lclass, f);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> QWidget::setTabOrder(f, confusion);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> QWidget::setTabOrder(confusion, nclass);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> QWidget::setTabOrder(nclass, commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> QWidget::setTabOrder(commandLinkButtonPrepareTable, tableView_labels);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> QWidget::setTabOrder(tableView_labels, consoleEdit);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> QWidget::setTabOrder(consoleEdit, pushButton_restore);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> QWidget::setTabOrder(pushButton_restore, pushButton_run);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> QWidget::setTabOrder(pushButton_run, commandLineEdit);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> QWidget::setTabOrder(commandLineEdit, tabWidget);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> menuFile->addAction(actionReference);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> {</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkdiff_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> actionReference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Reference"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> actionReference->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+T"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> actionMask->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+M"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> actionColor_table->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> actionColor_table->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+C"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"OGR output format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> confusion->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"confusion matrix"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"msknodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Dimensions of mask image must correspond to input image. Pixels in mask with values=masknodata are not classified and get nodata value.</p></body></html>"</span>, [...]
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> toolButton_mask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image. Both OGR vectors and GDAL rasters are supported. Number of bands must match those in training sample.</p></body></html>"</span>, 0, QApplication::Unic [...]
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> label_reference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Reference"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> toolButton_reference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Number of classes to prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> commandLinkButtonPrepareTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"></span> pushButton_run->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Classify with current settings (check Console for output)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"></span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"></span> pushButton_restore->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>reset all parameters to default</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"></span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> };</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..8e8db75
--- /dev/null
+++ b/doc/html/build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html">build-pkdiff_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkdiff_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 11, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 70, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 96, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 124, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 154, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 183, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 214, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 248, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 276, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 308, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> };</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">"on_actionReference_triggered()\0"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"on_actionMask_triggered()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_mask_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_reference_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_commandLinkButtonPrepareTable_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">case</span> 1: _t->on_actionReference_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">case</span> 2: _t->on_actionMask_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_mask_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_reference_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 8: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 9: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 10: _t->on_commandLinkButtonPrepareTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> };</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> };</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span> (_id < 11)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> _id -= 11;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h_source.html b/doc/html/build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..b7d4fd1
--- /dev/null
+++ b/doc/html/build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h_source.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html">build-pkdiff_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionReference;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionColor_table;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QWidget *layoutWidget;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_2;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLineEdit *lclass;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *output;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLabel *label_6;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *input;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QCheckBox *confusion;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLabel *label_14;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_13;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *mask;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QToolButton *toolButton_mask;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *msknodata;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QSpacerItem *horizontalSpacer_15;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label_3;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QLabel *label_4;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QLabel *label_5;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QLineEdit *lref;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLabel *label_reference;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLineEdit *reference;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QToolButton *toolButton_reference;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QComboBox *f;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_7;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QWidget *widget;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QToolButton *commandLinkButtonPrepareTable;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QVBoxLayout *verticalLayout_6;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_18;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_19;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> MainWindow->resize(810, 777);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> actionReference = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> actionReference->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionReference"</span>));</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> actionColor_table = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> actionColor_table->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionColor_table"</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> layoutWidget = <span class="keyword">new</span> QWidget(tab_2);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> layoutWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"layoutWidget"</span>));</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> layoutWidget->setGeometry(QRect(9, 9, 761, 264));</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout(layoutWidget);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> gridLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> gridLayout_2->setContentsMargins(0, 0, 0, 0);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> label_2 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> gridLayout_2->addWidget(label_2, 5, 5, 1, 1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> toolButton_output = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> gridLayout_2->addWidget(toolButton_output, 4, 3, 1, 1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> lclass = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> lclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"lclass"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> gridLayout_2->addWidget(lclass, 4, 6, 1, 1);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> output = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> gridLayout_2->addWidget(output, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> label_6 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> gridLayout_2->addWidget(label_6, 4, 5, 1, 1);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> input = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> gridLayout_2->addWidget(input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> confusion = <span class="keyword">new</span> QCheckBox(layoutWidget);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> confusion->setObjectName(QString::fromUtf8(<span class="stringliteral">"confusion"</span>));</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> gridLayout_2->addWidget(confusion, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> label_14 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> gridLayout_2->addWidget(label_14, 3, 5, 1, 1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> toolButton_input = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> gridLayout_2->addWidget(toolButton_input, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> label_13 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> gridLayout_2->addWidget(label_13, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> mask = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"mask"</span>));</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> gridLayout_2->addWidget(mask, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> toolButton_mask = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> toolButton_mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_mask"</span>));</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> gridLayout_2->addWidget(toolButton_mask, 3, 3, 1, 1);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> msknodata = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> msknodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"msknodata"</span>));</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> gridLayout_2->addWidget(msknodata, 3, 6, 1, 1);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> horizontalSpacer_15 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gridLayout_2->addItem(horizontalSpacer_15, 3, 4, 1, 1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> label_3 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> gridLayout_2->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> nclass = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> gridLayout_2->addWidget(nclass, 7, 2, 1, 1);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> label_4 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> gridLayout_2->addWidget(label_4, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> label_5 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> gridLayout_2->addWidget(label_5, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> lref = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> lref->setObjectName(QString::fromUtf8(<span class="stringliteral">"lref"</span>));</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> gridLayout_2->addWidget(lref, 2, 6, 1, 1);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> label_reference = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> label_reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_reference"</span>));</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gridLayout_2->addWidget(label_reference, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> reference = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"reference"</span>));</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> gridLayout_2->addWidget(reference, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> toolButton_reference = <span class="keyword">new</span> QToolButton(layoutWidget);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> toolButton_reference->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_reference"</span>));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> gridLayout_2->addWidget(toolButton_reference, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> gridLayout_2->addItem(verticalSpacer_2, 8, 0, 1, 1);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> f = <span class="keyword">new</span> QComboBox(layoutWidget);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> f->setObjectName(QString::fromUtf8(<span class="stringliteral">"f"</span>));</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> gridLayout_2->addWidget(f, 5, 6, 1, 1);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> label_7 = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gridLayout_2->addWidget(label_7, 7, 0, 1, 1);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> nodata = <span class="keyword">new</span> QLineEdit(layoutWidget);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_2->addWidget(nodata, 0, 6, 1, 1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> label = <span class="keyword">new</span> QLabel(layoutWidget);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> gridLayout_2->addWidget(label, 0, 5, 1, 1);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> widget = <span class="keyword">new</span> QWidget(tab_2);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> widget->setObjectName(QString::fromUtf8(<span class="stringliteral">"widget"</span>));</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> widget->setGeometry(QRect(11, 281, 391, 331));</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout(widget);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> verticalLayout_2->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> verticalLayout_2->setContentsMargins(0, 0, 0, 0);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> commandLinkButtonPrepareTable = <span class="keyword">new</span> QToolButton(widget);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> commandLinkButtonPrepareTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLinkButtonPrepareTable"</span>));</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> verticalLayout_2->addWidget(commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> tableView_labels = <span class="keyword">new</span> QTableView(widget);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> verticalLayout_6 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> verticalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> verticalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> verticalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_6"</span>));</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> verticalLayout_6->addWidget(label_18);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> verticalLayout_6->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> verticalLayout_6->addWidget(label_19);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> verticalLayout_6->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> verticalLayout->addLayout(horizontalLayout);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> menuBar->setGeometry(QRect(0, 0, 810, 27));</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> QWidget::setTabOrder(toolButton_input, nodata);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> QWidget::setTabOrder(nodata, reference);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> QWidget::setTabOrder(reference, toolButton_reference);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> QWidget::setTabOrder(toolButton_reference, lref);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> QWidget::setTabOrder(lref, mask);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> QWidget::setTabOrder(mask, toolButton_mask);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> QWidget::setTabOrder(toolButton_mask, msknodata);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> QWidget::setTabOrder(msknodata, output);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> QWidget::setTabOrder(toolButton_output, lclass);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> QWidget::setTabOrder(lclass, f);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> QWidget::setTabOrder(f, confusion);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> QWidget::setTabOrder(confusion, nclass);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> QWidget::setTabOrder(nclass, commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> QWidget::setTabOrder(commandLinkButtonPrepareTable, tableView_labels);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> QWidget::setTabOrder(tableView_labels, consoleEdit);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> QWidget::setTabOrder(consoleEdit, pushButton_restore);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> QWidget::setTabOrder(pushButton_restore, pushButton_run);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> QWidget::setTabOrder(pushButton_run, commandLineEdit);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> QWidget::setTabOrder(commandLineEdit, tabWidget);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> menuFile->addAction(actionReference);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> {</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkdiff_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> actionReference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Reference"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> actionReference->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+T"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> actionMask->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+M"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> actionColor_table->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> actionColor_table->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+C"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"OGR output format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> confusion->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"confusion matrix"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"msknodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Dimensions of mask image must correspond to input image. Pixels in mask with values=masknodata are not classified and get nodata value.</p></body></html>"</span>, [...]
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> toolButton_mask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image. Both OGR vectors and GDAL rasters are supported. Number of bands must match those in training sample.</p></body></html>"</span>, 0, QApplication::Unic [...]
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> label_reference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Reference"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> toolButton_reference->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Number of classes to prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> commandLinkButtonPrepareTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"></span> pushButton_run->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Classify with current settings (check Console for output)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"></span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"></span> pushButton_restore->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>reset all parameters to default</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"></span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> };</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..0f51a97
--- /dev/null
+++ b/doc/html/build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html">build-pkextract_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkextract_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 9, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 67, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 95, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 125, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 156, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 187, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 215, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 251, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">"on_actionSample_triggered()\0"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_toolButton_sample_clicked()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_createTable_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">case</span> 1: _t->on_actionSample_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">case</span> 2: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">case</span> 3: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_sample_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">case</span> 6: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_createTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 8: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> };</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> };</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (_id < 9)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> _id -= 9;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h_source.html b/doc/html/build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..eca7493
--- /dev/null
+++ b/doc/html/build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h_source.html
@@ -0,0 +1,590 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html">build-pkextract_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionSample;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QGridLayout *gridLayout_5;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QHBoxLayout *horizontalLayout_3;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QHBoxLayout *horizontalLayout_4;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_14;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QLineEdit *bndnodata;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label_13;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *output;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *input;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QComboBox *f;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLabel *label_16;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLabel *label_15;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_3;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *sample;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLabel *label_23;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *srcnodata;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QToolButton *toolButton_sample;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QCheckBox *polygon;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QHBoxLayout *horizontalLayout_5;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLineEdit *bname;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_20;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QComboBox *rule;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QLabel *label_4;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_21;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QToolButton *toolButton_createTable;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label_2;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLabel *label;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *threshold;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_5;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *cname;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_17;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_22;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QHBoxLayout *horizontalLayout_6;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QLabel *label_18;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLabel *label_19;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> MainWindow->resize(703, 706);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> actionSample = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> actionSample->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionSample"</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> centralWidget->setMinimumSize(QSize(423, 392));</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> gridLayout_5 = <span class="keyword">new</span> QGridLayout(centralWidget);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> gridLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> gridLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> gridLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_5"</span>));</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> horizontalLayout_3 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> horizontalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> horizontalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_3"</span>));</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> horizontalLayout_4 = <span class="keyword">new</span> QHBoxLayout(tab_2);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> horizontalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> horizontalLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> horizontalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_4"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> label_14 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> gridLayout->addWidget(label_14, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> bndnodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> bndnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"bndnodata"</span>));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> gridLayout->addWidget(bndnodata, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> label_13 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> gridLayout->addWidget(label_13, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> output = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> gridLayout->addWidget(output, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> input = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> gridLayout->addWidget(input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> gridLayout->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> f = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> f->setObjectName(QString::fromUtf8(<span class="stringliteral">"f"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> gridLayout->addWidget(f, 3, 4, 1, 1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> label_16 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> gridLayout->addWidget(label_16, 3, 3, 1, 1);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> gridLayout->addWidget(label_15, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> label_3 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> gridLayout->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> sample = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> sample->setObjectName(QString::fromUtf8(<span class="stringliteral">"sample"</span>));</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> gridLayout->addWidget(sample, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> label_23 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> label_23->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_23"</span>));</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> gridLayout->addWidget(label_23, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> srcnodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> srcnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"srcnodata"</span>));</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> gridLayout->addWidget(srcnodata, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> gridLayout->addWidget(toolButton_output, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> toolButton_sample = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> toolButton_sample->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_sample"</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> gridLayout->addWidget(toolButton_sample, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> polygon = <span class="keyword">new</span> QCheckBox(tab_2);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> polygon->setObjectName(QString::fromUtf8(<span class="stringliteral">"polygon"</span>));</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gridLayout->addWidget(polygon, 4, 3, 1, 1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> horizontalLayout_4->addLayout(gridLayout);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> horizontalLayout_5 = <span class="keyword">new</span> QHBoxLayout(tab);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> horizontalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> horizontalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> horizontalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_5"</span>));</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> bname = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> bname->setObjectName(QString::fromUtf8(<span class="stringliteral">"bname"</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> gridLayout_4->addWidget(bname, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> label_20 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> gridLayout_4->addWidget(label_20, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> rule = <span class="keyword">new</span> QComboBox(tab);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> rule->setObjectName(QString::fromUtf8(<span class="stringliteral">"rule"</span>));</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> gridLayout_4->addWidget(rule, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> gridLayout_4->addWidget(label_4, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> nclass = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> sizePolicy.setHorizontalStretch(10);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> sizePolicy.setVerticalStretch(0);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> sizePolicy.setHeightForWidth(nclass->sizePolicy().hasHeightForWidth());</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> nclass->setSizePolicy(sizePolicy);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> gridLayout_4->addWidget(nclass, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> label_21 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> gridLayout_4->addWidget(label_21, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> toolButton_createTable = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> toolButton_createTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_createTable"</span>));</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> gridLayout_4->addWidget(toolButton_createTable, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> gridLayout_4->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> gridLayout_4->addWidget(label, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> threshold = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> threshold->setObjectName(QString::fromUtf8(<span class="stringliteral">"threshold"</span>));</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> gridLayout_4->addWidget(threshold, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> gridLayout_4->addItem(verticalSpacer_2, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_5 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> gridLayout_4->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> cname = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> cname->setObjectName(QString::fromUtf8(<span class="stringliteral">"cname"</span>));</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> gridLayout_4->addWidget(cname, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> horizontalLayout_5->addLayout(gridLayout_4);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> label_17 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> verticalLayout_2->addWidget(label_17);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> tableView_labels = <span class="keyword">new</span> QTableView(tab);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> label_22 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> verticalLayout_2->addWidget(label_22, 0, Qt::AlignHCenter);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> horizontalLayout_5->addLayout(verticalLayout_2);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> horizontalLayout_6 = <span class="keyword">new</span> QHBoxLayout(tab_4);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> horizontalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> horizontalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> horizontalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_6"</span>));</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> verticalLayout->addWidget(label_18);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> verticalLayout->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> verticalLayout->addWidget(label_19);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> verticalLayout->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> horizontalLayout_6->addLayout(verticalLayout);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> horizontalLayout_3->addWidget(tabWidget);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> gridLayout_5->addLayout(horizontalLayout_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> gridLayout_5->addLayout(horizontalLayout, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> menuBar->setGeometry(QRect(0, 0, 703, 27));</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> QWidget::setTabOrder(toolButton_input, bndnodata);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> QWidget::setTabOrder(bndnodata, srcnodata);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> QWidget::setTabOrder(srcnodata, sample);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> QWidget::setTabOrder(sample, toolButton_sample);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> QWidget::setTabOrder(toolButton_sample, output);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> QWidget::setTabOrder(toolButton_output, f);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> QWidget::setTabOrder(f, polygon);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> QWidget::setTabOrder(polygon, rule);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> QWidget::setTabOrder(rule, bname);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> QWidget::setTabOrder(bname, cname);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> QWidget::setTabOrder(cname, nclass);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> QWidget::setTabOrder(nclass, toolButton_createTable);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> QWidget::setTabOrder(toolButton_createTable, threshold);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> QWidget::setTabOrder(threshold, pushButton_run);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> QWidget::setTabOrder(pushButton_run, pushButton_restore);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> QWidget::setTabOrder(pushButton_restore, tabWidget);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> QWidget::setTabOrder(tabWidget, tableView_labels);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> QWidget::setTabOrder(tableView_labels, commandLineEdit);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> menuFile->addAction(actionSample);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkextract_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> actionSample->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Sample"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>invalid value(s) for input image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"srcnodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Band(s) in input image to check if pixel is valid (used for srcnodata)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"bndnodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"></span> label_16->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR supported vector format</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"></span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output will contain sample features with input band information included</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Raster input dataset containing band information</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"></span> label_23->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR vector file with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset.</p> [...]
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"></span> label_23->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Sample image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> toolButton_sample->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span> polygon->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Keep output features as polygons (only if input vector are polygons as well)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"></span> polygon->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"polygons"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Prepare a table with class names. To prepare the table, first enter the number of classes and then press the button '->'. </p><p>Prepare a class table only in [...]
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table "</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Rule how to extract the features from the input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"extraction rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"# classes"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"></span> toolButton_createTable->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Prepare a table with class names. To prepare the table, first enter the number of classes and then press the button '->'. </p><p>Prepare a class [...]
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"></span> toolButton_createTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"->"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>For single band input data, this extra attribute name will correspond to the raster values. For multi-band input data, multiple attributes with this prefix will be added (e.g. B0, B1, B2 [...]
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute (prefix) name for raster info"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Threshold value for selection process. Select this percentage of the raster pixels (if sample is a raster dataset) or this percentage of the features in the vector file (if sample is a vec [...]
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Single threshold"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute for class output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class name-threshold (%) pairs"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"replace label names with\n"</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="stringliteral">" the labels in your training\n"</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="stringliteral">" vector file"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extract"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> };</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp_source.html b/doc/html/build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..cc78d56
--- /dev/null
+++ b/doc/html/build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_41d189c72498e24f979b227eb8e138b1.html">build-pkextract_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pkextract_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 9, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 67, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 95, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 125, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 156, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 187, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 215, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 251, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">"on_actionSample_triggered()\0"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"on_toolButton_sample_clicked()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_toolButton_createTable_clicked()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">case</span> 1: _t->on_actionSample_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">case</span> 2: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">case</span> 3: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_sample_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">case</span> 6: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_createTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">case</span> 8: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> };</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> };</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (_id < 9)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> _id -= 9;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pkextract__gui-gcc-Release_2ui__mainwindow_8h_source.html b/doc/html/build-pkextract__gui-gcc-Release_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..8363e7d
--- /dev/null
+++ b/doc/html/build-pkextract__gui-gcc-Release_2ui__mainwindow_8h_source.html
@@ -0,0 +1,590 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_41d189c72498e24f979b227eb8e138b1.html">build-pkextract_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QCheckBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionSample;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QGridLayout *gridLayout_5;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QHBoxLayout *horizontalLayout_3;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QHBoxLayout *horizontalLayout_4;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_14;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QLineEdit *bndnodata;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label_13;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QLineEdit *output;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *input;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QComboBox *f;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLabel *label_16;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QLabel *label_15;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_3;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *sample;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QLabel *label_23;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QLineEdit *srcnodata;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QToolButton *toolButton_sample;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QCheckBox *polygon;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QHBoxLayout *horizontalLayout_5;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QGridLayout *gridLayout_4;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLineEdit *bname;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_20;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QComboBox *rule;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QLabel *label_4;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QLabel *label_21;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QToolButton *toolButton_createTable;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLabel *label_2;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLabel *label;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QLineEdit *threshold;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QLabel *label_5;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *cname;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_17;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QLabel *label_22;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QHBoxLayout *horizontalLayout_6;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QLabel *label_18;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLabel *label_19;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> MainWindow->resize(703, 706);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> actionSample = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> actionSample->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionSample"</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> centralWidget->setMinimumSize(QSize(423, 392));</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> gridLayout_5 = <span class="keyword">new</span> QGridLayout(centralWidget);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> gridLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> gridLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> gridLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_5"</span>));</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> horizontalLayout_3 = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> horizontalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> horizontalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_3"</span>));</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> horizontalLayout_4 = <span class="keyword">new</span> QHBoxLayout(tab_2);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> horizontalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> horizontalLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> horizontalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_4"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> label_14 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> gridLayout->addWidget(label_14, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> bndnodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> bndnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"bndnodata"</span>));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> gridLayout->addWidget(bndnodata, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> label_13 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> gridLayout->addWidget(label_13, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> output = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> gridLayout->addWidget(output, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> input = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> gridLayout->addWidget(input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> gridLayout->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> f = <span class="keyword">new</span> QComboBox(tab_2);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> f->setObjectName(QString::fromUtf8(<span class="stringliteral">"f"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> gridLayout->addWidget(f, 3, 4, 1, 1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> label_16 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> gridLayout->addWidget(label_16, 3, 3, 1, 1);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> gridLayout->addWidget(label_15, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> label_3 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> gridLayout->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> sample = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> sample->setObjectName(QString::fromUtf8(<span class="stringliteral">"sample"</span>));</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> gridLayout->addWidget(sample, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> label_23 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> label_23->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_23"</span>));</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> gridLayout->addWidget(label_23, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> srcnodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> srcnodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"srcnodata"</span>));</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> gridLayout->addWidget(srcnodata, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> gridLayout->addWidget(toolButton_output, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> toolButton_sample = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> toolButton_sample->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_sample"</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> gridLayout->addWidget(toolButton_sample, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> polygon = <span class="keyword">new</span> QCheckBox(tab_2);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> polygon->setObjectName(QString::fromUtf8(<span class="stringliteral">"polygon"</span>));</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gridLayout->addWidget(polygon, 4, 3, 1, 1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> horizontalLayout_4->addLayout(gridLayout);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> horizontalLayout_5 = <span class="keyword">new</span> QHBoxLayout(tab);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> horizontalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> horizontalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> horizontalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_5"</span>));</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gridLayout_4 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> gridLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> gridLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_4"</span>));</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> bname = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> bname->setObjectName(QString::fromUtf8(<span class="stringliteral">"bname"</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> gridLayout_4->addWidget(bname, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> label_20 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> gridLayout_4->addWidget(label_20, 4, 0, 1, 1);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> rule = <span class="keyword">new</span> QComboBox(tab);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> rule->setObjectName(QString::fromUtf8(<span class="stringliteral">"rule"</span>));</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> gridLayout_4->addWidget(rule, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> gridLayout_4->addWidget(label_4, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> nclass = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> sizePolicy.setHorizontalStretch(10);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> sizePolicy.setVerticalStretch(0);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> sizePolicy.setHeightForWidth(nclass->sizePolicy().hasHeightForWidth());</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> nclass->setSizePolicy(sizePolicy);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> gridLayout_4->addWidget(nclass, 4, 1, 1, 1);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> label_21 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> gridLayout_4->addWidget(label_21, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> toolButton_createTable = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> toolButton_createTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_createTable"</span>));</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> gridLayout_4->addWidget(toolButton_createTable, 4, 2, 1, 1);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> gridLayout_4->addWidget(label_2, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> label = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> gridLayout_4->addWidget(label, 5, 0, 1, 1);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> threshold = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> threshold->setObjectName(QString::fromUtf8(<span class="stringliteral">"threshold"</span>));</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> gridLayout_4->addWidget(threshold, 5, 1, 1, 1);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> gridLayout_4->addItem(verticalSpacer_2, 6, 0, 1, 1);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> label_5 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> gridLayout_4->addWidget(label_5, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> cname = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> cname->setObjectName(QString::fromUtf8(<span class="stringliteral">"cname"</span>));</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> gridLayout_4->addWidget(cname, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> horizontalLayout_5->addLayout(gridLayout_4);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> label_17 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> verticalLayout_2->addWidget(label_17);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> tableView_labels = <span class="keyword">new</span> QTableView(tab);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> label_22 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> verticalLayout_2->addWidget(label_22, 0, Qt::AlignHCenter);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> horizontalLayout_5->addLayout(verticalLayout_2);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> horizontalLayout_6 = <span class="keyword">new</span> QHBoxLayout(tab_4);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> horizontalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> horizontalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> horizontalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout_6"</span>));</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> verticalLayout->addWidget(label_18);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> verticalLayout->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> verticalLayout->addWidget(label_19);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> verticalLayout->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> horizontalLayout_6->addLayout(verticalLayout);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> horizontalLayout_3->addWidget(tabWidget);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> gridLayout_5->addLayout(horizontalLayout_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> gridLayout_5->addLayout(horizontalLayout, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> menuBar->setGeometry(QRect(0, 0, 703, 25));</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> QWidget::setTabOrder(toolButton_input, bndnodata);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> QWidget::setTabOrder(bndnodata, srcnodata);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> QWidget::setTabOrder(srcnodata, sample);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> QWidget::setTabOrder(sample, toolButton_sample);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> QWidget::setTabOrder(toolButton_sample, output);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> QWidget::setTabOrder(toolButton_output, f);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> QWidget::setTabOrder(f, polygon);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> QWidget::setTabOrder(polygon, rule);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> QWidget::setTabOrder(rule, bname);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> QWidget::setTabOrder(bname, cname);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> QWidget::setTabOrder(cname, nclass);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> QWidget::setTabOrder(nclass, toolButton_createTable);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> QWidget::setTabOrder(toolButton_createTable, threshold);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> QWidget::setTabOrder(threshold, pushButton_run);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> QWidget::setTabOrder(pushButton_run, pushButton_restore);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> QWidget::setTabOrder(pushButton_restore, tabWidget);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> QWidget::setTabOrder(tabWidget, tableView_labels);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> QWidget::setTabOrder(tableView_labels, commandLineEdit);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> menuFile->addAction(actionSample);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pkextract_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> actionSample->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Sample"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"></span> label_14->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>invalid value(s) for input image</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"></span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"srcnodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Band(s) in input image to check if pixel is valid (used for srcnodata)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"bndnodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"></span> label_16->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR supported vector format</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"></span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"format"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output will contain sample features with input band information included</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Raster input dataset containing band information</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"></span> label_23->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR vector file with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset.</p> [...]
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"></span> label_23->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Sample image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> toolButton_sample->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span> polygon->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Keep output features as polygons (only if input vector are polygons as well)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"></span> polygon->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"polygons"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Prepare a table with class names. To prepare the table, first enter the number of classes and then press the button '->'. </p><p>Prepare a class table only in [...]
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table "</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Rule how to extract the features from the input data</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"extraction rule"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"# classes"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"></span> toolButton_createTable->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Prepare a table with class names. To prepare the table, first enter the number of classes and then press the button '->'. </p><p>Prepare a class [...]
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"></span> toolButton_createTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"->"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>For single band input data, this extra attribute name will correspond to the raster values. For multi-band input data, multiple attributes with this prefix will be added (e.g. B0, B1, B2 [...]
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute (prefix) name for raster info"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"></span> label->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Threshold value for selection process. Select this percentage of the raster pixels (if sample is a raster dataset) or this percentage of the features in the vector file (if sample is a vec [...]
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"></span> label->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Single threshold"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute for class output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class name-threshold (%) pairs"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"replace label names with\n"</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="stringliteral">" the labels in your training\n"</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="stringliteral">" vector file"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Extract"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> };</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html b/doc/html/build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..5075183
--- /dev/null
+++ b/doc/html/build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html">build-pksvm_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pksvm_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 14, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 69, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 95, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 123, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 153, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 182, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 213, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 246, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 274, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 302, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 334, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 377, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 410, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_actionTraining_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_actionMask_triggered()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_mask_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_training_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_training_returnPressed()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"on_commandLinkButtonPrepareTable_clicked()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">"on_actionColor_table_triggered()\0"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> };</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 1: _t->on_actionTraining_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 2: _t->on_actionMask_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_mask_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_training_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 8: _t->on_training_returnPressed(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 9: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 10: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> 11: _t->on_commandLinkButtonPrepareTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">case</span> 12: _t->on_actionColor_table_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">case</span> 13: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> };</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (_id < 14)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> _id -= 14;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h_source.html b/doc/html/build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..858eaf0
--- /dev/null
+++ b/doc/html/build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h_source.html
@@ -0,0 +1,740 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html">build-pksvm_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QCommandLinkButton></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionTraining;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionColor_table;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_2;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_training;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label_4;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *training;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QLabel *label_20;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLineEdit *label;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_21;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *tln;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QCommandLinkButton *commandLinkButtonPrepareTable;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label_17;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_14;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QLabel *label_16;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLabel *label_13;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QToolButton *toolButton_mask;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLabel *label_15;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLineEdit *mask;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLineEdit *msknodata;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QSpacerItem *horizontalSpacer_15;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QLineEdit *output;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *input;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QLabel *label_3;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_22;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QSpacerItem *verticalSpacer;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *cv;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLineEdit *ccost;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QLabel *label_5;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QLabel *label_10;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QLabel *label_11;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QLabel *label_6;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QComboBox *svmtype;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QLineEdit *gamma;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QLabel *label_7;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QLineEdit *coef0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QLabel *label_9;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLineEdit *nu;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLineEdit *kd;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QLabel *label_12;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QComboBox *kerneltype;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLabel *label_8;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QVBoxLayout *verticalLayout_6;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_18;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QLabel *label_19;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> MainWindow->resize(628, 614);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> actionTraining = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> actionTraining->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionTraining"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> actionColor_table = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> actionColor_table->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionColor_table"</span>));</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> gridLayout->addWidget(label_2, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> toolButton_training = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> toolButton_training->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_training"</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> gridLayout->addWidget(toolButton_training, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> gridLayout->addWidget(label_4, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> gridLayout->addItem(horizontalSpacer_4, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> training = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> training->setObjectName(QString::fromUtf8(<span class="stringliteral">"training"</span>));</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> gridLayout->addWidget(training, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> nclass = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> gridLayout->addWidget(nclass, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> label_20 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> gridLayout->addWidget(label_20, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> label = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> gridLayout->addWidget(label, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> gridLayout->addItem(horizontalSpacer_3, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> label_21 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> gridLayout->addWidget(label_21, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> tln = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> tln->setObjectName(QString::fromUtf8(<span class="stringliteral">"tln"</span>));</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> gridLayout->addWidget(tln, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> gridLayout->addItem(horizontalSpacer_2, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> commandLinkButtonPrepareTable = <span class="keyword">new</span> QCommandLinkButton(tab);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> commandLinkButtonPrepareTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLinkButtonPrepareTable"</span>));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> verticalLayout_3->addWidget(commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> label_17 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> verticalLayout_2->addWidget(label_17);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> tableView_labels = <span class="keyword">new</span> QTableView(tab);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> verticalLayout_3->addLayout(verticalLayout_2);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout(tab_2);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> verticalLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> nodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gridLayout_2->addWidget(nodata, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> label_14 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_2->addWidget(label_14, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> gridLayout_2->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> label_16 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> gridLayout_2->addWidget(label_16, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> label_13 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> gridLayout_2->addWidget(label_13, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> toolButton_mask = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> toolButton_mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_mask"</span>));</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> gridLayout_2->addWidget(toolButton_mask, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> gridLayout_2->addWidget(label_15, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> mask = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"mask"</span>));</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_2->addWidget(mask, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> msknodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> msknodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"msknodata"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_2->addWidget(msknodata, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> horizontalSpacer_15 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> gridLayout_2->addItem(horizontalSpacer_15, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> output = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> gridLayout_2->addWidget(output, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> gridLayout_2->addWidget(toolButton_output, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> input = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> gridLayout_2->addWidget(input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> label_3 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> gridLayout_2->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> label_22 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> gridLayout_2->addWidget(label_22, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> ct = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> gridLayout_2->addWidget(ct, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> gridLayout_2->addWidget(toolButton_ct, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> verticalLayout_4->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> verticalSpacer = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> verticalLayout_4->addItem(verticalSpacer);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> cv = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> cv->setObjectName(QString::fromUtf8(<span class="stringliteral">"cv"</span>));</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> gridLayout_3->addWidget(cv, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> ccost = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> ccost->setObjectName(QString::fromUtf8(<span class="stringliteral">"ccost"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> gridLayout_3->addWidget(ccost, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> gridLayout_3->addWidget(label_5, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> label_10 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> gridLayout_3->addWidget(label_10, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> label_11 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> gridLayout_3->addWidget(label_11, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> gridLayout_3->addWidget(label_6, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> svmtype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> svmtype->setObjectName(QString::fromUtf8(<span class="stringliteral">"svmtype"</span>));</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> gridLayout_3->addWidget(svmtype, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> gamma = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> gamma->setObjectName(QString::fromUtf8(<span class="stringliteral">"gamma"</span>));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> gridLayout_3->addWidget(gamma, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> gridLayout_3->addWidget(label_7, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> coef0 = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> coef0->setObjectName(QString::fromUtf8(<span class="stringliteral">"coef0"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> gridLayout_3->addWidget(coef0, 0, 4, 1, 1);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> label_9 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> gridLayout_3->addWidget(label_9, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> nu = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> nu->setObjectName(QString::fromUtf8(<span class="stringliteral">"nu"</span>));</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> gridLayout_3->addWidget(nu, 0, 7, 1, 1);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> kd = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> kd->setObjectName(QString::fromUtf8(<span class="stringliteral">"kd"</span>));</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> gridLayout_3->addWidget(kd, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> gridLayout_3->addWidget(label_12, 0, 6, 1, 1);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout_3->addItem(verticalSpacer_3, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> kerneltype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> kerneltype->setObjectName(QString::fromUtf8(<span class="stringliteral">"kerneltype"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout_3->addWidget(kerneltype, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout_3->addWidget(label_8, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> gridLayout_3->addItem(horizontalSpacer_5, 0, 5, 1, 1);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> verticalLayout_5->addLayout(gridLayout_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> verticalLayout_5->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> verticalLayout_6 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> verticalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> verticalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> verticalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_6"</span>));</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> verticalLayout_6->addWidget(label_18);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> verticalLayout_6->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> verticalLayout_6->addWidget(label_19);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> verticalLayout_6->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> verticalLayout->addLayout(horizontalLayout);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> menuBar->setGeometry(QRect(0, 0, 628, 25));</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> QWidget::setTabOrder(tabWidget, training);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> QWidget::setTabOrder(training, toolButton_training);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> QWidget::setTabOrder(toolButton_training, tln);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> QWidget::setTabOrder(tln, label);</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> QWidget::setTabOrder(label, nclass);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> QWidget::setTabOrder(nclass, input);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> QWidget::setTabOrder(toolButton_input, mask);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> QWidget::setTabOrder(mask, toolButton_mask);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> QWidget::setTabOrder(toolButton_mask, msknodata);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> QWidget::setTabOrder(msknodata, output);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> QWidget::setTabOrder(toolButton_output, nodata);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> QWidget::setTabOrder(nodata, ct);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> QWidget::setTabOrder(toolButton_ct, svmtype);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> QWidget::setTabOrder(svmtype, coef0);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> QWidget::setTabOrder(coef0, nu);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> QWidget::setTabOrder(nu, kerneltype);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> QWidget::setTabOrder(kerneltype, kd);</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> QWidget::setTabOrder(kd, gamma);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> QWidget::setTabOrder(gamma, ccost);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> QWidget::setTabOrder(ccost, cv);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> QWidget::setTabOrder(cv, commandLineEdit);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> QWidget::setTabOrder(consoleEdit, tableView_labels);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> QWidget::setTabOrder(tableView_labels, commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> QWidget::setTabOrder(commandLinkButtonPrepareTable, pushButton_run);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> QWidget::setTabOrder(pushButton_run, pushButton_restore);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> menuFile->addAction(actionTraining);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> menuFile->addAction(actionColor_table);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pksvm_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> actionTraining->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> actionTraining->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+T"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> actionMask->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+M"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> actionColor_table->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> actionColor_table->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+C"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Attribute name of the class label in the training vector file (default is label)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute name for class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> toolButton_training->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR supported vector file. Features must contain labels and band information. You can use pkextract to prepare training vector files</p></body></html>"</span>, 0, [...]
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training vectorfile"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide number of classes in training file here to prepare class name-value pairs (push button prepare table). This is mandatory if labels in training vector are provided as text (inste [...]
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"number of classes to prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span> label_21->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Name of the training layer (optional). If not provided, all layers will be read per default.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"></span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training layername (optional)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> commandLinkButtonPrepareTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class name-value pairs"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"msknodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Dimensions of mask image must correspond to input image. Pixels in mask with values=masknodata are not classified and get nodata value.</p></body></html>"</span>, [...]
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> toolButton_mask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output image (classified map). Can be OGR vector or GDAL raster, depending on input data.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image. Both OGR vectors and GDAL rasters are supported. Number of bands must match those in training sample.</p></body></html>"</span>, 0, QApplication::Unic [...]
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"></span> label_22->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha<br/></p></body></html>"</s [...]
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"></span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Leave empty to skip cross validation. Enter 2 for a two-fold cross validation</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"n-fold cross validation"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"></span> label_10->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>the parameter C of C_SVC, epsilon_SVR, and nu_SVR (default is 1)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"CCost"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"></span> label_11->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Coef0 in the kernel function (default is 0)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"></span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Coef 0"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"></span> label_6->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Type of the support vector machine</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"></span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"SVM type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"></span> label_7->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>type of kernel function (default is radial)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Kernel type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>gamma in kernel function (default is 0)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Gamma"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"></span> label_12->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>the parameter nu of nu_SVC, one_class SVM, and nu_SVR (default is 0.5)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nu"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>degree in kernel function (default is 3)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Kernel degree"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Classifier"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"></span> pushButton_run->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Classify with current settings (check Console for output)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"></span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span> pushButton_restore->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>reset all parameters to default</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"></span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> };</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp_source.html b/doc/html/build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
new file mode 100644
index 0000000..20e803e
--- /dev/null
+++ b/doc/html/build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp_source.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release/moc_mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ed1df9621940d6aa1183c365ad1750d2.html">build-pksvm_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">moc_mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Meta object code from reading C++ file 'mainwindow.h'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*****************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../pksvm_gui/mainwindow.h"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if !defined(Q_MOC_OUTPUT_REVISION)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span><span class="preprocessor">#error "The header file 'mainwindow.h' doesn't include <QObject>."</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"></span><span class="preprocessor">#elif Q_MOC_OUTPUT_REVISION != 63</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#error "This file was generated using the moc from 4.8.6. It"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span><span class="preprocessor">#error "cannot be used with the include files from this version of Qt."</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span><span class="preprocessor">#error "(The moc has changed too much.)"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> QT_BEGIN_MOC_NAMESPACE</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keyword">const</span> uint qt_meta_data_MainWindow[] = {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// content:</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> 6, <span class="comment">// revision</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> 0, <span class="comment">// classname</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 0, 0, <span class="comment">// classinfo</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 14, 14, <span class="comment">// methods</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> 0, 0, <span class="comment">// properties</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> 0, 0, <span class="comment">// enums/sets</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> 0, 0, <span class="comment">// constructors</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> 0, <span class="comment">// signalCount</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// slots: signature, parameters, type, tag, flags</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> 12, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 39, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> 69, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> 95, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> 123, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> 153, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> 182, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> 213, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 246, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> 274, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> 302, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> 334, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> 377, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 410, 11, 11, 11, 0x08,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> 0 <span class="comment">// eod</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> qt_meta_stringdata_MainWindow[] = {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">"MainWindow\0\0on_actionInput_triggered()\0"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">"on_actionTraining_triggered()\0"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">"on_actionMask_triggered()\0"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">"on_actionOutput_triggered()\0"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">"on_toolButton_input_clicked()\0"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">"on_toolButton_mask_clicked()\0"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"on_toolButton_output_clicked()\0"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">"on_toolButton_training_clicked()\0"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">"on_training_returnPressed()\0"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">"on_pushButton_run_clicked()\0"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">"on_pushButton_restore_clicked()\0"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"on_commandLinkButtonPrepareTable_clicked()\0"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">"on_actionColor_table_triggered()\0"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">"on_toolButton_ct_clicked()\0"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> };</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> Q_ASSERT(staticMetaObject.cast(_o));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classMainWindow.html">MainWindow</a> *_t = <span class="keyword">static_cast<</span><a class="code" href="classMainWindow.html">MainWindow</a> *<span class="keyword">></span>(_o);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">switch</span> (_id) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 0: _t->on_actionInput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 1: _t->on_actionTraining_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 2: _t->on_actionMask_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 3: _t->on_actionOutput_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 4: _t->on_toolButton_input_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 5: _t->on_toolButton_mask_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 6: _t->on_toolButton_output_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 7: _t->on_toolButton_training_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 8: _t->on_training_returnPressed(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 9: _t->on_pushButton_run_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 10: _t->on_pushButton_restore_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> 11: _t->on_commandLinkButtonPrepareTable_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">case</span> 12: _t->on_actionColor_table_triggered(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">case</span> 13: _t->on_toolButton_ct_clicked(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">default</span>: ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> Q_UNUSED(_a);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> 0, qt_static_metacall </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> QMetaObject MainWindow::staticMetaObject = {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> qt_meta_data_MainWindow, &staticMetaObjectExtraData }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> };</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#ifdef Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"></span><span class="keyword">const</span> QMetaObject &MainWindow::getStaticMetaObject() { <span class="keywordflow">return</span> staticMetaObject; }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#endif //Q_NO_DATA_RELOCATION</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">const</span> QMetaObject *MainWindow::metaObject()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> *MainWindow::qt_metacast(<span class="keyword">const</span> <span class="keywordtype">char</span> *_clname)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (!_clname) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!strcmp(_clname, qt_meta_stringdata_MainWindow))</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">void</span>*<span class="keyword">></span>(<span class="keyword">const_cast<</span> <a class="code" href="classMainWindow.html">MainWindow</a>*<span class="keyword">></span>(<span class="keyword">this</span>));</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> QMainWindow::qt_metacast(_clname);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">int</span> MainWindow::qt_metacall(QMetaObject::Call _c, <span class="keywordtype">int</span> _id, <span class="keywordtype">void</span> **_a)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> _id = QMainWindow::qt_metacall(_c, _id, _a);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (_id < 0)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (_c == QMetaObject::InvokeMetaMethod) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (_id < 14)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> qt_static_metacall(<span class="keyword">this</span>, _c, _id, _a);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> _id -= 14;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QT_END_MOC_NAMESPACE</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/build-pksvm__gui-gcc-Release_2ui__mainwindow_8h_source.html b/doc/html/build-pksvm__gui-gcc-Release_2ui__mainwindow_8h_source.html
new file mode 100644
index 0000000..8e6e894
--- /dev/null
+++ b/doc/html/build-pksvm__gui-gcc-Release_2ui__mainwindow_8h_source.html
@@ -0,0 +1,740 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release/ui_mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ed1df9621940d6aa1183c365ad1750d2.html">build-pksvm_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ui_mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/********************************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** Form generated from reading UI file 'mainwindow.ui'</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">** Created by: Qt User Interface Compiler version 4.8.6</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">**</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">** WARNING! All changes made in this file will be lost when recompiling UI file!</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">********************************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifndef UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"></span><span class="preprocessor">#define UI_MAINWINDOW_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <QtCore/QVariant></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <QtGui/QAction></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <QtGui/QApplication></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <QtGui/QButtonGroup></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <QtGui/QComboBox></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <QtGui/QCommandLinkButton></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <QtGui/QGridLayout></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <QtGui/QHBoxLayout></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <QtGui/QHeaderView></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QtGui/QLabel></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QtGui/QLineEdit></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QtGui/QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QtGui/QMenu></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QtGui/QMenuBar></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QtGui/QPlainTextEdit></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QtGui/QPushButton></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <QtGui/QSpacerItem></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <QtGui/QStatusBar></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <QtGui/QTabWidget></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <QtGui/QTableView></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <QtGui/QToolBar></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <QtGui/QToolButton></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <QtGui/QVBoxLayout></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <QtGui/QWidget></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> QT_BEGIN_NAMESPACE</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span><a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QAction *actionInput;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QAction *actionTraining;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> QAction *actionMask;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QAction *actionOutput;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> QAction *actionColor_table;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> QWidget *centralWidget;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QVBoxLayout *verticalLayout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> QTabWidget *tabWidget;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QWidget *tab;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> QVBoxLayout *verticalLayout_3;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> QGridLayout *gridLayout;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> QLabel *label_2;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QToolButton *toolButton_training;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QLabel *label_4;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QSpacerItem *horizontalSpacer_4;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QLineEdit *training;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QLineEdit *nclass;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> QLabel *label_20;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> QLineEdit *label;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QSpacerItem *horizontalSpacer_3;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QLabel *label_21;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> QLineEdit *tln;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> QSpacerItem *horizontalSpacer_2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> QCommandLinkButton *commandLinkButtonPrepareTable;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> QVBoxLayout *verticalLayout_2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QLabel *label_17;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> QTableView *tableView_labels;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> QWidget *tab_2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> QVBoxLayout *verticalLayout_4;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> QGridLayout *gridLayout_2;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> QLineEdit *nodata;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QLabel *label_14;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> QToolButton *toolButton_input;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> QLabel *label_16;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> QLabel *label_13;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QToolButton *toolButton_mask;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> QLabel *label_15;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> QLineEdit *mask;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> QLineEdit *msknodata;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> QSpacerItem *horizontalSpacer_15;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> QLineEdit *output;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QToolButton *toolButton_output;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QLineEdit *input;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> QLabel *label_3;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> QLabel *label_22;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QLineEdit *ct;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> QToolButton *toolButton_ct;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QSpacerItem *verticalSpacer;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QWidget *tab_3;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> QVBoxLayout *verticalLayout_5;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> QGridLayout *gridLayout_3;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> QLineEdit *cv;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> QLineEdit *ccost;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> QLabel *label_5;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QLabel *label_10;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> QLabel *label_11;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> QLabel *label_6;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QComboBox *svmtype;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> QLineEdit *gamma;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QLabel *label_7;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> QLineEdit *coef0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QLabel *label_9;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> QLineEdit *nu;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QLineEdit *kd;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> QLabel *label_12;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> QSpacerItem *verticalSpacer_3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> QComboBox *kerneltype;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> QLabel *label_8;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> QSpacerItem *horizontalSpacer_5;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> QSpacerItem *verticalSpacer_2;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QWidget *tab_4;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> QVBoxLayout *verticalLayout_6;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> QLabel *label_18;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> QLineEdit *commandLineEdit;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QLabel *label_19;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> QPlainTextEdit *consoleEdit;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> QHBoxLayout *horizontalLayout;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QPushButton *pushButton_run;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QSpacerItem *horizontalSpacer;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> QPushButton *pushButton_restore;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> QMenuBar *menuBar;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QMenu *menuFile;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> QToolBar *mainToolBar;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> QStatusBar *statusBar;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> setupUi(QMainWindow *<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (MainWindow->objectName().isEmpty())</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> MainWindow->setObjectName(QString::fromUtf8(<span class="stringliteral">"MainWindow"</span>));</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> MainWindow->resize(628, 614);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> actionInput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> actionInput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionInput"</span>));</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> actionTraining = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> actionTraining->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionTraining"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> actionMask = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> actionMask->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionMask"</span>));</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> actionOutput = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> actionOutput->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionOutput"</span>));</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> actionColor_table = <span class="keyword">new</span> QAction(MainWindow);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> actionColor_table->setObjectName(QString::fromUtf8(<span class="stringliteral">"actionColor_table"</span>));</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> centralWidget = <span class="keyword">new</span> QWidget(MainWindow);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> centralWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"centralWidget"</span>));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> verticalLayout = <span class="keyword">new</span> QVBoxLayout(centralWidget);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> verticalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> verticalLayout->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> verticalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout"</span>));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> tabWidget = <span class="keyword">new</span> QTabWidget(centralWidget);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> tabWidget->setObjectName(QString::fromUtf8(<span class="stringliteral">"tabWidget"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> tab = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> tab->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab"</span>));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> verticalLayout_3 = <span class="keyword">new</span> QVBoxLayout(tab);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> verticalLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> verticalLayout_3->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> verticalLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_3"</span>));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> gridLayout = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> gridLayout->setSpacing(6);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> gridLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> label_2 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> label_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_2"</span>));</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> gridLayout->addWidget(label_2, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> toolButton_training = <span class="keyword">new</span> QToolButton(tab);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> toolButton_training->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_training"</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> gridLayout->addWidget(toolButton_training, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> label_4 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> label_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_4"</span>));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> gridLayout->addWidget(label_4, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> horizontalSpacer_4 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> gridLayout->addItem(horizontalSpacer_4, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> training = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> training->setObjectName(QString::fromUtf8(<span class="stringliteral">"training"</span>));</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> gridLayout->addWidget(training, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> nclass = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> nclass->setObjectName(QString::fromUtf8(<span class="stringliteral">"nclass"</span>));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> gridLayout->addWidget(nclass, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> label_20 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> label_20->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_20"</span>));</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> gridLayout->addWidget(label_20, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> label = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> label->setObjectName(QString::fromUtf8(<span class="stringliteral">"label"</span>));</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> gridLayout->addWidget(label, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> horizontalSpacer_3 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> gridLayout->addItem(horizontalSpacer_3, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> label_21 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> label_21->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_21"</span>));</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> gridLayout->addWidget(label_21, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> tln = <span class="keyword">new</span> QLineEdit(tab);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> tln->setObjectName(QString::fromUtf8(<span class="stringliteral">"tln"</span>));</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> gridLayout->addWidget(tln, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> horizontalSpacer_2 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> gridLayout->addItem(horizontalSpacer_2, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> verticalLayout_3->addLayout(gridLayout);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> commandLinkButtonPrepareTable = <span class="keyword">new</span> QCommandLinkButton(tab);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> commandLinkButtonPrepareTable->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLinkButtonPrepareTable"</span>));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> verticalLayout_3->addWidget(commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> verticalLayout_2 = <span class="keyword">new</span> QVBoxLayout();</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> verticalLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> verticalLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_2"</span>));</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> label_17 = <span class="keyword">new</span> QLabel(tab);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> label_17->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_17"</span>));</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> verticalLayout_2->addWidget(label_17);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> tableView_labels = <span class="keyword">new</span> QTableView(tab);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> tableView_labels->setObjectName(QString::fromUtf8(<span class="stringliteral">"tableView_labels"</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> verticalLayout_2->addWidget(tableView_labels);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> verticalLayout_3->addLayout(verticalLayout_2);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> tabWidget->addTab(tab, QString());</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> tab_2 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> tab_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_2"</span>));</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> verticalLayout_4 = <span class="keyword">new</span> QVBoxLayout(tab_2);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> verticalLayout_4->setSpacing(6);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> verticalLayout_4->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> verticalLayout_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_4"</span>));</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> gridLayout_2 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> gridLayout_2->setSpacing(6);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> gridLayout_2->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_2"</span>));</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> nodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> nodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"nodata"</span>));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gridLayout_2->addWidget(nodata, 2, 5, 1, 1);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> label_14 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> label_14->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_14"</span>));</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridLayout_2->addWidget(label_14, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> toolButton_input = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> toolButton_input->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_input"</span>));</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> gridLayout_2->addWidget(toolButton_input, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> label_16 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> label_16->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_16"</span>));</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> gridLayout_2->addWidget(label_16, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> label_13 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> label_13->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_13"</span>));</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> gridLayout_2->addWidget(label_13, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> toolButton_mask = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> toolButton_mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_mask"</span>));</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> gridLayout_2->addWidget(toolButton_mask, 1, 2, 1, 1);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> label_15 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> label_15->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_15"</span>));</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> gridLayout_2->addWidget(label_15, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> mask = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> mask->setObjectName(QString::fromUtf8(<span class="stringliteral">"mask"</span>));</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gridLayout_2->addWidget(mask, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> msknodata = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> msknodata->setObjectName(QString::fromUtf8(<span class="stringliteral">"msknodata"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> gridLayout_2->addWidget(msknodata, 1, 5, 1, 1);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> horizontalSpacer_15 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> gridLayout_2->addItem(horizontalSpacer_15, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> output = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> output->setObjectName(QString::fromUtf8(<span class="stringliteral">"output"</span>));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> gridLayout_2->addWidget(output, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> toolButton_output = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> toolButton_output->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_output"</span>));</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> gridLayout_2->addWidget(toolButton_output, 2, 2, 1, 1);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> input = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> input->setObjectName(QString::fromUtf8(<span class="stringliteral">"input"</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> gridLayout_2->addWidget(input, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> label_3 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> label_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_3"</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> gridLayout_2->addWidget(label_3, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> label_22 = <span class="keyword">new</span> QLabel(tab_2);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> label_22->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_22"</span>));</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> gridLayout_2->addWidget(label_22, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> ct = <span class="keyword">new</span> QLineEdit(tab_2);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"ct"</span>));</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> gridLayout_2->addWidget(ct, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> toolButton_ct = <span class="keyword">new</span> QToolButton(tab_2);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> toolButton_ct->setObjectName(QString::fromUtf8(<span class="stringliteral">"toolButton_ct"</span>));</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> gridLayout_2->addWidget(toolButton_ct, 3, 2, 1, 1);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> verticalLayout_4->addLayout(gridLayout_2);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> verticalSpacer = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> verticalLayout_4->addItem(verticalSpacer);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> tabWidget->addTab(tab_2, QString());</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> tab_3 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> tab_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_3"</span>));</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> verticalLayout_5 = <span class="keyword">new</span> QVBoxLayout(tab_3);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> verticalLayout_5->setSpacing(6);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> verticalLayout_5->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> verticalLayout_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_5"</span>));</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> gridLayout_3 = <span class="keyword">new</span> QGridLayout();</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> gridLayout_3->setSpacing(6);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> gridLayout_3->setObjectName(QString::fromUtf8(<span class="stringliteral">"gridLayout_3"</span>));</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> cv = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> cv->setObjectName(QString::fromUtf8(<span class="stringliteral">"cv"</span>));</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> gridLayout_3->addWidget(cv, 3, 1, 1, 1);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> ccost = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> ccost->setObjectName(QString::fromUtf8(<span class="stringliteral">"ccost"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> gridLayout_3->addWidget(ccost, 2, 4, 1, 1);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> label_5 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> label_5->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_5"</span>));</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> gridLayout_3->addWidget(label_5, 3, 0, 1, 1);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> label_10 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> label_10->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_10"</span>));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> gridLayout_3->addWidget(label_10, 2, 3, 1, 1);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> label_11 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> label_11->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_11"</span>));</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> gridLayout_3->addWidget(label_11, 0, 3, 1, 1);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> label_6 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> label_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_6"</span>));</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> gridLayout_3->addWidget(label_6, 0, 0, 1, 1);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> svmtype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> svmtype->setObjectName(QString::fromUtf8(<span class="stringliteral">"svmtype"</span>));</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> gridLayout_3->addWidget(svmtype, 0, 1, 1, 1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> gamma = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> gamma->setObjectName(QString::fromUtf8(<span class="stringliteral">"gamma"</span>));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> gridLayout_3->addWidget(gamma, 2, 1, 1, 1);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> label_7 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> label_7->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_7"</span>));</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> gridLayout_3->addWidget(label_7, 1, 0, 1, 1);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> coef0 = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> coef0->setObjectName(QString::fromUtf8(<span class="stringliteral">"coef0"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> gridLayout_3->addWidget(coef0, 0, 4, 1, 1);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> label_9 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> label_9->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_9"</span>));</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> gridLayout_3->addWidget(label_9, 2, 0, 1, 1);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> nu = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> nu->setObjectName(QString::fromUtf8(<span class="stringliteral">"nu"</span>));</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> gridLayout_3->addWidget(nu, 0, 7, 1, 1);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> kd = <span class="keyword">new</span> QLineEdit(tab_3);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> kd->setObjectName(QString::fromUtf8(<span class="stringliteral">"kd"</span>));</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> gridLayout_3->addWidget(kd, 1, 4, 1, 1);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> label_12 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> label_12->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_12"</span>));</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> gridLayout_3->addWidget(label_12, 0, 6, 1, 1);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> verticalSpacer_3 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> gridLayout_3->addItem(verticalSpacer_3, 0, 2, 1, 1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> kerneltype = <span class="keyword">new</span> QComboBox(tab_3);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> kerneltype->setObjectName(QString::fromUtf8(<span class="stringliteral">"kerneltype"</span>));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> gridLayout_3->addWidget(kerneltype, 1, 1, 1, 1);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> label_8 = <span class="keyword">new</span> QLabel(tab_3);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> label_8->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_8"</span>));</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> gridLayout_3->addWidget(label_8, 1, 3, 1, 1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> horizontalSpacer_5 = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> gridLayout_3->addItem(horizontalSpacer_5, 0, 5, 1, 1);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> verticalLayout_5->addLayout(gridLayout_3);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> verticalSpacer_2 = <span class="keyword">new</span> QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> verticalLayout_5->addItem(verticalSpacer_2);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> tabWidget->addTab(tab_3, QString());</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> tab_4 = <span class="keyword">new</span> QWidget();</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> tab_4->setObjectName(QString::fromUtf8(<span class="stringliteral">"tab_4"</span>));</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> verticalLayout_6 = <span class="keyword">new</span> QVBoxLayout(tab_4);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> verticalLayout_6->setSpacing(6);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> verticalLayout_6->setContentsMargins(11, 11, 11, 11);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> verticalLayout_6->setObjectName(QString::fromUtf8(<span class="stringliteral">"verticalLayout_6"</span>));</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> label_18 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> label_18->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_18"</span>));</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> verticalLayout_6->addWidget(label_18);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> commandLineEdit = <span class="keyword">new</span> QLineEdit(tab_4);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> commandLineEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"commandLineEdit"</span>));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> verticalLayout_6->addWidget(commandLineEdit);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> label_19 = <span class="keyword">new</span> QLabel(tab_4);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> label_19->setObjectName(QString::fromUtf8(<span class="stringliteral">"label_19"</span>));</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> verticalLayout_6->addWidget(label_19);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> consoleEdit = <span class="keyword">new</span> QPlainTextEdit(tab_4);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> consoleEdit->setObjectName(QString::fromUtf8(<span class="stringliteral">"consoleEdit"</span>));</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> verticalLayout_6->addWidget(consoleEdit);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> tabWidget->addTab(tab_4, QString());</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> verticalLayout->addWidget(tabWidget);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> horizontalLayout = <span class="keyword">new</span> QHBoxLayout();</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> horizontalLayout->setSpacing(6);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> horizontalLayout->setObjectName(QString::fromUtf8(<span class="stringliteral">"horizontalLayout"</span>));</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> pushButton_run = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> pushButton_run->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_run"</span>));</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> horizontalLayout->addWidget(pushButton_run);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> horizontalSpacer = <span class="keyword">new</span> QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> horizontalLayout->addItem(horizontalSpacer);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> pushButton_restore = <span class="keyword">new</span> QPushButton(centralWidget);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> pushButton_restore->setObjectName(QString::fromUtf8(<span class="stringliteral">"pushButton_restore"</span>));</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> horizontalLayout->addWidget(pushButton_restore);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> verticalLayout->addLayout(horizontalLayout);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> MainWindow->setCentralWidget(centralWidget);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> menuBar = <span class="keyword">new</span> QMenuBar(MainWindow);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> menuBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuBar"</span>));</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> menuBar->setGeometry(QRect(0, 0, 628, 25));</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> menuFile = <span class="keyword">new</span> QMenu(menuBar);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> menuFile->setObjectName(QString::fromUtf8(<span class="stringliteral">"menuFile"</span>));</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> MainWindow->setMenuBar(menuBar);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> mainToolBar = <span class="keyword">new</span> QToolBar(MainWindow);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> mainToolBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"mainToolBar"</span>));</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> statusBar = <span class="keyword">new</span> QStatusBar(MainWindow);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> statusBar->setObjectName(QString::fromUtf8(<span class="stringliteral">"statusBar"</span>));</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> MainWindow->setStatusBar(statusBar);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> QWidget::setTabOrder(tabWidget, training);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> QWidget::setTabOrder(training, toolButton_training);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> QWidget::setTabOrder(toolButton_training, tln);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> QWidget::setTabOrder(tln, label);</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> QWidget::setTabOrder(label, nclass);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> QWidget::setTabOrder(nclass, input);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> QWidget::setTabOrder(input, toolButton_input);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> QWidget::setTabOrder(toolButton_input, mask);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> QWidget::setTabOrder(mask, toolButton_mask);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> QWidget::setTabOrder(toolButton_mask, msknodata);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> QWidget::setTabOrder(msknodata, output);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> QWidget::setTabOrder(output, toolButton_output);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> QWidget::setTabOrder(toolButton_output, nodata);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> QWidget::setTabOrder(nodata, ct);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> QWidget::setTabOrder(ct, toolButton_ct);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> QWidget::setTabOrder(toolButton_ct, svmtype);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> QWidget::setTabOrder(svmtype, coef0);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> QWidget::setTabOrder(coef0, nu);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> QWidget::setTabOrder(nu, kerneltype);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> QWidget::setTabOrder(kerneltype, kd);</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> QWidget::setTabOrder(kd, gamma);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> QWidget::setTabOrder(gamma, ccost);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> QWidget::setTabOrder(ccost, cv);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> QWidget::setTabOrder(cv, commandLineEdit);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> QWidget::setTabOrder(commandLineEdit, consoleEdit);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> QWidget::setTabOrder(consoleEdit, tableView_labels);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> QWidget::setTabOrder(tableView_labels, commandLinkButtonPrepareTable);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> QWidget::setTabOrder(commandLinkButtonPrepareTable, pushButton_run);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> QWidget::setTabOrder(pushButton_run, pushButton_restore);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> menuBar->addAction(menuFile->menuAction());</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> menuFile->addAction(actionInput);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> menuFile->addAction(actionTraining);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> menuFile->addAction(actionMask);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> menuFile->addAction(actionOutput);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> menuFile->addAction(actionColor_table);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> retranslateUi(MainWindow);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> tabWidget->setCurrentIndex(0);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> QMetaObject::connectSlotsByName(MainWindow);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> } <span class="comment">// setupUi</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">void</span> retranslateUi(QMainWindow *MainWindow)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> MainWindow->setWindowTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"pksvm_gui"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> actionInput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> actionInput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+I"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> actionTraining->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> actionTraining->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+T"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> actionMask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> actionMask->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+M"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> actionOutput->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> actionOutput->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+O"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> actionColor_table->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> actionColor_table->setShortcut(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Alt+C"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"></span> label_2->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Attribute name of the class label in the training vector file (default is label)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"></span> label_2->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"attribute name for class label"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> toolButton_training->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"></span> label_4->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>OGR supported vector file. Features must contain labels and band information. You can use pkextract to prepare training vector files</p></body></html>"</span>, 0, [...]
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"></span> label_4->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training vectorfile"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"></span> label_20->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Provide number of classes in training file here to prepare class name-value pairs (push button prepare table). This is mandatory if labels in training vector are provided as text (inste [...]
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"></span> label_20->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"number of classes to prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span> label_21->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Name of the training layer (optional). If not provided, all layers will be read per default.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"></span> label_21->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training layername (optional)"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> commandLinkButtonPrepareTable->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"prepare table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> label_17->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"class name-value pairs"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Training"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> label_14->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"msknodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> toolButton_input->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> label_16->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nodata"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"></span> label_13->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Dimensions of mask image must correspond to input image. Pixels in mask with values=masknodata are not classified and get nodata value.</p></body></html>"</span>, [...]
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span> label_13->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Mask image"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> toolButton_mask->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"></span> label_15->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Output image (classified map). Can be OGR vector or GDAL raster, depending on input data.</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"></span> label_15->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Output data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> toolButton_output->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"></span> label_3->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Input image. Both OGR vectors and GDAL rasters are supported. Number of bands must match those in training sample.</p></body></html>"</span>, 0, QApplication::Unic [...]
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"></span> label_3->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input data"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"></span> label_22->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Color table must be provided as ASCII text file with five (space delimited) columns:</p><p>value red green blue alpha<br/></p></body></html>"</s [...]
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"></span> label_22->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"color table"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> toolButton_ct->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"..."</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Input/Output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"></span> label_5->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Leave empty to skip cross validation. Enter 2 for a two-fold cross validation</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"></span> label_5->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"n-fold cross validation"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"></span> label_10->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>the parameter C of C_SVC, epsilon_SVR, and nu_SVR (default is 1)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span> label_10->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"CCost"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"></span> label_11->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Coef0 in the kernel function (default is 0)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"></span> label_11->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Coef 0"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"></span> label_6->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Type of the support vector machine</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"></span> label_6->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"SVM type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"></span> label_7->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>type of kernel function (default is radial)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span> label_7->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Kernel type"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"></span> label_9->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>gamma in kernel function (default is 0)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span> label_9->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Gamma"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"></span> label_12->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>the parameter nu of nu_SVC, one_class SVM, and nu_SVR (default is 0.5)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span> label_12->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"nu"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"></span> label_8->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>degree in kernel function (default is 3)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"></span> label_8->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Kernel degree"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Classifier"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> label_18->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Command line"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> label_19->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console output"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Console"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"></span> pushButton_run->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>Classify with current settings (check Console for output)</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"></span> pushButton_run->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Run"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor">#ifndef QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span> pushButton_restore->setToolTip(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"<html><head/><body><p>reset all parameters to default</p></body></html>"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor">#endif // QT_NO_TOOLTIP</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"></span> pushButton_restore->setText(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"Restore defaults"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> menuFile->setTitle(QApplication::translate(<span class="stringliteral">"MainWindow"</span>, <span class="stringliteral">"File"</span>, 0, QApplication::UnicodeUTF8));</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> } <span class="comment">// retranslateUi</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> };</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword">class </span>MainWindow: <span class="keyword">public</span> <a class="code" href="classUi__MainWindow.html">Ui_MainWindow</a> {};</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> } <span class="comment">// namespace Ui</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> QT_END_NAMESPACE</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor">#endif // UI_MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi__MainWindow_html"><div class="ttname"><a href="classUi__MainWindow.html">Ui_MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">ui_mainwindow.h:39</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classBadConversion-members.html b/doc/html/classBadConversion-members.html
new file mode 100644
index 0000000..a56598c
--- /dev/null
+++ b/doc/html/classBadConversion-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">BadConversion Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classBadConversion.html">BadConversion</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BadConversion</b>(std::string const &s) (defined in <a class="el" href="classBadConversion.html">BadConversion</a>)</td><td class="entry"><a class="el" href="classBadConversion.html">BadConversion</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classBadConversion.html b/doc/html/classBadConversion.html
new file mode 100644
index 0000000..e43dbaa
--- /dev/null
+++ b/doc/html/classBadConversion.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: BadConversion Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classBadConversion-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">BadConversion Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>throw this class when syntax error in command line option
+ <a href="classBadConversion.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for BadConversion:</div>
+<div class="dyncontent">
+<div class="center"><img src="classBadConversion__inherit__graph.png" border="0" usemap="#BadConversion_inherit__map" alt="Inheritance graph"/></div>
+<map name="BadConversion_inherit__map" id="BadConversion_inherit__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,80,128,107"/><area shape="rect" id="node3" title="STL class. " alt="" coords="15,5,119,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for BadConversion:</div>
+<div class="dyncontent">
+<div class="center"><img src="classBadConversion__coll__graph.png" border="0" usemap="#BadConversion_coll__map" alt="Collaboration graph"/></div>
+<map name="BadConversion_coll__map" id="BadConversion_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,80,128,107"/><area shape="rect" id="node3" title="STL class. " alt="" coords="15,5,119,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a73af0a122dbd4dac93db57685b73c382"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73af0a122dbd4dac93db57685b73c382"></a>
+ </td><td class="memItemRight" valign="bottom"><b>BadConversion</b> (std::string const &s)</td></tr>
+<tr class="separator:a73af0a122dbd4dac93db57685b73c382"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>throw this class when syntax error in command line option </p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00045">45</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="Optionpk_8h_source.html">Optionpk.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classBadConversion__coll__graph.map b/doc/html/classBadConversion__coll__graph.map
new file mode 100644
index 0000000..09c58e7
--- /dev/null
+++ b/doc/html/classBadConversion__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="BadConversion" name="BadConversion">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,80,128,107"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="15,5,119,32"/>
+</map>
diff --git a/doc/html/classBadConversion__coll__graph.md5 b/doc/html/classBadConversion__coll__graph.md5
new file mode 100644
index 0000000..5213680
--- /dev/null
+++ b/doc/html/classBadConversion__coll__graph.md5
@@ -0,0 +1 @@
+5b65c0253f2ad29e47793e73620a6377
\ No newline at end of file
diff --git a/doc/html/classBadConversion__coll__graph.png b/doc/html/classBadConversion__coll__graph.png
new file mode 100644
index 0000000..a7b4f89
Binary files /dev/null and b/doc/html/classBadConversion__coll__graph.png differ
diff --git a/doc/html/classBadConversion__inherit__graph.map b/doc/html/classBadConversion__inherit__graph.map
new file mode 100644
index 0000000..09c58e7
--- /dev/null
+++ b/doc/html/classBadConversion__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="BadConversion" name="BadConversion">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,80,128,107"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="15,5,119,32"/>
+</map>
diff --git a/doc/html/classBadConversion__inherit__graph.md5 b/doc/html/classBadConversion__inherit__graph.md5
new file mode 100644
index 0000000..5213680
--- /dev/null
+++ b/doc/html/classBadConversion__inherit__graph.md5
@@ -0,0 +1 @@
+5b65c0253f2ad29e47793e73620a6377
\ No newline at end of file
diff --git a/doc/html/classBadConversion__inherit__graph.png b/doc/html/classBadConversion__inherit__graph.png
new file mode 100644
index 0000000..a7b4f89
Binary files /dev/null and b/doc/html/classBadConversion__inherit__graph.png differ
diff --git a/doc/html/classCache-members.html b/doc/html/classCache-members.html
new file mode 100644
index 0000000..e76c0d3
--- /dev/null
+++ b/doc/html/classCache-members.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Cache Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCache.html">Cache</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Cache</b>(int l, long int size) (defined in <a class="el" href="classCache.html">Cache</a>)</td><td class="entry"><a class="el" href="classCache.html">Cache</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_data</b>(const int index, Qfloat **data, int len) (defined in <a class="el" href="classCache.html">Cache</a>)</td><td class="entry"><a class="el" href="classCache.html">Cache</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_index</b>(int i, int j) (defined in <a class="el" href="classCache.html">Cache</a>)</td><td class="entry"><a class="el" href="classCache.html">Cache</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Cache</b>() (defined in <a class="el" href="classCache.html">Cache</a>)</td><td class="entry"><a class="el" href="classCache.html">Cache</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCache.html b/doc/html/classCache.html
new file mode 100644
index 0000000..0ed5a57
--- /dev/null
+++ b/doc/html/classCache.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Cache Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classCache-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Cache Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2823f543d4f9b92c29472b904961afe1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2823f543d4f9b92c29472b904961afe1"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Cache</b> (int l, long int size)</td></tr>
+<tr class="separator:a2823f543d4f9b92c29472b904961afe1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca49263fb34641e208884cc223b25317"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca49263fb34641e208884cc223b25317"></a>
+int </td><td class="memItemRight" valign="bottom"><b>get_data</b> (const int index, Qfloat **data, int len)</td></tr>
+<tr class="separator:aca49263fb34641e208884cc223b25317"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaff2dc955f9492c044c98a5f09cfddcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaff2dc955f9492c044c98a5f09cfddcc"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j)</td></tr>
+<tr class="separator:aaff2dc955f9492c044c98a5f09cfddcc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l00069">69</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCompare__IndexValue-members.html b/doc/html/classCompare__IndexValue-members.html
new file mode 100644
index 0000000..9e42e34
--- /dev/null
+++ b/doc/html/classCompare__IndexValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Compare_IndexValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCompare__IndexValue.html">Compare_IndexValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const IndexValue &pv1, const IndexValue &pv2) const (defined in <a class="el" href="classCompare__IndexValue.html">Compare_IndexValue</a>)</td><td class="entry"><a class="el" href="classCompare__IndexValue.html">Compare_IndexValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCompare__IndexValue.html b/doc/html/classCompare__IndexValue.html
new file mode 100644
index 0000000..066dd81
--- /dev/null
+++ b/doc/html/classCompare__IndexValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Compare_IndexValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classCompare__IndexValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Compare_IndexValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1e7dff19b2ca71bcd4741f1269120341"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e7dff19b2ca71bcd4741f1269120341"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structIndexValue.html">IndexValue</a> &pv1, const <a class="el" href="structIndexValue.html">IndexValue</a> &pv2) const </td></tr>
+<tr class="separator:a1e7dff19b2ca71bcd4741f1269120341"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="IndexValue_8h_source.html#l00027">27</a> of file <a class="el" href="IndexValue_8h_source.html">IndexValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="IndexValue_8h_source.html">IndexValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCompare__PosValue-members.html b/doc/html/classCompare__PosValue-members.html
new file mode 100644
index 0000000..073e5ef
--- /dev/null
+++ b/doc/html/classCompare__PosValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Compare_PosValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCompare__PosValue.html">Compare_PosValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const PosValue &pv1, const PosValue &pv2) const (defined in <a class="el" href="classCompare__PosValue.html">Compare_PosValue</a>)</td><td class="entry"><a class="el" href="classCompare__PosValue.html">Compare_PosValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCompare__PosValue.html b/doc/html/classCompare__PosValue.html
new file mode 100644
index 0000000..b292f58
--- /dev/null
+++ b/doc/html/classCompare__PosValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Compare_PosValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classCompare__PosValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Compare_PosValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad58e11aaef79b96e4525a01f57d9c787"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad58e11aaef79b96e4525a01f57d9c787"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structPosValue.html">PosValue</a> &pv1, const <a class="el" href="structPosValue.html">PosValue</a> &pv2) const </td></tr>
+<tr class="separator:ad58e11aaef79b96e4525a01f57d9c787"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="PosValue_8h_source.html#l00028">28</a> of file <a class="el" href="PosValue_8h_source.html">PosValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="PosValue_8h_source.html">PosValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactory-members.html b/doc/html/classCostFactory-members.html
new file mode 100644
index 0000000..4b9e7cb
--- /dev/null
+++ b/doc/html/classCostFactory-members.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactory Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCostFactory.html">CostFactory</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CostFactory</b>(unsigned short cv, short verbose) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getClassIndex</b>(std::string classname) const (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getClassValueMap</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCost</b>(const std::vector< Vector2d< float > > &trainingFeatures)=0 (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getNameVector</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_classvalue</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_classValueMap</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_cm</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_cv</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nameVector</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nctest</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nctraining</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_verbose</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushBackClassName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushBackName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setClassValueMap</b>(const std::string &classname, short classvalue) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCv</b>(unsigned short cv) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNameVector</b>(std::vector< std::string > &nameVector) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setNcTest</b>(const std::vector< unsigned int > nctest) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNcTraining</b>(const std::vector< unsigned int > nctraining) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactory.html b/doc/html/classCostFactory.html
new file mode 100644
index 0000000..5577d52
--- /dev/null
+++ b/doc/html/classCostFactory.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: CostFactory Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classCostFactory-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CostFactory Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for CostFactory:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactory__inherit__graph.png" border="0" usemap="#CostFactory_inherit__map" alt="Inheritance graph"/></div>
+<map name="CostFactory_inherit__map" id="CostFactory_inherit__map">
+<area shape="rect" id="node2" href="classCostFactoryANN.html" title="CostFactoryANN" alt="" coords="5,80,128,107"/><area shape="rect" id="node3" href="classCostFactorySVM.html" title="CostFactorySVM" alt="" coords="152,80,275,107"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for CostFactory:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactory__coll__graph.png" border="0" usemap="#CostFactory_coll__map" alt="Collaboration graph"/></div>
+<map name="CostFactory_coll__map" id="CostFactory_coll__map">
+<area shape="rect" id="node2" href="classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/><area shape="rect" id="node4" title="STL class. " alt="" coords="184,105,264,132"/><area shape="rect" id="node5" title="STL class. " alt="" coords="6,98,133,139"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1faae7dd8250f4081c0b82bd0d1db77b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1faae7dd8250f4081c0b82bd0d1db77b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>CostFactory</b> (unsigned short cv, short verbose)</td></tr>
+<tr class="separator:a1faae7dd8250f4081c0b82bd0d1db77b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a502c08202652a6958a103ec8d9805584"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502c08202652a6958a103ec8d9805584"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCv</b> (unsigned short cv)</td></tr>
+<tr class="separator:a502c08202652a6958a103ec8d9805584"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a8ac2891561a0dfec6a088891e6a089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a8ac2891561a0dfec6a088891e6a089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setClassValueMap</b> (const std::string &classname, short classvalue)</td></tr>
+<tr class="separator:a6a8ac2891561a0dfec6a088891e6a089"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62e43cc3d6c4dada3d88888f86e5d5a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e43cc3d6c4dada3d88888f86e5d5a1"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>getClassValueMap</b> ()</td></tr>
+<tr class="separator:a62e43cc3d6c4dada3d88888f86e5d5a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacf749bf116de886d266d0d9a09cb735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf749bf116de886d266d0d9a09cb735"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>getNameVector</b> ()</td></tr>
+<tr class="separator:aacf749bf116de886d266d0d9a09cb735"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3e7a1cd24c75232d74811f13ef054b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3e7a1cd24c75232d74811f13ef054b0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNameVector</b> (std::vector< std::string > &nameVector)</td></tr>
+<tr class="separator:ab3e7a1cd24c75232d74811f13ef054b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1df5bd24ca7607e7dc9ca167cf133bf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df5bd24ca7607e7dc9ca167cf133bf8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getClassIndex</b> (std::string classname) const </td></tr>
+<tr class="separator:a1df5bd24ca7607e7dc9ca167cf133bf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b5229bb505dffaaf8ade1fbff5232a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b5229bb505dffaaf8ade1fbff5232a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackClassName</b> (std::string classname)</td></tr>
+<tr class="separator:a5b5229bb505dffaaf8ade1fbff5232a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f8138c0dd3352a138cadf097a035ef9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8138c0dd3352a138cadf097a035ef9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackName</b> (std::string classname)</td></tr>
+<tr class="separator:a8f8138c0dd3352a138cadf097a035ef9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7866aa98fbc61d2e14a6e400a978abe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7866aa98fbc61d2e14a6e400a978abe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTraining</b> (const std::vector< unsigned int > nctraining)</td></tr>
+<tr class="separator:ad7866aa98fbc61d2e14a6e400a978abe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85436b545d7aac6780097fe0624d5713"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85436b545d7aac6780097fe0624d5713"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTest</b> (const std::vector< unsigned int > nctest)</td></tr>
+<tr class="separator:a85436b545d7aac6780097fe0624d5713"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0653d0ef8b209f09ce89d27fecfd8a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0653d0ef8b209f09ce89d27fecfd8a5"></a>
+virtual double </td><td class="memItemRight" valign="bottom"><b>getCost</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< float > > &trainingFeatures)=0</td></tr>
+<tr class="separator:aa0653d0ef8b209f09ce89d27fecfd8a5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:aa0bc9633caa3b8ffbc06a620f47bdbb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0bc9633caa3b8ffbc06a620f47bdbb5"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> </td><td class="memItemRight" valign="bottom"><b>m_cm</b></td></tr>
+<tr class="separator:aa0bc9633caa3b8ffbc06a620f47bdbb5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbd6ac034f26cb6afcb2fd83bc030d43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbd6ac034f26cb6afcb2fd83bc030d43"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>m_classValueMap</b></td></tr>
+<tr class="separator:abbd6ac034f26cb6afcb2fd83bc030d43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6eb84c840346b10c8c6f2a554d186675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb84c840346b10c8c6f2a554d186675"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>m_nameVector</b></td></tr>
+<tr class="separator:a6eb84c840346b10c8c6f2a554d186675"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98bd6d2bb062a5022fbd14692555f21d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98bd6d2bb062a5022fbd14692555f21d"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctraining</b></td></tr>
+<tr class="separator:a98bd6d2bb062a5022fbd14692555f21d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6f79856efd1f7fe362374782d191303"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6f79856efd1f7fe362374782d191303"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctest</b></td></tr>
+<tr class="separator:ae6f79856efd1f7fe362374782d191303"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a430926a8c75e6245b192a45deeef4ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a430926a8c75e6245b192a45deeef4ae7"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>m_cv</b></td></tr>
+<tr class="separator:a430926a8c75e6245b192a45deeef4ae7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38fd70589633f9c96710c510814a610f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38fd70589633f9c96710c510814a610f"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_classvalue</b></td></tr>
+<tr class="separator:a38fd70589633f9c96710c510814a610f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ba96c1639a8dc080f704c64627de65b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba96c1639a8dc080f704c64627de65b"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_verbose</b></td></tr>
+<tr class="separator:a7ba96c1639a8dc080f704c64627de65b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="CostFactory_8h_source.html#l00030">30</a> of file <a class="el" href="CostFactory_8h_source.html">CostFactory.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="CostFactory_8h_source.html">CostFactory.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactoryANN-members.html b/doc/html/classCostFactoryANN-members.html
new file mode 100644
index 0000000..f76ab0b
--- /dev/null
+++ b/doc/html/classCostFactoryANN-members.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactoryANN Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCostFactoryANN.html">CostFactoryANN</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CostFactory</b>(unsigned short cv, short verbose) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CostFactoryANN</b>() (defined in <a class="el" href="classCostFactoryANN.html">CostFactoryANN</a>)</td><td class="entry"><a class="el" href="classCostFactoryANN.html">CostFactoryANN</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CostFactoryANN</b>(const std::vector< unsigned int > &nneuron, float connection, const std::vector< float > weights, float learning, unsigned int maxit, unsigned short cv, bool verbose) (defined in <a class="el" href="classCostFactoryANN.html">CostFactoryANN</a>)</td><td class="entry"><a class="el" href="classCostFactoryANN.html">CostFactoryANN</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getClassIndex</b>(std::string classname) const (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getClassValueMap</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCost</b>(const std::vector< Vector2d< float > > &trainingFeatures) (defined in <a class="el" href="classCostFactoryANN.html">CostFactoryANN</a>)</td><td class="entry"><a class="el" href="classCostFactoryANN.html">CostFactoryANN</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getNameVector</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_classvalue</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_classValueMap</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_cm</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_cv</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nameVector</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nctest</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nctraining</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_verbose</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushBackClassName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushBackName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setClassValueMap</b>(const std::string &classname, short classvalue) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCv</b>(unsigned short cv) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNameVector</b>(std::vector< std::string > &nameVector) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setNcTest</b>(const std::vector< unsigned int > nctest) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNcTraining</b>(const std::vector< unsigned int > nctraining) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~CostFactoryANN</b>() (defined in <a class="el" href="classCostFactoryANN.html">CostFactoryANN</a>)</td><td class="entry"><a class="el" href="classCostFactoryANN.html">CostFactoryANN</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactoryANN.html b/doc/html/classCostFactoryANN.html
new file mode 100644
index 0000000..1d02d0a
--- /dev/null
+++ b/doc/html/classCostFactoryANN.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: CostFactoryANN Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classCostFactoryANN-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CostFactoryANN Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for CostFactoryANN:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactoryANN__inherit__graph.png" border="0" usemap="#CostFactoryANN_inherit__map" alt="Inheritance graph"/></div>
+<map name="CostFactoryANN_inherit__map" id="CostFactoryANN_inherit__map">
+<area shape="rect" id="node2" href="classCostFactory.html" title="CostFactory" alt="" coords="19,5,113,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for CostFactoryANN:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactoryANN__coll__graph.png" border="0" usemap="#CostFactoryANN_coll__map" alt="Collaboration graph"/></div>
+<map name="CostFactoryANN_coll__map" id="CostFactoryANN_coll__map">
+<area shape="rect" id="node2" href="classCostFactory.html" title="CostFactory" alt="" coords="713,107,807,133"/><area shape="rect" id="node3" href="classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/><area shape="rect" id="node5" title="STL class. " alt="" coords="184,105,264,132"/><area shape="rect" id="node6" title="STL class. " alt="" coords="6,98,133,139"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:acdb6382db22a5e246f91c0a24493724f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdb6382db22a5e246f91c0a24493724f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>CostFactoryANN</b> (const std::vector< unsigned int > &nneuron, float connection, const std::vector< float > weights, float learning, unsigned int maxit, unsigned short cv, bool verbose)</td></tr>
+<tr class="separator:acdb6382db22a5e246f91c0a24493724f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab63be8d46b9cb4d9183f714636a846ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab63be8d46b9cb4d9183f714636a846ee"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getCost</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< float > > &trainingFeatures)</td></tr>
+<tr class="separator:ab63be8d46b9cb4d9183f714636a846ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classCostFactory"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classCostFactory')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classCostFactory.html">CostFactory</a></td></tr>
+<tr class="memitem:a1faae7dd8250f4081c0b82bd0d1db77b inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1faae7dd8250f4081c0b82bd0d1db77b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>CostFactory</b> (unsigned short cv, short verbose)</td></tr>
+<tr class="separator:a1faae7dd8250f4081c0b82bd0d1db77b inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a502c08202652a6958a103ec8d9805584 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502c08202652a6958a103ec8d9805584"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCv</b> (unsigned short cv)</td></tr>
+<tr class="separator:a502c08202652a6958a103ec8d9805584 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a8ac2891561a0dfec6a088891e6a089 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a8ac2891561a0dfec6a088891e6a089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setClassValueMap</b> (const std::string &classname, short classvalue)</td></tr>
+<tr class="separator:a6a8ac2891561a0dfec6a088891e6a089 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62e43cc3d6c4dada3d88888f86e5d5a1 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e43cc3d6c4dada3d88888f86e5d5a1"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>getClassValueMap</b> ()</td></tr>
+<tr class="separator:a62e43cc3d6c4dada3d88888f86e5d5a1 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacf749bf116de886d266d0d9a09cb735 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf749bf116de886d266d0d9a09cb735"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>getNameVector</b> ()</td></tr>
+<tr class="separator:aacf749bf116de886d266d0d9a09cb735 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3e7a1cd24c75232d74811f13ef054b0 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3e7a1cd24c75232d74811f13ef054b0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNameVector</b> (std::vector< std::string > &nameVector)</td></tr>
+<tr class="separator:ab3e7a1cd24c75232d74811f13ef054b0 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1df5bd24ca7607e7dc9ca167cf133bf8 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df5bd24ca7607e7dc9ca167cf133bf8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getClassIndex</b> (std::string classname) const </td></tr>
+<tr class="separator:a1df5bd24ca7607e7dc9ca167cf133bf8 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b5229bb505dffaaf8ade1fbff5232a4 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b5229bb505dffaaf8ade1fbff5232a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackClassName</b> (std::string classname)</td></tr>
+<tr class="separator:a5b5229bb505dffaaf8ade1fbff5232a4 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f8138c0dd3352a138cadf097a035ef9 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8138c0dd3352a138cadf097a035ef9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackName</b> (std::string classname)</td></tr>
+<tr class="separator:a8f8138c0dd3352a138cadf097a035ef9 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7866aa98fbc61d2e14a6e400a978abe inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7866aa98fbc61d2e14a6e400a978abe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTraining</b> (const std::vector< unsigned int > nctraining)</td></tr>
+<tr class="separator:ad7866aa98fbc61d2e14a6e400a978abe inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85436b545d7aac6780097fe0624d5713 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85436b545d7aac6780097fe0624d5713"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTest</b> (const std::vector< unsigned int > nctest)</td></tr>
+<tr class="separator:a85436b545d7aac6780097fe0624d5713 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_classCostFactory"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classCostFactory')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classCostFactory.html">CostFactory</a></td></tr>
+<tr class="memitem:aa0bc9633caa3b8ffbc06a620f47bdbb5 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0bc9633caa3b8ffbc06a620f47bdbb5"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> </td><td class="memItemRight" valign="bottom"><b>m_cm</b></td></tr>
+<tr class="separator:aa0bc9633caa3b8ffbc06a620f47bdbb5 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbd6ac034f26cb6afcb2fd83bc030d43 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbd6ac034f26cb6afcb2fd83bc030d43"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>m_classValueMap</b></td></tr>
+<tr class="separator:abbd6ac034f26cb6afcb2fd83bc030d43 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6eb84c840346b10c8c6f2a554d186675 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb84c840346b10c8c6f2a554d186675"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>m_nameVector</b></td></tr>
+<tr class="separator:a6eb84c840346b10c8c6f2a554d186675 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98bd6d2bb062a5022fbd14692555f21d inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98bd6d2bb062a5022fbd14692555f21d"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctraining</b></td></tr>
+<tr class="separator:a98bd6d2bb062a5022fbd14692555f21d inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6f79856efd1f7fe362374782d191303 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6f79856efd1f7fe362374782d191303"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctest</b></td></tr>
+<tr class="separator:ae6f79856efd1f7fe362374782d191303 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a430926a8c75e6245b192a45deeef4ae7 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a430926a8c75e6245b192a45deeef4ae7"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>m_cv</b></td></tr>
+<tr class="separator:a430926a8c75e6245b192a45deeef4ae7 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38fd70589633f9c96710c510814a610f inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38fd70589633f9c96710c510814a610f"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_classvalue</b></td></tr>
+<tr class="separator:a38fd70589633f9c96710c510814a610f inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ba96c1639a8dc080f704c64627de65b inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba96c1639a8dc080f704c64627de65b"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_verbose</b></td></tr>
+<tr class="separator:a7ba96c1639a8dc080f704c64627de65b inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkfsann_8h_source.html#l00029">29</a> of file <a class="el" href="pkfsann_8h_source.html">pkfsann.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/apps/<a class="el" href="pkfsann_8h_source.html">pkfsann.h</a></li>
+<li>/home/kempenep/pktools/src/apps/<a class="el" href="pkfsann_8cc_source.html">pkfsann.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactoryANN__coll__graph.map b/doc/html/classCostFactoryANN__coll__graph.map
new file mode 100644
index 0000000..0776f52
--- /dev/null
+++ b/doc/html/classCostFactoryANN__coll__graph.map
@@ -0,0 +1,6 @@
+<map id="CostFactoryANN" name="CostFactoryANN">
+<area shape="rect" id="node2" href="$classCostFactory.html" title="CostFactory" alt="" coords="713,107,807,133"/>
+<area shape="rect" id="node3" href="$classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/>
+<area shape="rect" id="node5" title="STL class. " alt="" coords="184,105,264,132"/>
+<area shape="rect" id="node6" title="STL class. " alt="" coords="6,98,133,139"/>
+</map>
diff --git a/doc/html/classCostFactoryANN__coll__graph.md5 b/doc/html/classCostFactoryANN__coll__graph.md5
new file mode 100644
index 0000000..6eb1434
--- /dev/null
+++ b/doc/html/classCostFactoryANN__coll__graph.md5
@@ -0,0 +1 @@
+529bf65d909c3f3b9209991505bd110b
\ No newline at end of file
diff --git a/doc/html/classCostFactoryANN__coll__graph.png b/doc/html/classCostFactoryANN__coll__graph.png
new file mode 100644
index 0000000..8d1458a
Binary files /dev/null and b/doc/html/classCostFactoryANN__coll__graph.png differ
diff --git a/doc/html/classCostFactoryANN__inherit__graph.map b/doc/html/classCostFactoryANN__inherit__graph.map
new file mode 100644
index 0000000..943da9d
--- /dev/null
+++ b/doc/html/classCostFactoryANN__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="CostFactoryANN" name="CostFactoryANN">
+<area shape="rect" id="node2" href="$classCostFactory.html" title="CostFactory" alt="" coords="19,5,113,32"/>
+</map>
diff --git a/doc/html/classCostFactoryANN__inherit__graph.md5 b/doc/html/classCostFactoryANN__inherit__graph.md5
new file mode 100644
index 0000000..ed9945b
--- /dev/null
+++ b/doc/html/classCostFactoryANN__inherit__graph.md5
@@ -0,0 +1 @@
+14378ff104c000911bb9b98090600132
\ No newline at end of file
diff --git a/doc/html/classCostFactoryANN__inherit__graph.png b/doc/html/classCostFactoryANN__inherit__graph.png
new file mode 100644
index 0000000..5b59045
Binary files /dev/null and b/doc/html/classCostFactoryANN__inherit__graph.png differ
diff --git a/doc/html/classCostFactorySVM-members.html b/doc/html/classCostFactorySVM-members.html
new file mode 100644
index 0000000..ee8138a
--- /dev/null
+++ b/doc/html/classCostFactorySVM-members.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CostFactorySVM Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCostFactorySVM.html">CostFactorySVM</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CostFactory</b>(unsigned short cv, short verbose) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CostFactorySVM</b>() (defined in <a class="el" href="classCostFactorySVM.html">CostFactorySVM</a>)</td><td class="entry"><a class="el" href="classCostFactorySVM.html">CostFactorySVM</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CostFactorySVM</b>(std::string svm_type, std::string kernel_type, unsigned short kernel_degree, float gamma, float coef0, float ccost, float nu, float epsilon_loss, int cache, float epsilon_tol, bool shrinking, bool prob_est, unsigned short cv, short verbose) (defined in <a class="el" href="classCostFactorySVM.html">CostFactorySVM</a>)</td><td class="entry"><a class="el" href="classCostFactorySVM.html">CostFactorySVM</a></td><td class="entry"> [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getClassIndex</b>(std::string classname) const (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getClassValueMap</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCost</b>(const std::vector< Vector2d< float > > &trainingFeatures) (defined in <a class="el" href="classCostFactorySVM.html">CostFactorySVM</a>)</td><td class="entry"><a class="el" href="classCostFactorySVM.html">CostFactorySVM</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getNameVector</b>() (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_classvalue</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_classValueMap</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_cm</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_cv</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nameVector</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nctest</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nctraining</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_verbose</b> (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushBackClassName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushBackName</b>(std::string classname) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setClassValueMap</b>(const std::string &classname, short classvalue) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCv</b>(unsigned short cv) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNameVector</b>(std::vector< std::string > &nameVector) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setNcTest</b>(const std::vector< unsigned int > nctest) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNcTraining</b>(const std::vector< unsigned int > nctraining) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~CostFactory</b>(void) (defined in <a class="el" href="classCostFactory.html">CostFactory</a>)</td><td class="entry"><a class="el" href="classCostFactory.html">CostFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~CostFactorySVM</b>() (defined in <a class="el" href="classCostFactorySVM.html">CostFactorySVM</a>)</td><td class="entry"><a class="el" href="classCostFactorySVM.html">CostFactorySVM</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactorySVM.html b/doc/html/classCostFactorySVM.html
new file mode 100644
index 0000000..17fc7fc
--- /dev/null
+++ b/doc/html/classCostFactorySVM.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: CostFactorySVM Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classCostFactorySVM-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CostFactorySVM Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for CostFactorySVM:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactorySVM__inherit__graph.png" border="0" usemap="#CostFactorySVM_inherit__map" alt="Inheritance graph"/></div>
+<map name="CostFactorySVM_inherit__map" id="CostFactorySVM_inherit__map">
+<area shape="rect" id="node2" href="classCostFactory.html" title="CostFactory" alt="" coords="19,5,113,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for CostFactorySVM:</div>
+<div class="dyncontent">
+<div class="center"><img src="classCostFactorySVM__coll__graph.png" border="0" usemap="#CostFactorySVM_coll__map" alt="Collaboration graph"/></div>
+<map name="CostFactorySVM_coll__map" id="CostFactorySVM_coll__map">
+<area shape="rect" id="node2" href="classCostFactory.html" title="CostFactory" alt="" coords="713,107,807,133"/><area shape="rect" id="node3" href="classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/><area shape="rect" id="node5" title="STL class. " alt="" coords="184,105,264,132"/><area shape="rect" id="node6" title="STL class. " alt="" coords="6,98,133,139"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9096f0b33d455d0a580038fd9adf5931"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9096f0b33d455d0a580038fd9adf5931"></a>
+ </td><td class="memItemRight" valign="bottom"><b>CostFactorySVM</b> (std::string svm_type, std::string kernel_type, unsigned short kernel_degree, float gamma, float coef0, float ccost, float nu, float epsilon_loss, int cache, float epsilon_tol, bool shrinking, bool prob_est, unsigned short cv, short verbose)</td></tr>
+<tr class="separator:a9096f0b33d455d0a580038fd9adf5931"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab17b6f6b6d3583232404f28c5cf95003"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab17b6f6b6d3583232404f28c5cf95003"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getCost</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< float > > &trainingFeatures)</td></tr>
+<tr class="separator:ab17b6f6b6d3583232404f28c5cf95003"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classCostFactory"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classCostFactory')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classCostFactory.html">CostFactory</a></td></tr>
+<tr class="memitem:a1faae7dd8250f4081c0b82bd0d1db77b inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1faae7dd8250f4081c0b82bd0d1db77b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>CostFactory</b> (unsigned short cv, short verbose)</td></tr>
+<tr class="separator:a1faae7dd8250f4081c0b82bd0d1db77b inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a502c08202652a6958a103ec8d9805584 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502c08202652a6958a103ec8d9805584"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCv</b> (unsigned short cv)</td></tr>
+<tr class="separator:a502c08202652a6958a103ec8d9805584 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a8ac2891561a0dfec6a088891e6a089 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a8ac2891561a0dfec6a088891e6a089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setClassValueMap</b> (const std::string &classname, short classvalue)</td></tr>
+<tr class="separator:a6a8ac2891561a0dfec6a088891e6a089 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62e43cc3d6c4dada3d88888f86e5d5a1 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e43cc3d6c4dada3d88888f86e5d5a1"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>getClassValueMap</b> ()</td></tr>
+<tr class="separator:a62e43cc3d6c4dada3d88888f86e5d5a1 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacf749bf116de886d266d0d9a09cb735 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf749bf116de886d266d0d9a09cb735"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>getNameVector</b> ()</td></tr>
+<tr class="separator:aacf749bf116de886d266d0d9a09cb735 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3e7a1cd24c75232d74811f13ef054b0 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3e7a1cd24c75232d74811f13ef054b0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNameVector</b> (std::vector< std::string > &nameVector)</td></tr>
+<tr class="separator:ab3e7a1cd24c75232d74811f13ef054b0 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1df5bd24ca7607e7dc9ca167cf133bf8 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df5bd24ca7607e7dc9ca167cf133bf8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getClassIndex</b> (std::string classname) const </td></tr>
+<tr class="separator:a1df5bd24ca7607e7dc9ca167cf133bf8 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b5229bb505dffaaf8ade1fbff5232a4 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b5229bb505dffaaf8ade1fbff5232a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackClassName</b> (std::string classname)</td></tr>
+<tr class="separator:a5b5229bb505dffaaf8ade1fbff5232a4 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f8138c0dd3352a138cadf097a035ef9 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8138c0dd3352a138cadf097a035ef9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackName</b> (std::string classname)</td></tr>
+<tr class="separator:a8f8138c0dd3352a138cadf097a035ef9 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7866aa98fbc61d2e14a6e400a978abe inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7866aa98fbc61d2e14a6e400a978abe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTraining</b> (const std::vector< unsigned int > nctraining)</td></tr>
+<tr class="separator:ad7866aa98fbc61d2e14a6e400a978abe inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85436b545d7aac6780097fe0624d5713 inherit pub_methods_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85436b545d7aac6780097fe0624d5713"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setNcTest</b> (const std::vector< unsigned int > nctest)</td></tr>
+<tr class="separator:a85436b545d7aac6780097fe0624d5713 inherit pub_methods_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_classCostFactory"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classCostFactory')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classCostFactory.html">CostFactory</a></td></tr>
+<tr class="memitem:aa0bc9633caa3b8ffbc06a620f47bdbb5 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0bc9633caa3b8ffbc06a620f47bdbb5"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> </td><td class="memItemRight" valign="bottom"><b>m_cm</b></td></tr>
+<tr class="separator:aa0bc9633caa3b8ffbc06a620f47bdbb5 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbd6ac034f26cb6afcb2fd83bc030d43 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbd6ac034f26cb6afcb2fd83bc030d43"></a>
+std::map< std::string, short > </td><td class="memItemRight" valign="bottom"><b>m_classValueMap</b></td></tr>
+<tr class="separator:abbd6ac034f26cb6afcb2fd83bc030d43 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6eb84c840346b10c8c6f2a554d186675 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb84c840346b10c8c6f2a554d186675"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>m_nameVector</b></td></tr>
+<tr class="separator:a6eb84c840346b10c8c6f2a554d186675 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98bd6d2bb062a5022fbd14692555f21d inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98bd6d2bb062a5022fbd14692555f21d"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctraining</b></td></tr>
+<tr class="separator:a98bd6d2bb062a5022fbd14692555f21d inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6f79856efd1f7fe362374782d191303 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6f79856efd1f7fe362374782d191303"></a>
+std::vector< unsigned int > </td><td class="memItemRight" valign="bottom"><b>m_nctest</b></td></tr>
+<tr class="separator:ae6f79856efd1f7fe362374782d191303 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a430926a8c75e6245b192a45deeef4ae7 inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a430926a8c75e6245b192a45deeef4ae7"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>m_cv</b></td></tr>
+<tr class="separator:a430926a8c75e6245b192a45deeef4ae7 inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38fd70589633f9c96710c510814a610f inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38fd70589633f9c96710c510814a610f"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_classvalue</b></td></tr>
+<tr class="separator:a38fd70589633f9c96710c510814a610f inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ba96c1639a8dc080f704c64627de65b inherit pro_attribs_classCostFactory"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba96c1639a8dc080f704c64627de65b"></a>
+short </td><td class="memItemRight" valign="bottom"><b>m_verbose</b></td></tr>
+<tr class="separator:a7ba96c1639a8dc080f704c64627de65b inherit pro_attribs_classCostFactory"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="CostFactorySVM_8h_source.html#l00034">34</a> of file <a class="el" href="CostFactorySVM_8h_source.html">CostFactorySVM.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="CostFactorySVM_8h_source.html">CostFactorySVM.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="CostFactorySVM_8cc_source.html">CostFactorySVM.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classCostFactorySVM__coll__graph.map b/doc/html/classCostFactorySVM__coll__graph.map
new file mode 100644
index 0000000..48bf2b3
--- /dev/null
+++ b/doc/html/classCostFactorySVM__coll__graph.map
@@ -0,0 +1,6 @@
+<map id="CostFactorySVM" name="CostFactorySVM">
+<area shape="rect" id="node2" href="$classCostFactory.html" title="CostFactory" alt="" coords="713,107,807,133"/>
+<area shape="rect" id="node3" href="$classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/>
+<area shape="rect" id="node5" title="STL class. " alt="" coords="184,105,264,132"/>
+<area shape="rect" id="node6" title="STL class. " alt="" coords="6,98,133,139"/>
+</map>
diff --git a/doc/html/classCostFactorySVM__coll__graph.md5 b/doc/html/classCostFactorySVM__coll__graph.md5
new file mode 100644
index 0000000..b0cd182
--- /dev/null
+++ b/doc/html/classCostFactorySVM__coll__graph.md5
@@ -0,0 +1 @@
+0f9a8f382626bf9a88185ebf63693f69
\ No newline at end of file
diff --git a/doc/html/classCostFactorySVM__coll__graph.png b/doc/html/classCostFactorySVM__coll__graph.png
new file mode 100644
index 0000000..3274be0
Binary files /dev/null and b/doc/html/classCostFactorySVM__coll__graph.png differ
diff --git a/doc/html/classCostFactorySVM__inherit__graph.map b/doc/html/classCostFactorySVM__inherit__graph.map
new file mode 100644
index 0000000..f05bdad
--- /dev/null
+++ b/doc/html/classCostFactorySVM__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="CostFactorySVM" name="CostFactorySVM">
+<area shape="rect" id="node2" href="$classCostFactory.html" title="CostFactory" alt="" coords="19,5,113,32"/>
+</map>
diff --git a/doc/html/classCostFactorySVM__inherit__graph.md5 b/doc/html/classCostFactorySVM__inherit__graph.md5
new file mode 100644
index 0000000..f7aae37
--- /dev/null
+++ b/doc/html/classCostFactorySVM__inherit__graph.md5
@@ -0,0 +1 @@
+ff8d12106f65f097f8bab69386ebb5be
\ No newline at end of file
diff --git a/doc/html/classCostFactorySVM__inherit__graph.png b/doc/html/classCostFactorySVM__inherit__graph.png
new file mode 100644
index 0000000..d35fb6a
Binary files /dev/null and b/doc/html/classCostFactorySVM__inherit__graph.png differ
diff --git a/doc/html/classCostFactory__coll__graph.map b/doc/html/classCostFactory__coll__graph.map
new file mode 100644
index 0000000..1ca84c0
--- /dev/null
+++ b/doc/html/classCostFactory__coll__graph.map
@@ -0,0 +1,5 @@
+<map id="CostFactory" name="CostFactory">
+<area shape="rect" id="node2" href="$classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="371,5,552,46"/>
+<area shape="rect" id="node4" title="STL class. " alt="" coords="184,105,264,132"/>
+<area shape="rect" id="node5" title="STL class. " alt="" coords="6,98,133,139"/>
+</map>
diff --git a/doc/html/classCostFactory__coll__graph.md5 b/doc/html/classCostFactory__coll__graph.md5
new file mode 100644
index 0000000..c5f55ff
--- /dev/null
+++ b/doc/html/classCostFactory__coll__graph.md5
@@ -0,0 +1 @@
+013d2047d241b8e0b23a7bd03fa53828
\ No newline at end of file
diff --git a/doc/html/classCostFactory__coll__graph.png b/doc/html/classCostFactory__coll__graph.png
new file mode 100644
index 0000000..05187fb
Binary files /dev/null and b/doc/html/classCostFactory__coll__graph.png differ
diff --git a/doc/html/classCostFactory__inherit__graph.map b/doc/html/classCostFactory__inherit__graph.map
new file mode 100644
index 0000000..071a916
--- /dev/null
+++ b/doc/html/classCostFactory__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="CostFactory" name="CostFactory">
+<area shape="rect" id="node2" href="$classCostFactoryANN.html" title="CostFactoryANN" alt="" coords="5,80,128,107"/>
+<area shape="rect" id="node3" href="$classCostFactorySVM.html" title="CostFactorySVM" alt="" coords="152,80,275,107"/>
+</map>
diff --git a/doc/html/classCostFactory__inherit__graph.md5 b/doc/html/classCostFactory__inherit__graph.md5
new file mode 100644
index 0000000..340f331
--- /dev/null
+++ b/doc/html/classCostFactory__inherit__graph.md5
@@ -0,0 +1 @@
+e64c5347d3103351bf80477a99bb5b35
\ No newline at end of file
diff --git a/doc/html/classCostFactory__inherit__graph.png b/doc/html/classCostFactory__inherit__graph.png
new file mode 100644
index 0000000..17c48be
Binary files /dev/null and b/doc/html/classCostFactory__inherit__graph.png differ
diff --git a/doc/html/classDataModel-members.html b/doc/html/classDataModel-members.html
new file mode 100644
index 0000000..708bbdb
--- /dev/null
+++ b/doc/html/classDataModel-members.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">DataModel Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classDataModel.html">DataModel</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DataModel</b>() (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DataModel</b>(const SensorModel::SensorModel &theModel) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>erase</b>(int index) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAttPlatform</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCol</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDistGeo</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getHeight</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getModel</b>() const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPos</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getPosGCP</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPosPlatform</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getRow</b>(int index) const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSize</b>() const (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getThreshold</b>() (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushAttPlatform</b>(const arma::vec &atp) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushCol</b>(int c) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushPosGCP</b>(const arma::vec &pgcp) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushPosPlatform</b>(const arma::vec &ppl) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushRow</b>(int r) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setBoresightAtt</b>(const arma::vec &bc_att) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setModel</b>(const SensorModel::SensorModel &theModel) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setThreshold</b>(double theThreshold) (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~DataModel</b>() (defined in <a class="el" href="classDataModel.html">DataModel</a>)</td><td class="entry"><a class="el" href="classDataModel.html">DataModel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classDataModel.html b/doc/html/classDataModel.html
new file mode 100644
index 0000000..e058699
--- /dev/null
+++ b/doc/html/classDataModel.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: DataModel Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classDataModel-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">DataModel Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a13b07b4a832809ca31d73147c81a34c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13b07b4a832809ca31d73147c81a34c7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>DataModel</b> (const SensorModel::SensorModel &theModel)</td></tr>
+<tr class="separator:a13b07b4a832809ca31d73147c81a34c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cbe5f3ed8d59ca61704d7fd38615631"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cbe5f3ed8d59ca61704d7fd38615631"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setModel</b> (const SensorModel::SensorModel &theModel)</td></tr>
+<tr class="separator:a7cbe5f3ed8d59ca61704d7fd38615631"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d31a5f44c135eb76fb06916b3b75d80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d31a5f44c135eb76fb06916b3b75d80"></a>
+const SensorModel::SensorModel & </td><td class="memItemRight" valign="bottom"><b>getModel</b> () const </td></tr>
+<tr class="separator:a2d31a5f44c135eb76fb06916b3b75d80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8289d7987c7f7d350035347b8f38ba8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8289d7987c7f7d350035347b8f38ba8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getSize</b> () const </td></tr>
+<tr class="separator:af8289d7987c7f7d350035347b8f38ba8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88bb05c684f450f9fad84e4a40530d86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88bb05c684f450f9fad84e4a40530d86"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setThreshold</b> (double theThreshold)</td></tr>
+<tr class="separator:a88bb05c684f450f9fad84e4a40530d86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7dbcb0e231d9197167e10536bad316f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dbcb0e231d9197167e10536bad316f5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getThreshold</b> ()</td></tr>
+<tr class="separator:a7dbcb0e231d9197167e10536bad316f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80d56fea7c563dffb441286275437567"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80d56fea7c563dffb441286275437567"></a>
+int </td><td class="memItemRight" valign="bottom"><b>erase</b> (int index)</td></tr>
+<tr class="separator:a80d56fea7c563dffb441286275437567"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70b32747c76ff5e1ddc3b369cddfd313"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70b32747c76ff5e1ddc3b369cddfd313"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushAttPlatform</b> (const arma::vec &atp)</td></tr>
+<tr class="separator:a70b32747c76ff5e1ddc3b369cddfd313"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a253ef61c0a055844d3f76e63c155141d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253ef61c0a055844d3f76e63c155141d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushPosPlatform</b> (const arma::vec &ppl)</td></tr>
+<tr class="separator:a253ef61c0a055844d3f76e63c155141d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad54a373da77fc081be5bc0e76b73e9fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad54a373da77fc081be5bc0e76b73e9fa"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushPosGCP</b> (const arma::vec &pgcp)</td></tr>
+<tr class="separator:ad54a373da77fc081be5bc0e76b73e9fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2be455dc46c84f7bf3732f33aa27043b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2be455dc46c84f7bf3732f33aa27043b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushRow</b> (int r)</td></tr>
+<tr class="separator:a2be455dc46c84f7bf3732f33aa27043b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0267ecbf92af37f62f5588e0cd4a7aee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0267ecbf92af37f62f5588e0cd4a7aee"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushCol</b> (int c)</td></tr>
+<tr class="separator:a0267ecbf92af37f62f5588e0cd4a7aee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a611d9ec883d0b1fad060f431b58da1ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a611d9ec883d0b1fad060f431b58da1ef"></a>
+arma::vec </td><td class="memItemRight" valign="bottom"><b>getPosPlatform</b> (int index) const </td></tr>
+<tr class="separator:a611d9ec883d0b1fad060f431b58da1ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a802417cd4ba17895bec2c4aaf55dd76d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a802417cd4ba17895bec2c4aaf55dd76d"></a>
+arma::vec </td><td class="memItemRight" valign="bottom"><b>getAttPlatform</b> (int index) const </td></tr>
+<tr class="separator:a802417cd4ba17895bec2c4aaf55dd76d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12bdc967d5b33125a31b07f4f26fa9f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a12bdc967d5b33125a31b07f4f26fa9f5"></a>
+arma::vec </td><td class="memItemRight" valign="bottom"><b>getPosGCP</b> (int index) const </td></tr>
+<tr class="separator:a12bdc967d5b33125a31b07f4f26fa9f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44d3912a1cc90d488e9a67ab8469be95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44d3912a1cc90d488e9a67ab8469be95"></a>
+arma::vec </td><td class="memItemRight" valign="bottom"><b>getPos</b> (int index) const </td></tr>
+<tr class="separator:a44d3912a1cc90d488e9a67ab8469be95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad5c0ca5ff3b51581b7a0a3226dd61d75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5c0ca5ff3b51581b7a0a3226dd61d75"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getDistGeo</b> (int index) const </td></tr>
+<tr class="separator:ad5c0ca5ff3b51581b7a0a3226dd61d75"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f0b5f9fd790da18fca4b78952bf9f02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f0b5f9fd790da18fca4b78952bf9f02"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getRow</b> (int index) const </td></tr>
+<tr class="separator:a7f0b5f9fd790da18fca4b78952bf9f02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e82b34402dd311130b46ce416a65790"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e82b34402dd311130b46ce416a65790"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getCol</b> (int index) const </td></tr>
+<tr class="separator:a8e82b34402dd311130b46ce416a65790"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2f7a1f171ce1a21bd83aed92f6ba50d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2f7a1f171ce1a21bd83aed92f6ba50d"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getHeight</b> (int index) const </td></tr>
+<tr class="separator:ae2f7a1f171ce1a21bd83aed92f6ba50d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47f925646ac07008aac5d13cd2cce961"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47f925646ac07008aac5d13cd2cce961"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setBoresightAtt</b> (const arma::vec &bc_att)</td></tr>
+<tr class="separator:a47f925646ac07008aac5d13cd2cce961"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pksensormodel_8h_source.html#l00029">29</a> of file <a class="el" href="pksensormodel_8h_source.html">pksensormodel.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/apps/<a class="el" href="pksensormodel_8h_source.html">pksensormodel.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classDecrease__IndexValue-members.html b/doc/html/classDecrease__IndexValue-members.html
new file mode 100644
index 0000000..6710022
--- /dev/null
+++ b/doc/html/classDecrease__IndexValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Decrease_IndexValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classDecrease__IndexValue.html">Decrease_IndexValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const IndexValue &pv1, const IndexValue &pv2) const (defined in <a class="el" href="classDecrease__IndexValue.html">Decrease_IndexValue</a>)</td><td class="entry"><a class="el" href="classDecrease__IndexValue.html">Decrease_IndexValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classDecrease__IndexValue.html b/doc/html/classDecrease__IndexValue.html
new file mode 100644
index 0000000..dff5d4d
--- /dev/null
+++ b/doc/html/classDecrease__IndexValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Decrease_IndexValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classDecrease__IndexValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Decrease_IndexValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac648dc73ce228c949ce55bff33f08e08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac648dc73ce228c949ce55bff33f08e08"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structIndexValue.html">IndexValue</a> &pv1, const <a class="el" href="structIndexValue.html">IndexValue</a> &pv2) const </td></tr>
+<tr class="separator:ac648dc73ce228c949ce55bff33f08e08"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="IndexValue_8h_source.html#l00033">33</a> of file <a class="el" href="IndexValue_8h_source.html">IndexValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="IndexValue_8h_source.html">IndexValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classDecrease__PosValue-members.html b/doc/html/classDecrease__PosValue-members.html
new file mode 100644
index 0000000..9b32609
--- /dev/null
+++ b/doc/html/classDecrease__PosValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Decrease_PosValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classDecrease__PosValue.html">Decrease_PosValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const PosValue &pv1, const PosValue &pv2) const (defined in <a class="el" href="classDecrease__PosValue.html">Decrease_PosValue</a>)</td><td class="entry"><a class="el" href="classDecrease__PosValue.html">Decrease_PosValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classDecrease__PosValue.html b/doc/html/classDecrease__PosValue.html
new file mode 100644
index 0000000..7f91858
--- /dev/null
+++ b/doc/html/classDecrease__PosValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Decrease_PosValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classDecrease__PosValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Decrease_PosValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5e193d31228963c7d9f00a58bdba4bcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e193d31228963c7d9f00a58bdba4bcc"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structPosValue.html">PosValue</a> &pv1, const <a class="el" href="structPosValue.html">PosValue</a> &pv2) const </td></tr>
+<tr class="separator:a5e193d31228963c7d9f00a58bdba4bcc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="PosValue_8h_source.html#l00034">34</a> of file <a class="el" href="PosValue_8h_source.html">PosValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="PosValue_8h_source.html">PosValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classEgcs-members.html b/doc/html/classEgcs-members.html
new file mode 100644
index 0000000..7688b51
--- /dev/null
+++ b/doc/html/classEgcs-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Egcs Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classEgcs.html">Egcs</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cell2bb</b>(const std::string &cellCode, int &ulx, int &uly, int &lrx, int &lry) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cell2level</b>(const std::string &cellCode) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cell2mid</b>(const std::string &cellCode, double &midX, double &midY) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Egcs</b>() (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Egcs</b>(unsigned short level) (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>force2grid</b>(double &ulx, double &uly, double &lrx, double &lry) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>geo2cell</b>(double x, double y) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLevel</b>() const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getResolution</b>() const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getSize</b>() const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>res2level</b>(double resolution) const (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setLevel</b>(unsigned short level) (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Egcs</b>() (defined in <a class="el" href="classEgcs.html">Egcs</a>)</td><td class="entry"><a class="el" href="classEgcs.html">Egcs</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classEgcs.html b/doc/html/classEgcs.html
new file mode 100644
index 0000000..c1e4da7
--- /dev/null
+++ b/doc/html/classEgcs.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Egcs Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classEgcs-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Egcs Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ae7d655d93cfbdc6f877158f1fdc8c58d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7d655d93cfbdc6f877158f1fdc8c58d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Egcs</b> (unsigned short level)</td></tr>
+<tr class="separator:ae7d655d93cfbdc6f877158f1fdc8c58d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adfac941cc4c00e067d3dc2c388711cc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfac941cc4c00e067d3dc2c388711cc7"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>cell2level</b> (const std::string &cellCode) const </td></tr>
+<tr class="separator:adfac941cc4c00e067d3dc2c388711cc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a003e539f022ed1ce4b75824d2c671c2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a003e539f022ed1ce4b75824d2c671c2d"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>geo2cell</b> (double x, double y) const </td></tr>
+<tr class="separator:a003e539f022ed1ce4b75824d2c671c2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2bc79667190d4384f302d0019c8f74b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bc79667190d4384f302d0019c8f74b8"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getSize</b> () const </td></tr>
+<tr class="separator:a2bc79667190d4384f302d0019c8f74b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a817c994e7926fccb770d32a9726d68af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a817c994e7926fccb770d32a9726d68af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setLevel</b> (unsigned short level)</td></tr>
+<tr class="separator:a817c994e7926fccb770d32a9726d68af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d6d44b4006c7d4b1f8cd3d0e52bc030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d6d44b4006c7d4b1f8cd3d0e52bc030"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>getLevel</b> () const </td></tr>
+<tr class="separator:a2d6d44b4006c7d4b1f8cd3d0e52bc030"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52f656132b692bc6acf0bef5723be988"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52f656132b692bc6acf0bef5723be988"></a>
+unsigned short </td><td class="memItemRight" valign="bottom"><b>res2level</b> (double resolution) const </td></tr>
+<tr class="separator:a52f656132b692bc6acf0bef5723be988"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e5393e0962ee0764c976e44f6161b63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e5393e0962ee0764c976e44f6161b63"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getResolution</b> () const </td></tr>
+<tr class="separator:a2e5393e0962ee0764c976e44f6161b63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cedbd99412f12c5ba90de0d984c0916"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cedbd99412f12c5ba90de0d984c0916"></a>
+void </td><td class="memItemRight" valign="bottom"><b>force2grid</b> (double &ulx, double &uly, double &lrx, double &lry) const </td></tr>
+<tr class="separator:a4cedbd99412f12c5ba90de0d984c0916"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d4ef72bc236b2a49606e408e6a9d5b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d4ef72bc236b2a49606e408e6a9d5b8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cell2bb</b> (const std::string &cellCode, int &ulx, int &uly, int &lrx, int &lry) const </td></tr>
+<tr class="separator:a6d4ef72bc236b2a49606e408e6a9d5b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa901b8f562c00228449526c5868de3f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa901b8f562c00228449526c5868de3f8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cell2mid</b> (const std::string &cellCode, double &midX, double &midY) const </td></tr>
+<tr class="separator:aa901b8f562c00228449526c5868de3f8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="Egcs_8h_source.html#l00026">26</a> of file <a class="el" href="Egcs_8h_source.html">Egcs.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Egcs_8h_source.html">Egcs.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Egcs_8cc_source.html">Egcs.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFANN_1_1neural__net-members.html b/doc/html/classFANN_1_1neural__net-members.html
new file mode 100644
index 0000000..f74a9b6
--- /dev/null
+++ b/doc/html/classFANN_1_1neural__net-members.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>FANN</b></li><li class="navelem"><a class="el" href="classFANN_1_1neural__net.html">neural_net</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FANN::neural_net Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ann</b> (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cascadetrain_on_data</b>(const training_data &data, unsigned int max_neurons, unsigned int neurons_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cascadetrain_on_file</b>(const std::string &filename, unsigned int max_neurons, unsigned int neurons_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clear_scaling_params</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>create_from_file</b>(const std::string &configuration_file) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>create_shortcut</b>(unsigned int num_layers,...) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>create_shortcut_array</b>(unsigned int num_layers, const unsigned int *layers) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>create_sparse</b>(float connection_rate, unsigned int num_layers,...) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>create_sparse_array</b>(float connection_rate, unsigned int num_layers, const unsigned int *layers) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>create_standard</b>(unsigned int num_layers,...) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>create_standard_array</b>(unsigned int num_layers, const unsigned int *layers) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cross_validation</b>(std::vector< Vector2d< fann_type > > &trainingFeatures, unsigned int ntraining, unsigned short cv, unsigned int max_epochs, float desired_error, std::vector< unsigned short > &referenceVector, std::vector< unsigned short > &outputVector, short verbose=0) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFAN [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cross_validation</b>(std::vector< std::vector< fann_type > > &input, std::vector< std::vector< fann_type > > &output, unsigned short cv, unsigned int max_epochs, float desired_error, std::vector< std::vector< fann_type > > &referenceVector, std::vector< std::vector< fann_type > > &outputVector, short verbose=0) (defined in <a class="el" href="classFANN_1_1neural__net. [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>descale_input</b>(fann_type *input_vector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>descale_output</b>(fann_type *output_vector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>descale_train</b>(training_data &data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>destroy</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_activation_function</b>(int layer, int neuron) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_activation_steepness</b>(int layer, int neuron) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_bias_array</b>(unsigned int *bias) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_bit_fail</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_bit_fail_limit</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_activation_functions</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_activation_functions_count</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_activation_steepnesses</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_activation_steepnesses_count</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_candidate_change_fraction</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_candidate_limit</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_candidate_stagnation_epochs</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_max_cand_epochs</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_max_out_epochs</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_num_candidate_groups</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_num_candidates</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_output_change_fraction</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_cascade_output_stagnation_epochs</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cascade_weight_multiplier</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_connection_array</b>(connection *connections) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_connection_array</b>(std::vector< connection > &convector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_connection_rate</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_errno</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_errstr</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_layer_array</b>(unsigned int *layers) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_layer_array</b>(std::vector< unsigned int > vlayers) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_learning_momentum</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_learning_rate</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_MSE</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_network_type</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_num_input</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_num_layers</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_num_output</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_quickprop_decay</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_quickprop_mu</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_rprop_decrease_factor</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_rprop_delta_max</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_rprop_delta_min</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_rprop_increase_factor</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_total_connections</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_total_neurons</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_train_error_function</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_train_stop_function</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_training_algorithm</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init_weights</b>(const training_data &data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>neural_net</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>print_connections</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>print_error</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>print_parameters</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>randomize_weights</b>(fann_type min_weight, fann_type max_weight) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_errno</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_errstr</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_MSE</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run</b>(fann_type *input) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(std::vector< fann_type > input) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>save</b>(const std::string &configuration_file) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>save_to_fixed</b>(const std::string &configuration_file) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale_input</b>(fann_type *input_vector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale_output</b>(fann_type *output_vector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale_train</b>(training_data &data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_activation_function</b>(activation_function_enum activation_function, int layer, int neuron) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_activation_function_hidden</b>(activation_function_enum activation_function) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_activation_function_layer</b>(activation_function_enum activation_function, int layer) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_activation_function_output</b>(activation_function_enum activation_function) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_activation_steepness</b>(fann_type steepness, int layer, int neuron) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_activation_steepness_hidden</b>(fann_type steepness) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_activation_steepness_layer</b>(fann_type steepness, int layer) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_activation_steepness_output</b>(fann_type steepness) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_bit_fail_limit</b>(fann_type bit_fail_limit) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_callback</b>(callback_type callback, void *user_data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_activation_functions</b>(activation_function_enum *cascade_activation_functions, unsigned int cascade_activation_functions_count) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_cascade_activation_steepnesses</b>(fann_type *cascade_activation_steepnesses, unsigned int cascade_activation_steepnesses_count) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_candidate_change_fraction</b>(float cascade_candidate_change_fraction) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_cascade_candidate_limit</b>(fann_type cascade_candidate_limit) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_candidate_stagnation_epochs</b>(unsigned int cascade_candidate_stagnation_epochs) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_cascade_max_cand_epochs</b>(unsigned int cascade_max_cand_epochs) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_max_out_epochs</b>(unsigned int cascade_max_out_epochs) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_cascade_num_candidate_groups</b>(unsigned int cascade_num_candidate_groups) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_output_change_fraction</b>(float cascade_output_change_fraction) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_cascade_output_stagnation_epochs</b>(unsigned int cascade_output_stagnation_epochs) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_cascade_weight_multiplier</b>(fann_type cascade_weight_multiplier) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_error_log</b>(FILE *log_file) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_input_scaling_params</b>(const training_data &data, float new_input_min, float new_input_max) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_learning_momentum</b>(float learning_momentum) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_learning_rate</b>(float learning_rate) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_output_scaling_params</b>(const training_data &data, float new_output_min, float new_output_max) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_quickprop_decay</b>(float quickprop_decay) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_quickprop_mu</b>(float quickprop_mu) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_rprop_decrease_factor</b>(float rprop_decrease_factor) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_rprop_delta_max</b>(float rprop_delta_max) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_rprop_delta_min</b>(float rprop_delta_min) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_rprop_increase_factor</b>(float rprop_increase_factor) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_scaling_params</b>(const training_data &data, float new_input_min, float new_input_max, float new_output_min, float new_output_max) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_train_error_function</b>(error_function_enum train_error_function) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_train_stop_function</b>(stop_function_enum train_stop_function) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_training_algorithm</b>(training_algorithm_enum training_algorithm) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_weight</b>(unsigned int from_neuron, unsigned int to_neuron, fann_type weight) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_weight_array</b>(connection *connections, unsigned int num_connections) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_weight_array</b>(std::vector< connection > convector) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test</b>(fann_type *input, fann_type *desired_output) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>test_data</b>(const training_data &data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_data</b>(const std::vector< Vector2d< fann_type > > &input, unsigned int num_data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>train</b>(fann_type *input, fann_type *desired_output) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>train_epoch</b>(const training_data &data) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>train_on_data</b>(const training_data &data, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>train_on_data</b>(const std::vector< std::vector< fann_type > > &input, const std::vector< std::vector< fann_type > > &output, bool initWeights, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>train_on_data</b>(const std::vector< Vector2d< fann_type > > &input, unsigned int num_data, bool initWeights, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>train_on_file</b>(const std::string &filename, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error) (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~neural_net</b>() (defined in <a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a>)</td><td class="entry"><a class="el" href="classFANN_1_1neural__net.html">FANN::neural_net</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFANN_1_1neural__net.html b/doc/html/classFANN_1_1neural__net.html
new file mode 100644
index 0000000..488fe30
--- /dev/null
+++ b/doc/html/classFANN_1_1neural__net.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: FANN::neural_net Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>FANN</b></li><li class="navelem"><a class="el" href="classFANN_1_1neural__net.html">neural_net</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classFANN_1_1neural__net-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">FANN::neural_net Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aae038cbdd661b77bc53c76ad672e281b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae038cbdd661b77bc53c76ad672e281b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>destroy</b> ()</td></tr>
+<tr class="separator:aae038cbdd661b77bc53c76ad672e281b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7b8a39f555274eefe9cd9bfdf093e62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7b8a39f555274eefe9cd9bfdf093e62"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_standard</b> (unsigned int num_layers,...)</td></tr>
+<tr class="separator:ac7b8a39f555274eefe9cd9bfdf093e62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c21b553afadeed920ab436832421b79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c21b553afadeed920ab436832421b79"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_standard_array</b> (unsigned int num_layers, const unsigned int *layers)</td></tr>
+<tr class="separator:a1c21b553afadeed920ab436832421b79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeac17b291f2a1d67d7bf5d96022c6e01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeac17b291f2a1d67d7bf5d96022c6e01"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_sparse</b> (float connection_rate, unsigned int num_layers,...)</td></tr>
+<tr class="separator:aeac17b291f2a1d67d7bf5d96022c6e01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa21a2e593a66a31aeae2d57406100f27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa21a2e593a66a31aeae2d57406100f27"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_sparse_array</b> (float connection_rate, unsigned int num_layers, const unsigned int *layers)</td></tr>
+<tr class="separator:aa21a2e593a66a31aeae2d57406100f27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83004c0bef2d0de62956336e946bb166"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83004c0bef2d0de62956336e946bb166"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_shortcut</b> (unsigned int num_layers,...)</td></tr>
+<tr class="separator:a83004c0bef2d0de62956336e946bb166"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e75632d5749ff1ae05f451c46337e1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e75632d5749ff1ae05f451c46337e1b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_shortcut_array</b> (unsigned int num_layers, const unsigned int *layers)</td></tr>
+<tr class="separator:a9e75632d5749ff1ae05f451c46337e1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63493c67c2b50f9e1f422c9f4024aa65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63493c67c2b50f9e1f422c9f4024aa65"></a>
+fann_type * </td><td class="memItemRight" valign="bottom"><b>run</b> (fann_type *input)</td></tr>
+<tr class="separator:a63493c67c2b50f9e1f422c9f4024aa65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9eee05109ca00bbe970af41575533321"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eee05109ca00bbe970af41575533321"></a>
+std::vector< fann_type > </td><td class="memItemRight" valign="bottom"><b>run</b> (std::vector< fann_type > input)</td></tr>
+<tr class="separator:a9eee05109ca00bbe970af41575533321"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3268079647371876b2d22243bbc5735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3268079647371876b2d22243bbc5735"></a>
+void </td><td class="memItemRight" valign="bottom"><b>randomize_weights</b> (fann_type min_weight, fann_type max_weight)</td></tr>
+<tr class="separator:ad3268079647371876b2d22243bbc5735"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed92e50a4503a0e5dec0019e285c6a8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed92e50a4503a0e5dec0019e285c6a8e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>init_weights</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:aed92e50a4503a0e5dec0019e285c6a8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aabefeb6a66ebbda73406675e39678823"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aabefeb6a66ebbda73406675e39678823"></a>
+void </td><td class="memItemRight" valign="bottom"><b>print_connections</b> ()</td></tr>
+<tr class="separator:aabefeb6a66ebbda73406675e39678823"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeafe20cf50eafba57633641af92d9345"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeafe20cf50eafba57633641af92d9345"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>create_from_file</b> (const std::string &configuration_file)</td></tr>
+<tr class="separator:aeafe20cf50eafba57633641af92d9345"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57f381a5b342d9b97f7312bedcd3fa9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57f381a5b342d9b97f7312bedcd3fa9f"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>save</b> (const std::string &configuration_file)</td></tr>
+<tr class="separator:a57f381a5b342d9b97f7312bedcd3fa9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6131ea1af23cbd58ecc756415d764a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6131ea1af23cbd58ecc756415d764a4"></a>
+int </td><td class="memItemRight" valign="bottom"><b>save_to_fixed</b> (const std::string &configuration_file)</td></tr>
+<tr class="separator:ab6131ea1af23cbd58ecc756415d764a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0624359c5fb3421fa7a04ed8d6e16f3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0624359c5fb3421fa7a04ed8d6e16f3f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>train</b> (fann_type *input, fann_type *desired_output)</td></tr>
+<tr class="separator:a0624359c5fb3421fa7a04ed8d6e16f3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1310cf113fc1019f27c73628b48ce823"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1310cf113fc1019f27c73628b48ce823"></a>
+float </td><td class="memItemRight" valign="bottom"><b>train_epoch</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:a1310cf113fc1019f27c73628b48ce823"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa463863e07b072940814b20810c24b2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa463863e07b072940814b20810c24b2e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>train_on_data</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error)</td></tr>
+<tr class="separator:aa463863e07b072940814b20810c24b2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7398b0474410e8b9348a98adf781427a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7398b0474410e8b9348a98adf781427a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>train_on_data</b> (const std::vector< std::vector< fann_type > > &input, const std::vector< std::vector< fann_type > > &output, bool initWeights, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error)</td></tr>
+<tr class="separator:a7398b0474410e8b9348a98adf781427a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa206258a96a2aab2b18e7c80c35471ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa206258a96a2aab2b18e7c80c35471ea"></a>
+void </td><td class="memItemRight" valign="bottom"><b>train_on_data</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< fann_type > > &input, unsigned int num_data, bool initWeights, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error)</td></tr>
+<tr class="separator:aa206258a96a2aab2b18e7c80c35471ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a311385843914df05bd009acfac474bfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a311385843914df05bd009acfac474bfe"></a>
+float </td><td class="memItemRight" valign="bottom"><b>cross_validation</b> (std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< fann_type > > &trainingFeatures, unsigned int ntraining, unsigned short cv, unsigned int max_epochs, float desired_error, std::vector< unsigned short > &referenceVector, std::vector< unsigned short > &outputVector, short verbose=0)</td></tr>
+<tr class="separator:a311385843914df05bd009acfac474bfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef16317d62e3e4271776d820f456568a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef16317d62e3e4271776d820f456568a"></a>
+float </td><td class="memItemRight" valign="bottom"><b>cross_validation</b> (std::vector< std::vector< fann_type > > &input, std::vector< std::vector< fann_type > > &output, unsigned short cv, unsigned int max_epochs, float desired_error, std::vector< std::vector< fann_type > > &referenceVector, std::vector< std::vector< fann_type > > &outputVector, short verbose=0)</td></tr>
+<tr class="separator:aef16317d62e3e4271776d820f456568a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae11cf1df01d9cfd62785c73036466611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae11cf1df01d9cfd62785c73036466611"></a>
+void </td><td class="memItemRight" valign="bottom"><b>train_on_file</b> (const std::string &filename, unsigned int max_epochs, unsigned int epochs_between_reports, float desired_error)</td></tr>
+<tr class="separator:ae11cf1df01d9cfd62785c73036466611"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f2388591cf30c8f63b34677c9a38a8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f2388591cf30c8f63b34677c9a38a8c"></a>
+fann_type * </td><td class="memItemRight" valign="bottom"><b>test</b> (fann_type *input, fann_type *desired_output)</td></tr>
+<tr class="separator:a9f2388591cf30c8f63b34677c9a38a8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2926cd03259ec259f800a66addef932a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2926cd03259ec259f800a66addef932a"></a>
+float </td><td class="memItemRight" valign="bottom"><b>test_data</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:a2926cd03259ec259f800a66addef932a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a497b15a4ccbcc794fc9e147a8bdcabde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a497b15a4ccbcc794fc9e147a8bdcabde"></a>
+float </td><td class="memItemRight" valign="bottom"><b>test_data</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< fann_type > > &input, unsigned int num_data)</td></tr>
+<tr class="separator:a497b15a4ccbcc794fc9e147a8bdcabde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d2e0c7e47607efc7a848ca2505fe134"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d2e0c7e47607efc7a848ca2505fe134"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_MSE</b> ()</td></tr>
+<tr class="separator:a1d2e0c7e47607efc7a848ca2505fe134"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5085afbf5ccc8015f6b25615162cf57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5085afbf5ccc8015f6b25615162cf57"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reset_MSE</b> ()</td></tr>
+<tr class="separator:ab5085afbf5ccc8015f6b25615162cf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae929515e7c19f12ccda3200fc0177255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae929515e7c19f12ccda3200fc0177255"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_callback</b> (callback_type callback, void *user_data)</td></tr>
+<tr class="separator:ae929515e7c19f12ccda3200fc0177255"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac68f9a647053a127808f9535dbcd2394"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac68f9a647053a127808f9535dbcd2394"></a>
+void </td><td class="memItemRight" valign="bottom"><b>print_parameters</b> ()</td></tr>
+<tr class="separator:ac68f9a647053a127808f9535dbcd2394"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89b4040b6de1e4b22a5d87a9205518a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89b4040b6de1e4b22a5d87a9205518a2"></a>
+training_algorithm_enum </td><td class="memItemRight" valign="bottom"><b>get_training_algorithm</b> ()</td></tr>
+<tr class="separator:a89b4040b6de1e4b22a5d87a9205518a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad19a45447682109c18fcca72122bb7f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad19a45447682109c18fcca72122bb7f2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_training_algorithm</b> (training_algorithm_enum training_algorithm)</td></tr>
+<tr class="separator:ad19a45447682109c18fcca72122bb7f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1a52286c4e831810da58234c9412800"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1a52286c4e831810da58234c9412800"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_learning_rate</b> ()</td></tr>
+<tr class="separator:ad1a52286c4e831810da58234c9412800"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a670ddea28144956978db1afa03961a92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a670ddea28144956978db1afa03961a92"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_learning_rate</b> (float learning_rate)</td></tr>
+<tr class="separator:a670ddea28144956978db1afa03961a92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6facd682c53f1d22c1d26994061e16a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6facd682c53f1d22c1d26994061e16a6"></a>
+activation_function_enum </td><td class="memItemRight" valign="bottom"><b>get_activation_function</b> (int layer, int neuron)</td></tr>
+<tr class="separator:a6facd682c53f1d22c1d26994061e16a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d86f7c8d04e6289d52f4231d6c3b5aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d86f7c8d04e6289d52f4231d6c3b5aa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_function</b> (activation_function_enum activation_function, int layer, int neuron)</td></tr>
+<tr class="separator:a6d86f7c8d04e6289d52f4231d6c3b5aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d630f3e724af938c22d46be69945def"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d630f3e724af938c22d46be69945def"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_function_layer</b> (activation_function_enum activation_function, int layer)</td></tr>
+<tr class="separator:a3d630f3e724af938c22d46be69945def"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af74550a8e663abb1bab0485c111255fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af74550a8e663abb1bab0485c111255fe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_function_hidden</b> (activation_function_enum activation_function)</td></tr>
+<tr class="separator:af74550a8e663abb1bab0485c111255fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab016140ccefaf7ea266f6c26e9803361"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab016140ccefaf7ea266f6c26e9803361"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_function_output</b> (activation_function_enum activation_function)</td></tr>
+<tr class="separator:ab016140ccefaf7ea266f6c26e9803361"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af76382d992c0d1b5f7100a9e9ead6af6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af76382d992c0d1b5f7100a9e9ead6af6"></a>
+fann_type </td><td class="memItemRight" valign="bottom"><b>get_activation_steepness</b> (int layer, int neuron)</td></tr>
+<tr class="separator:af76382d992c0d1b5f7100a9e9ead6af6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2eb2de9950e369b529cff4afd7d8f138"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2eb2de9950e369b529cff4afd7d8f138"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_steepness</b> (fann_type steepness, int layer, int neuron)</td></tr>
+<tr class="separator:a2eb2de9950e369b529cff4afd7d8f138"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0dad9ac63a2b7626e689e190a0ae0085"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dad9ac63a2b7626e689e190a0ae0085"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_steepness_layer</b> (fann_type steepness, int layer)</td></tr>
+<tr class="separator:a0dad9ac63a2b7626e689e190a0ae0085"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d11fb54bdb1cf187f091fc89470dd01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d11fb54bdb1cf187f091fc89470dd01"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_steepness_hidden</b> (fann_type steepness)</td></tr>
+<tr class="separator:a3d11fb54bdb1cf187f091fc89470dd01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4885a57ecda9fff1dc1d3fd532632edd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4885a57ecda9fff1dc1d3fd532632edd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_activation_steepness_output</b> (fann_type steepness)</td></tr>
+<tr class="separator:a4885a57ecda9fff1dc1d3fd532632edd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaafec47807a33194092b32459139a6c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaafec47807a33194092b32459139a6c7"></a>
+error_function_enum </td><td class="memItemRight" valign="bottom"><b>get_train_error_function</b> ()</td></tr>
+<tr class="separator:aaafec47807a33194092b32459139a6c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf603ca77bf090a8eb16f89404afd9d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf603ca77bf090a8eb16f89404afd9d2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_error_function</b> (error_function_enum train_error_function)</td></tr>
+<tr class="separator:abf603ca77bf090a8eb16f89404afd9d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61897d00f7dc83116f29964bbbac9f32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61897d00f7dc83116f29964bbbac9f32"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_quickprop_decay</b> ()</td></tr>
+<tr class="separator:a61897d00f7dc83116f29964bbbac9f32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a144de645d7cc5e8baae9b321c06a6044"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a144de645d7cc5e8baae9b321c06a6044"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_quickprop_decay</b> (float quickprop_decay)</td></tr>
+<tr class="separator:a144de645d7cc5e8baae9b321c06a6044"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf3abb83521e2905cdb93fa7af89f73a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf3abb83521e2905cdb93fa7af89f73a"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_quickprop_mu</b> ()</td></tr>
+<tr class="separator:adf3abb83521e2905cdb93fa7af89f73a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24f6f41d2bf91b1e5ca7ecb7d6a39e9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24f6f41d2bf91b1e5ca7ecb7d6a39e9a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_quickprop_mu</b> (float quickprop_mu)</td></tr>
+<tr class="separator:a24f6f41d2bf91b1e5ca7ecb7d6a39e9a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21d14bec12c055b423cf63e06dcc9c50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21d14bec12c055b423cf63e06dcc9c50"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_rprop_increase_factor</b> ()</td></tr>
+<tr class="separator:a21d14bec12c055b423cf63e06dcc9c50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e3594156e6211ea999554940a18a8df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e3594156e6211ea999554940a18a8df"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_rprop_increase_factor</b> (float rprop_increase_factor)</td></tr>
+<tr class="separator:a4e3594156e6211ea999554940a18a8df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c1ee8106359dd5a520e72c489af33c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c1ee8106359dd5a520e72c489af33c2"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_rprop_decrease_factor</b> ()</td></tr>
+<tr class="separator:a3c1ee8106359dd5a520e72c489af33c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a81dd2d696dd01c9e700b0cfb08634a87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81dd2d696dd01c9e700b0cfb08634a87"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_rprop_decrease_factor</b> (float rprop_decrease_factor)</td></tr>
+<tr class="separator:a81dd2d696dd01c9e700b0cfb08634a87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a655c46239e087a56390467a10222f31e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a655c46239e087a56390467a10222f31e"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_rprop_delta_min</b> ()</td></tr>
+<tr class="separator:a655c46239e087a56390467a10222f31e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9df02843c1d3c85c678cd76229f794b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9df02843c1d3c85c678cd76229f794b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_rprop_delta_min</b> (float rprop_delta_min)</td></tr>
+<tr class="separator:a9df02843c1d3c85c678cd76229f794b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acee39357c82fa65305d0f21d68ab482f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acee39357c82fa65305d0f21d68ab482f"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_rprop_delta_max</b> ()</td></tr>
+<tr class="separator:acee39357c82fa65305d0f21d68ab482f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8a4c67ef624f7b06eb23cd74a432ed8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8a4c67ef624f7b06eb23cd74a432ed8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_rprop_delta_max</b> (float rprop_delta_max)</td></tr>
+<tr class="separator:aa8a4c67ef624f7b06eb23cd74a432ed8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f9dee3d5d77c01ac46555da2ad9595c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f9dee3d5d77c01ac46555da2ad9595c"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_num_input</b> ()</td></tr>
+<tr class="separator:a9f9dee3d5d77c01ac46555da2ad9595c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abde06d6e2abd95b78c64b59a66c24c51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abde06d6e2abd95b78c64b59a66c24c51"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_num_output</b> ()</td></tr>
+<tr class="separator:abde06d6e2abd95b78c64b59a66c24c51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef0ae6119865a3f9cd9bf5b3a39d2cdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef0ae6119865a3f9cd9bf5b3a39d2cdf"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_total_neurons</b> ()</td></tr>
+<tr class="separator:aef0ae6119865a3f9cd9bf5b3a39d2cdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5dfbfa7c1ae66b96f8b22c3476f21825"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5dfbfa7c1ae66b96f8b22c3476f21825"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_total_connections</b> ()</td></tr>
+<tr class="separator:a5dfbfa7c1ae66b96f8b22c3476f21825"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca419ec84fb1663d68a13038e3f07133"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca419ec84fb1663d68a13038e3f07133"></a>
+network_type_enum </td><td class="memItemRight" valign="bottom"><b>get_network_type</b> ()</td></tr>
+<tr class="separator:aca419ec84fb1663d68a13038e3f07133"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5af5ee01af35a79e5be18be3a68d2d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5af5ee01af35a79e5be18be3a68d2d1"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_connection_rate</b> ()</td></tr>
+<tr class="separator:ab5af5ee01af35a79e5be18be3a68d2d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af49f85272231bcb427a086a0ecc27300"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af49f85272231bcb427a086a0ecc27300"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_num_layers</b> ()</td></tr>
+<tr class="separator:af49f85272231bcb427a086a0ecc27300"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe4a5561f18fdf0fc2c988787f75e54e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe4a5561f18fdf0fc2c988787f75e54e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>get_layer_array</b> (unsigned int *layers)</td></tr>
+<tr class="separator:afe4a5561f18fdf0fc2c988787f75e54e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e8cc59189e2dff09a926d0e415d4604"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e8cc59189e2dff09a926d0e415d4604"></a>
+void </td><td class="memItemRight" valign="bottom"><b>get_layer_array</b> (std::vector< unsigned int > vlayers)</td></tr>
+<tr class="separator:a3e8cc59189e2dff09a926d0e415d4604"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac279aa3f36c25eeb54e270f1da8e2489"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac279aa3f36c25eeb54e270f1da8e2489"></a>
+void </td><td class="memItemRight" valign="bottom"><b>get_bias_array</b> (unsigned int *bias)</td></tr>
+<tr class="separator:ac279aa3f36c25eeb54e270f1da8e2489"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2eaba04b27af189a328e161ca03765c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2eaba04b27af189a328e161ca03765c4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>get_connection_array</b> (connection *connections)</td></tr>
+<tr class="separator:a2eaba04b27af189a328e161ca03765c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ab3adaf6e2f124a64b88d79f38fde0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ab3adaf6e2f124a64b88d79f38fde0b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>get_connection_array</b> (std::vector< connection > &convector)</td></tr>
+<tr class="separator:a9ab3adaf6e2f124a64b88d79f38fde0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47b67fd22216cdab2ceb589e08338f20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47b67fd22216cdab2ceb589e08338f20"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_weight_array</b> (connection *connections, unsigned int num_connections)</td></tr>
+<tr class="separator:a47b67fd22216cdab2ceb589e08338f20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2f368a8d835b4ed7b110d8d7ef178ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2f368a8d835b4ed7b110d8d7ef178ba"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_weight_array</b> (std::vector< connection > convector)</td></tr>
+<tr class="separator:ac2f368a8d835b4ed7b110d8d7ef178ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bf8c831fbe98015449f9e40e0413a5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bf8c831fbe98015449f9e40e0413a5b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_weight</b> (unsigned int from_neuron, unsigned int to_neuron, fann_type weight)</td></tr>
+<tr class="separator:a8bf8c831fbe98015449f9e40e0413a5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa9ed28e7c8a62fdeb11d7c074847149"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa9ed28e7c8a62fdeb11d7c074847149"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_learning_momentum</b> ()</td></tr>
+<tr class="separator:aaa9ed28e7c8a62fdeb11d7c074847149"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad987edc3731eb8f888842a284a4df5d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad987edc3731eb8f888842a284a4df5d4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_learning_momentum</b> (float learning_momentum)</td></tr>
+<tr class="separator:ad987edc3731eb8f888842a284a4df5d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68b0afbc7790922cb85d77a68757d568"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68b0afbc7790922cb85d77a68757d568"></a>
+stop_function_enum </td><td class="memItemRight" valign="bottom"><b>get_train_stop_function</b> ()</td></tr>
+<tr class="separator:a68b0afbc7790922cb85d77a68757d568"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af75b356381599083549a8dcf48d3132a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af75b356381599083549a8dcf48d3132a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_stop_function</b> (stop_function_enum train_stop_function)</td></tr>
+<tr class="separator:af75b356381599083549a8dcf48d3132a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6e6f2be8a7ce4d50ea1e1dc07a4cfae3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e6f2be8a7ce4d50ea1e1dc07a4cfae3"></a>
+fann_type </td><td class="memItemRight" valign="bottom"><b>get_bit_fail_limit</b> ()</td></tr>
+<tr class="separator:a6e6f2be8a7ce4d50ea1e1dc07a4cfae3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8b2141c20a171d5aeaa48b28597cb12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8b2141c20a171d5aeaa48b28597cb12"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_bit_fail_limit</b> (fann_type bit_fail_limit)</td></tr>
+<tr class="separator:ac8b2141c20a171d5aeaa48b28597cb12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a679b5365dce6627209612f7c26dc942b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a679b5365dce6627209612f7c26dc942b"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_bit_fail</b> ()</td></tr>
+<tr class="separator:a679b5365dce6627209612f7c26dc942b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa5ade49e42ea391a6dc0ce8953a5f69f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5ade49e42ea391a6dc0ce8953a5f69f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cascadetrain_on_data</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data, unsigned int max_neurons, unsigned int neurons_between_reports, float desired_error)</td></tr>
+<tr class="separator:aa5ade49e42ea391a6dc0ce8953a5f69f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e69c43e0528587a4fdc3181721df0bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e69c43e0528587a4fdc3181721df0bd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cascadetrain_on_file</b> (const std::string &filename, unsigned int max_neurons, unsigned int neurons_between_reports, float desired_error)</td></tr>
+<tr class="separator:a9e69c43e0528587a4fdc3181721df0bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7473d721f9aab0cf2be356ca15fe5563"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7473d721f9aab0cf2be356ca15fe5563"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_cascade_output_change_fraction</b> ()</td></tr>
+<tr class="separator:a7473d721f9aab0cf2be356ca15fe5563"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28ec8fa3a9a54e8a8ccad0556a56c4e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28ec8fa3a9a54e8a8ccad0556a56c4e6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_output_change_fraction</b> (float cascade_output_change_fraction)</td></tr>
+<tr class="separator:a28ec8fa3a9a54e8a8ccad0556a56c4e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a724eeede56f29eea6762d86f431d7a48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a724eeede56f29eea6762d86f431d7a48"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_output_stagnation_epochs</b> ()</td></tr>
+<tr class="separator:a724eeede56f29eea6762d86f431d7a48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7047191cb3ab337878706913696a9c56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7047191cb3ab337878706913696a9c56"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_output_stagnation_epochs</b> (unsigned int cascade_output_stagnation_epochs)</td></tr>
+<tr class="separator:a7047191cb3ab337878706913696a9c56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f6b8418b5c6f57054e9b3e99b6dd713"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f6b8418b5c6f57054e9b3e99b6dd713"></a>
+float </td><td class="memItemRight" valign="bottom"><b>get_cascade_candidate_change_fraction</b> ()</td></tr>
+<tr class="separator:a7f6b8418b5c6f57054e9b3e99b6dd713"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0fb576395cf6106b6421d422cc17a8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0fb576395cf6106b6421d422cc17a8a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_candidate_change_fraction</b> (float cascade_candidate_change_fraction)</td></tr>
+<tr class="separator:aa0fb576395cf6106b6421d422cc17a8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5147b146e56c02f4996eb5b74c752469"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5147b146e56c02f4996eb5b74c752469"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_candidate_stagnation_epochs</b> ()</td></tr>
+<tr class="separator:a5147b146e56c02f4996eb5b74c752469"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cb66e50ef23a176e839fa6e152be95c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cb66e50ef23a176e839fa6e152be95c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_candidate_stagnation_epochs</b> (unsigned int cascade_candidate_stagnation_epochs)</td></tr>
+<tr class="separator:a4cb66e50ef23a176e839fa6e152be95c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9bbc8f2c052124c36f95c4e466a5a5a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bbc8f2c052124c36f95c4e466a5a5a9"></a>
+fann_type </td><td class="memItemRight" valign="bottom"><b>get_cascade_weight_multiplier</b> ()</td></tr>
+<tr class="separator:a9bbc8f2c052124c36f95c4e466a5a5a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42276d8e3b022361d3200766a5d32e4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42276d8e3b022361d3200766a5d32e4c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_weight_multiplier</b> (fann_type cascade_weight_multiplier)</td></tr>
+<tr class="separator:a42276d8e3b022361d3200766a5d32e4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9d417bd5b1bb137bd182afa799d2c73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9d417bd5b1bb137bd182afa799d2c73"></a>
+fann_type </td><td class="memItemRight" valign="bottom"><b>get_cascade_candidate_limit</b> ()</td></tr>
+<tr class="separator:ae9d417bd5b1bb137bd182afa799d2c73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a932199042f7b6bfc8662e47e64f542b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a932199042f7b6bfc8662e47e64f542b7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_candidate_limit</b> (fann_type cascade_candidate_limit)</td></tr>
+<tr class="separator:a932199042f7b6bfc8662e47e64f542b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85e8741440cbdfef3614caf41f42278e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85e8741440cbdfef3614caf41f42278e"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_max_out_epochs</b> ()</td></tr>
+<tr class="separator:a85e8741440cbdfef3614caf41f42278e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad31cd0e41fd83e0c5988de13e3da7d6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad31cd0e41fd83e0c5988de13e3da7d6b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_max_out_epochs</b> (unsigned int cascade_max_out_epochs)</td></tr>
+<tr class="separator:ad31cd0e41fd83e0c5988de13e3da7d6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac1f469732c899a6f0167851e54c0a3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac1f469732c899a6f0167851e54c0a3c"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_max_cand_epochs</b> ()</td></tr>
+<tr class="separator:aac1f469732c899a6f0167851e54c0a3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adce351d0ee30faeaad1bbc34a51f880b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adce351d0ee30faeaad1bbc34a51f880b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_max_cand_epochs</b> (unsigned int cascade_max_cand_epochs)</td></tr>
+<tr class="separator:adce351d0ee30faeaad1bbc34a51f880b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a6adc37ba3bbb2afe05a4cbe5b958ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a6adc37ba3bbb2afe05a4cbe5b958ad"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_num_candidates</b> ()</td></tr>
+<tr class="separator:a2a6adc37ba3bbb2afe05a4cbe5b958ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c6bb171636a1ee64df88bac4ed366b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c6bb171636a1ee64df88bac4ed366b9"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_activation_functions_count</b> ()</td></tr>
+<tr class="separator:a2c6bb171636a1ee64df88bac4ed366b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a50113ed2976a34b9ea8cc766724c9c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50113ed2976a34b9ea8cc766724c9c7a"></a>
+activation_function_enum * </td><td class="memItemRight" valign="bottom"><b>get_cascade_activation_functions</b> ()</td></tr>
+<tr class="separator:a50113ed2976a34b9ea8cc766724c9c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf40b0985a6feb6c641fd9f4616b0872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf40b0985a6feb6c641fd9f4616b0872"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_activation_functions</b> (activation_function_enum *cascade_activation_functions, unsigned int cascade_activation_functions_count)</td></tr>
+<tr class="separator:aaf40b0985a6feb6c641fd9f4616b0872"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6154b08ffbd218d1ac5906d5608d191c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6154b08ffbd218d1ac5906d5608d191c"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_activation_steepnesses_count</b> ()</td></tr>
+<tr class="separator:a6154b08ffbd218d1ac5906d5608d191c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c57a4a2721ca17f4ea69f65724f4597"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c57a4a2721ca17f4ea69f65724f4597"></a>
+fann_type * </td><td class="memItemRight" valign="bottom"><b>get_cascade_activation_steepnesses</b> ()</td></tr>
+<tr class="separator:a9c57a4a2721ca17f4ea69f65724f4597"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad209354c8a7d1fc1ca6b4226acc34258"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad209354c8a7d1fc1ca6b4226acc34258"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_activation_steepnesses</b> (fann_type *cascade_activation_steepnesses, unsigned int cascade_activation_steepnesses_count)</td></tr>
+<tr class="separator:ad209354c8a7d1fc1ca6b4226acc34258"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cf102e61c1d62eb65da5f3ee3f26621"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cf102e61c1d62eb65da5f3ee3f26621"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_cascade_num_candidate_groups</b> ()</td></tr>
+<tr class="separator:a9cf102e61c1d62eb65da5f3ee3f26621"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a48e25b8bc3f0ce1f09d3948c0584d254"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48e25b8bc3f0ce1f09d3948c0584d254"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_cascade_num_candidate_groups</b> (unsigned int cascade_num_candidate_groups)</td></tr>
+<tr class="separator:a48e25b8bc3f0ce1f09d3948c0584d254"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a615a7a7de6b7b9fb81b9094200577849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a615a7a7de6b7b9fb81b9094200577849"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_train</b> (<a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:a615a7a7de6b7b9fb81b9094200577849"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61ae58bc040549bb27c9641f4d4b929f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61ae58bc040549bb27c9641f4d4b929f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>descale_train</b> (<a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:a61ae58bc040549bb27c9641f4d4b929f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0aa76cdd4dc0d3267abd20b4d5b26ce3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0aa76cdd4dc0d3267abd20b4d5b26ce3"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>set_input_scaling_params</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data, float new_input_min, float new_input_max)</td></tr>
+<tr class="separator:a0aa76cdd4dc0d3267abd20b4d5b26ce3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30e14ed1513936394ba1c98a896aad06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30e14ed1513936394ba1c98a896aad06"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>set_output_scaling_params</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data, float new_output_min, float new_output_max)</td></tr>
+<tr class="separator:a30e14ed1513936394ba1c98a896aad06"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3db9147e9a9d1c11ad0a85f6e4b9024"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3db9147e9a9d1c11ad0a85f6e4b9024"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>set_scaling_params</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data, float new_input_min, float new_input_max, float new_output_min, float new_output_max)</td></tr>
+<tr class="separator:ab3db9147e9a9d1c11ad0a85f6e4b9024"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a859bca375c3526a8ec24d4696bed12e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a859bca375c3526a8ec24d4696bed12e7"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>clear_scaling_params</b> ()</td></tr>
+<tr class="separator:a859bca375c3526a8ec24d4696bed12e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7082288c430b76bf19e54e42fc5a792"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7082288c430b76bf19e54e42fc5a792"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_input</b> (fann_type *input_vector)</td></tr>
+<tr class="separator:ae7082288c430b76bf19e54e42fc5a792"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a136514c0d0cbe8c696a434a280130735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a136514c0d0cbe8c696a434a280130735"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_output</b> (fann_type *output_vector)</td></tr>
+<tr class="separator:a136514c0d0cbe8c696a434a280130735"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8a0289a79cb15fe883058b1e76fb5be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8a0289a79cb15fe883058b1e76fb5be"></a>
+void </td><td class="memItemRight" valign="bottom"><b>descale_input</b> (fann_type *input_vector)</td></tr>
+<tr class="separator:ad8a0289a79cb15fe883058b1e76fb5be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3f7d7058b847f7ef402d331c3816967"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3f7d7058b847f7ef402d331c3816967"></a>
+void </td><td class="memItemRight" valign="bottom"><b>descale_output</b> (fann_type *output_vector)</td></tr>
+<tr class="separator:ae3f7d7058b847f7ef402d331c3816967"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa538a5427a2193a82d27f389165a7ab2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa538a5427a2193a82d27f389165a7ab2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_error_log</b> (FILE *log_file)</td></tr>
+<tr class="separator:aa538a5427a2193a82d27f389165a7ab2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38ffe2841a9dc5b39dce4832556aaee1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38ffe2841a9dc5b39dce4832556aaee1"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>get_errno</b> ()</td></tr>
+<tr class="separator:a38ffe2841a9dc5b39dce4832556aaee1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a009cba8a2ac3ca12498122d465878971"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a009cba8a2ac3ca12498122d465878971"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reset_errno</b> ()</td></tr>
+<tr class="separator:a009cba8a2ac3ca12498122d465878971"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95301b7f8d5dc615f23ae2cf0399a767"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95301b7f8d5dc615f23ae2cf0399a767"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reset_errstr</b> ()</td></tr>
+<tr class="separator:a95301b7f8d5dc615f23ae2cf0399a767"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f377610132f962377e792d8c0202f56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f377610132f962377e792d8c0202f56"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>get_errstr</b> ()</td></tr>
+<tr class="separator:a1f377610132f962377e792d8c0202f56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2e0c00e86e74caaa4d7b48122fc1f03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2e0c00e86e74caaa4d7b48122fc1f03"></a>
+void </td><td class="memItemRight" valign="bottom"><b>print_error</b> ()</td></tr>
+<tr class="separator:ad2e0c00e86e74caaa4d7b48122fc1f03"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:aa6df9f85818e1db3ed2dfcfad7c83b50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6df9f85818e1db3ed2dfcfad7c83b50"></a>
+struct fann * </td><td class="memItemRight" valign="bottom"><b>ann</b></td></tr>
+<tr class="separator:aa6df9f85818e1db3ed2dfcfad7c83b50"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="myfann__cpp_8h_source.html#l00978">978</a> of file <a class="el" href="myfann__cpp_8h_source.html">myfann_cpp.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="myfann__cpp_8h_source.html">myfann_cpp.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFANN_1_1training__data-members.html b/doc/html/classFANN_1_1training__data-members.html
new file mode 100644
index 0000000..0725795
--- /dev/null
+++ b/doc/html/classFANN_1_1training__data-members.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>FANN</b></li><li class="navelem"><a class="el" href="classFANN_1_1training__data.html">training_data</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FANN::training_data Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>create_train_from_callback</b>(unsigned int num_data, unsigned int num_input, unsigned int num_output, void(FANN_API *user_function)(unsigned int, unsigned int, unsigned int, fann_type *, fann_type *)) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>destroy_train</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_input</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_output</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length_train_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>merge_train_data</b>(const training_data &data) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>neural_net</b> (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>num_input_train_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_output_train_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>read_train_from_file</b>(const std::string &filename) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>save_train</b>(const std::string &filename) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>save_train_to_fixed</b>(const std::string &filename, unsigned int decimal_point) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale_input_train_data</b>(fann_type new_min, fann_type new_max) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale_output_train_data</b>(fann_type new_min, fann_type new_max) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale_train_data</b>(fann_type new_min, fann_type new_max) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_train_data</b>(unsigned int num_data, unsigned int num_input, fann_type **input, unsigned int num_output, fann_type **output) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_train_data</b>(const std::vector< std::vector< fann_type > > &input, const std::vector< std::vector< fann_type > > &output) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set_train_data</b>(const std::vector< std::vector< std::vector< fann_type > > > &input, unsigned int num_data) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_train_data</b>(const std::vector< Vector2d< fann_type > > &input, unsigned int num_data) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>shuffle_train_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>subset_train_data</b>(unsigned int pos, unsigned int length) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>train_data</b> (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>training_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>training_data</b>(const training_data &data) (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~training_data</b>() (defined in <a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a>)</td><td class="entry"><a class="el" href="classFANN_1_1training__data.html">FANN::training_data</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFANN_1_1training__data.html b/doc/html/classFANN_1_1training__data.html
new file mode 100644
index 0000000..4c62b9d
--- /dev/null
+++ b/doc/html/classFANN_1_1training__data.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: FANN::training_data Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>FANN</b></li><li class="navelem"><a class="el" href="classFANN_1_1training__data.html">training_data</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="classFANN_1_1training__data-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">FANN::training_data Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa52e4a9228f3baa9b66759f7baf0c62a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa52e4a9228f3baa9b66759f7baf0c62a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>training_data</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:aa52e4a9228f3baa9b66759f7baf0c62a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22a937d4454cb2f2f195777334fe24af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22a937d4454cb2f2f195777334fe24af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>destroy_train</b> ()</td></tr>
+<tr class="separator:a22a937d4454cb2f2f195777334fe24af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a120180cb5648bc52a0a767de7ed4dd0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a120180cb5648bc52a0a767de7ed4dd0f"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>read_train_from_file</b> (const std::string &filename)</td></tr>
+<tr class="separator:a120180cb5648bc52a0a767de7ed4dd0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeedc4222d9fd5f26b67a9a736f3e9610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeedc4222d9fd5f26b67a9a736f3e9610"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>save_train</b> (const std::string &filename)</td></tr>
+<tr class="separator:aeedc4222d9fd5f26b67a9a736f3e9610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a6a45e73d130c064256d6d0e7462dab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a6a45e73d130c064256d6d0e7462dab"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>save_train_to_fixed</b> (const std::string &filename, unsigned int decimal_point)</td></tr>
+<tr class="separator:a8a6a45e73d130c064256d6d0e7462dab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f66d54d0361a4dff65340fd31366114"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f66d54d0361a4dff65340fd31366114"></a>
+void </td><td class="memItemRight" valign="bottom"><b>shuffle_train_data</b> ()</td></tr>
+<tr class="separator:a6f66d54d0361a4dff65340fd31366114"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8917fa0ff1df82c32f024d78391556ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8917fa0ff1df82c32f024d78391556ed"></a>
+void </td><td class="memItemRight" valign="bottom"><b>merge_train_data</b> (const <a class="el" href="classFANN_1_1training__data.html">training_data</a> &data)</td></tr>
+<tr class="separator:a8917fa0ff1df82c32f024d78391556ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a358f5b99adef92a12cc101b499330cdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a358f5b99adef92a12cc101b499330cdf"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>length_train_data</b> ()</td></tr>
+<tr class="separator:a358f5b99adef92a12cc101b499330cdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af37463e7f013d81c94d0c691b73f4ab7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af37463e7f013d81c94d0c691b73f4ab7"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>num_input_train_data</b> ()</td></tr>
+<tr class="separator:af37463e7f013d81c94d0c691b73f4ab7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee76dbe970847440c67be4dff197eeed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee76dbe970847440c67be4dff197eeed"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>num_output_train_data</b> ()</td></tr>
+<tr class="separator:aee76dbe970847440c67be4dff197eeed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01327da03baf133f735aa6e86caaf98c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01327da03baf133f735aa6e86caaf98c"></a>
+fann_type ** </td><td class="memItemRight" valign="bottom"><b>get_input</b> ()</td></tr>
+<tr class="separator:a01327da03baf133f735aa6e86caaf98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefdd9769389276fbcd068c051b1c16b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefdd9769389276fbcd068c051b1c16b1"></a>
+fann_type ** </td><td class="memItemRight" valign="bottom"><b>get_output</b> ()</td></tr>
+<tr class="separator:aefdd9769389276fbcd068c051b1c16b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ed299569854f7340ade96c55cb3b516"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ed299569854f7340ade96c55cb3b516"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_data</b> (unsigned int num_data, unsigned int num_input, fann_type **input, unsigned int num_output, fann_type **output)</td></tr>
+<tr class="separator:a4ed299569854f7340ade96c55cb3b516"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa335fa30f35b5662f038259f24a15a51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa335fa30f35b5662f038259f24a15a51"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_data</b> (const std::vector< std::vector< fann_type > > &input, const std::vector< std::vector< fann_type > > &output)</td></tr>
+<tr class="separator:aa335fa30f35b5662f038259f24a15a51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3302c1ed32b32f0e17430be4ce5adfab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3302c1ed32b32f0e17430be4ce5adfab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_data</b> (const std::vector< std::vector< std::vector< fann_type > > > &input, unsigned int num_data)</td></tr>
+<tr class="separator:a3302c1ed32b32f0e17430be4ce5adfab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aebdfa39d41d85f4fb69a090fe0be37b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebdfa39d41d85f4fb69a090fe0be37b4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_train_data</b> (const std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< fann_type > > &input, unsigned int num_data)</td></tr>
+<tr class="separator:aebdfa39d41d85f4fb69a090fe0be37b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1062073d6f679ffb77dee0741c42599"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1062073d6f679ffb77dee0741c42599"></a>
+void </td><td class="memItemRight" valign="bottom"><b>create_train_from_callback</b> (unsigned int num_data, unsigned int num_input, unsigned int num_output, void(FANN_API *user_function)(unsigned int, unsigned int, unsigned int, fann_type *, fann_type *))</td></tr>
+<tr class="separator:ac1062073d6f679ffb77dee0741c42599"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfe7df8c3967ecb2bb7250a8b42e4392"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfe7df8c3967ecb2bb7250a8b42e4392"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_input_train_data</b> (fann_type new_min, fann_type new_max)</td></tr>
+<tr class="separator:acfe7df8c3967ecb2bb7250a8b42e4392"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6c4c759abbd493fc48d30a94980e6a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac6c4c759abbd493fc48d30a94980e6a6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_output_train_data</b> (fann_type new_min, fann_type new_max)</td></tr>
+<tr class="separator:ac6c4c759abbd493fc48d30a94980e6a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9bb9da8e78c9022bf856df3a21e0eff0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bb9da8e78c9022bf856df3a21e0eff0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale_train_data</b> (fann_type new_min, fann_type new_max)</td></tr>
+<tr class="separator:a9bb9da8e78c9022bf856df3a21e0eff0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe92d0480400ce6ce946a9a344a4c040"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe92d0480400ce6ce946a9a344a4c040"></a>
+void </td><td class="memItemRight" valign="bottom"><b>subset_train_data</b> (unsigned int pos, unsigned int length)</td></tr>
+<tr class="separator:abe92d0480400ce6ce946a9a344a4c040"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:aa24687af27333f723a9bd34cf0506ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa24687af27333f723a9bd34cf0506ed1"></a>
+struct fann_train_data * </td><td class="memItemRight" valign="bottom"><b>train_data</b></td></tr>
+<tr class="separator:aa24687af27333f723a9bd34cf0506ed1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ae9a0f1a843c25a56d6fc3c37630413f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9a0f1a843c25a56d6fc3c37630413f2"></a>
+class </td><td class="memItemRight" valign="bottom"><b>neural_net</b></td></tr>
+<tr class="separator:ae9a0f1a843c25a56d6fc3c37630413f2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="myfann__cpp_8h_source.html#l00362">362</a> of file <a class="el" href="myfann__cpp_8h_source.html">myfann_cpp.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="myfann__cpp_8h_source.html">myfann_cpp.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFeatureSelector-members.html b/doc/html/classFeatureSelector-members.html
new file mode 100644
index 0000000..7b6a8da
--- /dev/null
+++ b/doc/html/classFeatureSelector-members.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FeatureSelector Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classFeatureSelector.html">FeatureSelector</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>backward</b>(std::vector< Vector2d< T > > &v, CostFactory &theCostFactory, std::list< int > &subset, int minFeatures, short verbose=0) (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>bruteForce</b>(std::vector< Vector2d< T > > &v, CostFactory &theCostFactory, std::list< int > &subset, int maxFeatures=0, short verbose=0) (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FeatureSelector</b>() (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>floating</b>(std::vector< Vector2d< T > > &v, CostFactory &theCostFactory, std::list< int > &subset, int maxFeatures=0, double epsilon=0.001, short verbose=0) (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>forward</b>(std::vector< Vector2d< T > > &v, CostFactory &theCostFactory, std::list< int > &subset, int maxFeatures, short verbose=0) (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~FeatureSelector</b>() (defined in <a class="el" href="classFeatureSelector.html">FeatureSelector</a>)</td><td class="entry"><a class="el" href="classFeatureSelector.html">FeatureSelector</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFeatureSelector.html b/doc/html/classFeatureSelector.html
new file mode 100644
index 0000000..5446495
--- /dev/null
+++ b/doc/html/classFeatureSelector.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: FeatureSelector Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classFeatureSelector-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">FeatureSelector Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8d2432fabab0fd1da7925c5bac72cc6f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d2432fabab0fd1da7925c5bac72cc6f"></a>
+template<class T > </td></tr>
+<tr class="memitem:a8d2432fabab0fd1da7925c5bac72cc6f"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>forward</b> (std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< T > > &v, <a class="el" href="classCostFactory.html">CostFactory</a> &theCostFactory, std::list< int > &subset, int maxFeatures, short verbose=0)</td></tr>
+<tr class="separator:a8d2432fabab0fd1da7925c5bac72cc6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a545f5802b0019e625ad445b4c21f1903"><td class="memTemplParams" colspan="2"><a class="anchor" id="a545f5802b0019e625ad445b4c21f1903"></a>
+template<class T > </td></tr>
+<tr class="memitem:a545f5802b0019e625ad445b4c21f1903"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>backward</b> (std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< T > > &v, <a class="el" href="classCostFactory.html">CostFactory</a> &theCostFactory, std::list< int > &subset, int minFeatures, short verbose=0)</td></tr>
+<tr class="separator:a545f5802b0019e625ad445b4c21f1903"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1776378803a5c2ba88cc0a3b64e85be6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1776378803a5c2ba88cc0a3b64e85be6"></a>
+template<class T > </td></tr>
+<tr class="memitem:a1776378803a5c2ba88cc0a3b64e85be6"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>floating</b> (std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< T > > &v, <a class="el" href="classCostFactory.html">CostFactory</a> &theCostFactory, std::list< int > &subset, int maxFeatures=0, double epsilon=0.001, short verbose=0)</td></tr>
+<tr class="separator:a1776378803a5c2ba88cc0a3b64e85be6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae58da09a9123c177639a4aa6b184811a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae58da09a9123c177639a4aa6b184811a"></a>
+template<class T > </td></tr>
+<tr class="memitem:ae58da09a9123c177639a4aa6b184811a"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>bruteForce</b> (std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< T > > &v, <a class="el" href="classCostFactory.html">CostFactory</a> &theCostFactory, std::list< int > &subset, int maxFeatures=0, short verbose=0)</td></tr>
+<tr class="separator:ae58da09a9123c177639a4aa6b184811a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="FeatureSelector_8h_source.html#l00035">35</a> of file <a class="el" href="FeatureSelector_8h_source.html">FeatureSelector.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="FeatureSelector_8h_source.html">FeatureSelector.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFileReaderAscii-members.html b/doc/html/classFileReaderAscii-members.html
new file mode 100644
index 0000000..be55335
--- /dev/null
+++ b/doc/html/classFileReaderAscii-members.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderAscii Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FileReaderAscii</b>(void) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FileReaderAscii</b>(const std::string &filename) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FileReaderAscii</b>(const std::string &filename, const char &fieldseparator) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_comment</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_fs</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ifstream</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_max</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_maxRow</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_min</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_minRow</b> (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nrOfCol</b>(bool checkCols=false, bool verbose=false) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nrOfRow</b>(bool checkCols=false, bool verbose=false) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::vector< std::vector< T > > &dataVector, const std::vector< int > &cols, double scale=1.0, double offset=0.0, bool transpose=false, bool verbose=false) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(std::vector< T > &dataVector, int col, double scale=1.0, double offset=0, bool verbose=false) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reset</b>() (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setComment</b>(char comment) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setFieldSeparator</b>(const char &fieldseparator) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setMaxRow</b>(int maxRow) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setMinRow</b>(int minRow) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~FileReaderAscii</b>(void) (defined in <a class="el" href="classFileReaderAscii.html">FileReaderAscii</a>)</td><td class="entry"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFileReaderAscii.html b/doc/html/classFileReaderAscii.html
new file mode 100644
index 0000000..c37df4a
--- /dev/null
+++ b/doc/html/classFileReaderAscii.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: FileReaderAscii Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classFileReaderAscii-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">FileReaderAscii Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for FileReaderAscii:</div>
+<div class="dyncontent">
+<div class="center"><img src="classFileReaderAscii__coll__graph.png" border="0" usemap="#FileReaderAscii_coll__map" alt="Collaboration graph"/></div>
+<map name="FileReaderAscii_coll__map" id="FileReaderAscii_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="51,347,145,373"/><area shape="rect" id="node3" title="STL class. " alt="" coords="16,254,149,295"/><area shape="rect" id="node4" title="STL class. " alt="" coords="18,161,147,202"/><area shape="rect" id="node5" title="STL class. " alt="" coords="5,83,159,109"/><area shape="rect" id="node6" title="STL class. " alt="" coords="33,5,132,32"/><area shape="rect" id="node7" title="STL class. " alt="" coords="192,347,271,373"/><are [...]
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a6d41ecfea7d1ec5de054a890c12c615a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d41ecfea7d1ec5de054a890c12c615a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>FileReaderAscii</b> (const std::string &filename)</td></tr>
+<tr class="separator:a6d41ecfea7d1ec5de054a890c12c615a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93271f754450caca61826a1d422887a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93271f754450caca61826a1d422887a5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>FileReaderAscii</b> (const std::string &filename, const char &fieldseparator)</td></tr>
+<tr class="separator:a93271f754450caca61826a1d422887a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d07e7a3ee29e4853a149d6b2e58c916"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d07e7a3ee29e4853a149d6b2e58c916"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
+<tr class="separator:a4d07e7a3ee29e4853a149d6b2e58c916"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaceff7fa7a6560e1e2010dc1e1c1a996"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaceff7fa7a6560e1e2010dc1e1c1a996"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename)</td></tr>
+<tr class="separator:aaceff7fa7a6560e1e2010dc1e1c1a996"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf6d501c7be2ec5349f7fc1346c5ac30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf6d501c7be2ec5349f7fc1346c5ac30"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:adf6d501c7be2ec5349f7fc1346c5ac30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab20724a644e0949387db6606e9cc0beb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab20724a644e0949387db6606e9cc0beb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFieldSeparator</b> (const char &fieldseparator)</td></tr>
+<tr class="separator:ab20724a644e0949387db6606e9cc0beb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed996e94b8bc27305daf05b31b0402c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed996e94b8bc27305daf05b31b0402c1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setMinRow</b> (int minRow)</td></tr>
+<tr class="separator:aed996e94b8bc27305daf05b31b0402c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b5ce1391b02c870bddec9b30e4e9bc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b5ce1391b02c870bddec9b30e4e9bc9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setMaxRow</b> (int maxRow)</td></tr>
+<tr class="separator:a0b5ce1391b02c870bddec9b30e4e9bc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7694a60267559cdc54e762ee019304d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7694a60267559cdc54e762ee019304d2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setComment</b> (char comment)</td></tr>
+<tr class="separator:a7694a60267559cdc54e762ee019304d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e6673126e8c7f8c6126347f65d123aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e6673126e8c7f8c6126347f65d123aa"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>nrOfCol</b> (bool checkCols=false, bool verbose=false)</td></tr>
+<tr class="separator:a9e6673126e8c7f8c6126347f65d123aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cdad118d2bbf113de319ddbd7265331"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cdad118d2bbf113de319ddbd7265331"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>nrOfRow</b> (bool checkCols=false, bool verbose=false)</td></tr>
+<tr class="separator:a9cdad118d2bbf113de319ddbd7265331"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8560e7914421bec68933ea48a26fac47"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8560e7914421bec68933ea48a26fac47"></a>
+template<class T > </td></tr>
+<tr class="memitem:a8560e7914421bec68933ea48a26fac47"><td class="memTemplItemLeft" align="right" valign="top">unsigned int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< std::vector< T > > &dataVector, const std::vector< int > &cols, double scale=1.0, double offset=0.0, bool transpose=false, bool verbose=false)</td></tr>
+<tr class="separator:a8560e7914421bec68933ea48a26fac47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2824b8dc79d03ec0b12a3f03af80d15c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2824b8dc79d03ec0b12a3f03af80d15c"></a>
+template<class T > </td></tr>
+<tr class="memitem:a2824b8dc79d03ec0b12a3f03af80d15c"><td class="memTemplItemLeft" align="right" valign="top">unsigned int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &dataVector, int col, double scale=1.0, double offset=0, bool verbose=false)</td></tr>
+<tr class="separator:a2824b8dc79d03ec0b12a3f03af80d15c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a163894d1e52c54a67c51570cc86bc00a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a163894d1e52c54a67c51570cc86bc00a"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a163894d1e52c54a67c51570cc86bc00a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2fe5eaaba98369c21a88237c1926a76b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe5eaaba98369c21a88237c1926a76b"></a>
+std::ifstream </td><td class="memItemRight" valign="bottom"><b>m_ifstream</b></td></tr>
+<tr class="separator:a2fe5eaaba98369c21a88237c1926a76b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b0bddb3e890bab2f9f4aad108e397eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b0bddb3e890bab2f9f4aad108e397eb"></a>
+char </td><td class="memItemRight" valign="bottom"><b>m_fs</b></td></tr>
+<tr class="separator:a4b0bddb3e890bab2f9f4aad108e397eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd5c91ee77ae90a4e909203d5b3f9065"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd5c91ee77ae90a4e909203d5b3f9065"></a>
+char </td><td class="memItemRight" valign="bottom"><b>m_comment</b></td></tr>
+<tr class="separator:afd5c91ee77ae90a4e909203d5b3f9065"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7099b7a444ab71a098dce31ad292aaff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7099b7a444ab71a098dce31ad292aaff"></a>
+double </td><td class="memItemRight" valign="bottom"><b>m_min</b></td></tr>
+<tr class="separator:a7099b7a444ab71a098dce31ad292aaff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47079477cffc371cbead24f39306132e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47079477cffc371cbead24f39306132e"></a>
+double </td><td class="memItemRight" valign="bottom"><b>m_max</b></td></tr>
+<tr class="separator:a47079477cffc371cbead24f39306132e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54f60910cc3fb0802caae7e68f086142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54f60910cc3fb0802caae7e68f086142"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_minRow</b></td></tr>
+<tr class="separator:a54f60910cc3fb0802caae7e68f086142"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a098d982b227b6e744ee6f04fcd7a3320"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a098d982b227b6e744ee6f04fcd7a3320"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_maxRow</b></td></tr>
+<tr class="separator:a098d982b227b6e744ee6f04fcd7a3320"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="FileReaderAscii_8h_source.html#l00030">30</a> of file <a class="el" href="FileReaderAscii_8h_source.html">FileReaderAscii.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/fileclasses/<a class="el" href="FileReaderAscii_8h_source.html">FileReaderAscii.h</a></li>
+<li>/home/kempenep/pktools/src/fileclasses/<a class="el" href="FileReaderAscii_8cc_source.html">FileReaderAscii.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFileReaderAscii__coll__graph.map b/doc/html/classFileReaderAscii__coll__graph.map
new file mode 100644
index 0000000..b6478bd
--- /dev/null
+++ b/doc/html/classFileReaderAscii__coll__graph.map
@@ -0,0 +1,9 @@
+<map id="FileReaderAscii" name="FileReaderAscii">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="51,347,145,373"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="16,254,149,295"/>
+<area shape="rect" id="node4" title="STL class. " alt="" coords="18,161,147,202"/>
+<area shape="rect" id="node5" title="STL class. " alt="" coords="5,83,159,109"/>
+<area shape="rect" id="node6" title="STL class. " alt="" coords="33,5,132,32"/>
+<area shape="rect" id="node7" title="STL class. " alt="" coords="192,347,271,373"/>
+<area shape="rect" id="node8" title="STL class. " alt="" coords="174,254,300,295"/>
+</map>
diff --git a/doc/html/classFileReaderAscii__coll__graph.md5 b/doc/html/classFileReaderAscii__coll__graph.md5
new file mode 100644
index 0000000..f8ac974
--- /dev/null
+++ b/doc/html/classFileReaderAscii__coll__graph.md5
@@ -0,0 +1 @@
+6d09dc6d3271ce3d2cfd407777da371e
\ No newline at end of file
diff --git a/doc/html/classFileReaderAscii__coll__graph.png b/doc/html/classFileReaderAscii__coll__graph.png
new file mode 100644
index 0000000..c38943b
Binary files /dev/null and b/doc/html/classFileReaderAscii__coll__graph.png differ
diff --git a/doc/html/classFileReaderLas-members.html b/doc/html/classFileReaderLas-members.html
new file mode 100644
index 0000000..efaf19d
--- /dev/null
+++ b/doc/html/classFileReaderLas-members.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FileReaderLas Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classFileReaderLas.html">FileReaderLas</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addClassFilter</b>(std::vector< unsigned short > const &classes) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addReturnsFilter</b>(std::vector< unsigned short > const &returns) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FileReaderLas</b>(void) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FileReaderLas</b>(const std::string &filename) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getExtent</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getExtent</b>(double &ulx, double &uly, double &lrx, double &lry) const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getHeader</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMaxZ</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMinZ</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getPointCount</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>isCompressed</b>() const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>las2ascii</b>(const std::string &filename, bool verbose=false) const (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_filters</b> (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ifstream</b> (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_reader</b> (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>open</b>(const std::string &filename) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readNextPoint</b>(liblas::Point &thePoint) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readPointAt</b>(std::size_t n) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resetReader</b>() (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCodec</b>(const std::string &filename) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setFilter</b>(std::vector< liblas::FilterPtr > const &filters) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setFilters</b>(const std::vector< liblas::FilterPtr > &filters) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setFilters</b>() (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~FileReaderLas</b>(void) (defined in <a class="el" href="classFileReaderLas.html">FileReaderLas</a>)</td><td class="entry"><a class="el" href="classFileReaderLas.html">FileReaderLas</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFileReaderLas.html b/doc/html/classFileReaderLas.html
new file mode 100644
index 0000000..cb2caef
--- /dev/null
+++ b/doc/html/classFileReaderLas.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: FileReaderLas Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classFileReaderLas-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">FileReaderLas Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for FileReaderLas:</div>
+<div class="dyncontent">
+<div class="center"><img src="classFileReaderLas__coll__graph.png" border="0" usemap="#FileReaderLas_coll__map" alt="Collaboration graph"/></div>
+<map name="FileReaderLas_coll__map" id="FileReaderLas_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="53,355,147,381"/><area shape="rect" id="node3" title="STL class. " alt="" coords="16,254,149,295"/><area shape="rect" id="node4" title="STL class. " alt="" coords="18,161,147,202"/><area shape="rect" id="node5" title="STL class. " alt="" coords="5,83,159,109"/><area shape="rect" id="node6" title="STL class. " alt="" coords="33,5,132,32"/><area shape="rect" id="node7" title="STL class. " alt="" coords="191,355,269,381"/><are [...]
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ae37a0309d2cce5d863ff7936d18cb071"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae37a0309d2cce5d863ff7936d18cb071"></a>
+ </td><td class="memItemRight" valign="bottom"><b>FileReaderLas</b> (const std::string &filename)</td></tr>
+<tr class="separator:ae37a0309d2cce5d863ff7936d18cb071"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06dcc2c4f48314be68ba453fb0200848"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06dcc2c4f48314be68ba453fb0200848"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename)</td></tr>
+<tr class="separator:a06dcc2c4f48314be68ba453fb0200848"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af21a68b5ff450c583257c440a2009a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af21a68b5ff450c583257c440a2009a4c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:af21a68b5ff450c583257c440a2009a4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1ee2908ff17f1542bb0288e577b950d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee2908ff17f1542bb0288e577b950d3"></a>
+liblas::Header const & </td><td class="memItemRight" valign="bottom"><b>getHeader</b> () const </td></tr>
+<tr class="separator:a1ee2908ff17f1542bb0288e577b950d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeeabbb71f1e6158a73b476bde174d259"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeeabbb71f1e6158a73b476bde174d259"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>isCompressed</b> () const </td></tr>
+<tr class="separator:aeeabbb71f1e6158a73b476bde174d259"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b43c718ff7b2c794b130ec298f040ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b43c718ff7b2c794b130ec298f040ea"></a>
+unsigned long int </td><td class="memItemRight" valign="bottom"><b>getPointCount</b> () const </td></tr>
+<tr class="separator:a3b43c718ff7b2c794b130ec298f040ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23468734215764bbe3812f9096e5d61e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23468734215764bbe3812f9096e5d61e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>las2ascii</b> (const std::string &filename, bool verbose=false) const </td></tr>
+<tr class="separator:a23468734215764bbe3812f9096e5d61e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36141f3ec3a66f91d7244dbeed501f20"><td class="memTemplParams" colspan="2"><a class="anchor" id="a36141f3ec3a66f91d7244dbeed501f20"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a36141f3ec3a66f91d7244dbeed501f20"><td class="memTemplItemLeft" align="right" valign="top">liblas::Bounds< T > </td><td class="memTemplItemRight" valign="bottom"><b>getExtent</b> () const </td></tr>
+<tr class="separator:a36141f3ec3a66f91d7244dbeed501f20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0564667c68e217cd93ff16f1d2c56d60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0564667c68e217cd93ff16f1d2c56d60"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getExtent</b> (double &ulx, double &uly, double &lrx, double &lry) const </td></tr>
+<tr class="separator:a0564667c68e217cd93ff16f1d2c56d60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a79dc690bee4732b8db700fd0cc8eed54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79dc690bee4732b8db700fd0cc8eed54"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getMinZ</b> () const </td></tr>
+<tr class="separator:a79dc690bee4732b8db700fd0cc8eed54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30de46acedef223cb690b37bb9d6c0ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30de46acedef223cb690b37bb9d6c0ef"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getMaxZ</b> () const </td></tr>
+<tr class="separator:a30de46acedef223cb690b37bb9d6c0ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd1e8132db8f988c4501594ca81e344b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd1e8132db8f988c4501594ca81e344b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>resetReader</b> ()</td></tr>
+<tr class="separator:afd1e8132db8f988c4501594ca81e344b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a956f0a575c228130adedddb45e32e10c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a956f0a575c228130adedddb45e32e10c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFilter</b> (std::vector< liblas::FilterPtr > const &filters)</td></tr>
+<tr class="separator:a956f0a575c228130adedddb45e32e10c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a613de8ba6507d0367059cb1b7833cd8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a613de8ba6507d0367059cb1b7833cd8a"></a>
+bool const & </td><td class="memItemRight" valign="bottom"><b>readNextPoint</b> (liblas::Point &thePoint)</td></tr>
+<tr class="separator:a613de8ba6507d0367059cb1b7833cd8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7586ac55b76168eff67b62495305669a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7586ac55b76168eff67b62495305669a"></a>
+liblas::Point const & </td><td class="memItemRight" valign="bottom"><b>readPointAt</b> (std::size_t n)</td></tr>
+<tr class="separator:a7586ac55b76168eff67b62495305669a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a059a9e1198eb2f5ebd3ddf87ad80b8b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a059a9e1198eb2f5ebd3ddf87ad80b8b2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addReturnsFilter</b> (std::vector< unsigned short > const &returns)</td></tr>
+<tr class="separator:a059a9e1198eb2f5ebd3ddf87ad80b8b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac441256f8c442561965024fcfc492d42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac441256f8c442561965024fcfc492d42"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addClassFilter</b> (std::vector< unsigned short > const &classes)</td></tr>
+<tr class="separator:ac441256f8c442561965024fcfc492d42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff13f75bcaafa242a2122a7ee24972f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ff13f75bcaafa242a2122a7ee24972f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFilters</b> (const std::vector< liblas::FilterPtr > &filters)</td></tr>
+<tr class="separator:a4ff13f75bcaafa242a2122a7ee24972f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab182aec4f01448cb2a694e787a9c1b05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab182aec4f01448cb2a694e787a9c1b05"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFilters</b> ()</td></tr>
+<tr class="separator:ab182aec4f01448cb2a694e787a9c1b05"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:acd0aebb5e0266f81539631b849801e31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd0aebb5e0266f81539631b849801e31"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (const std::string &filename)</td></tr>
+<tr class="separator:acd0aebb5e0266f81539631b849801e31"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a445c470870dc82e9aee36f784b4dff50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a445c470870dc82e9aee36f784b4dff50"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a445c470870dc82e9aee36f784b4dff50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a1f31d075a538ed258ea923eabd93d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a1f31d075a538ed258ea923eabd93d7"></a>
+std::ifstream * </td><td class="memItemRight" valign="bottom"><b>m_ifstream</b></td></tr>
+<tr class="separator:a0a1f31d075a538ed258ea923eabd93d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adaa2543c3222fd9633aaa28dee2384fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaa2543c3222fd9633aaa28dee2384fa"></a>
+liblas::Reader * </td><td class="memItemRight" valign="bottom"><b>m_reader</b></td></tr>
+<tr class="separator:adaa2543c3222fd9633aaa28dee2384fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aade0730001ee924d64a8f19784f8b035"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aade0730001ee924d64a8f19784f8b035"></a>
+std::vector< liblas::FilterPtr > </td><td class="memItemRight" valign="bottom"><b>m_filters</b></td></tr>
+<tr class="separator:aade0730001ee924d64a8f19784f8b035"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="FileReaderLas_8h_source.html#l00039">39</a> of file <a class="el" href="FileReaderLas_8h_source.html">FileReaderLas.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/lasclasses/<a class="el" href="FileReaderLas_8h_source.html">FileReaderLas.h</a></li>
+<li>/home/kempenep/pktools/src/lasclasses/<a class="el" href="FileReaderLas_8cc_source.html">FileReaderLas.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classFileReaderLas__coll__graph.map b/doc/html/classFileReaderLas__coll__graph.map
new file mode 100644
index 0000000..87552a4
--- /dev/null
+++ b/doc/html/classFileReaderLas__coll__graph.map
@@ -0,0 +1,9 @@
+<map id="FileReaderLas" name="FileReaderLas">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="53,355,147,381"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="16,254,149,295"/>
+<area shape="rect" id="node4" title="STL class. " alt="" coords="18,161,147,202"/>
+<area shape="rect" id="node5" title="STL class. " alt="" coords="5,83,159,109"/>
+<area shape="rect" id="node6" title="STL class. " alt="" coords="33,5,132,32"/>
+<area shape="rect" id="node7" title="STL class. " alt="" coords="191,355,269,381"/>
+<area shape="rect" id="node8" title="STL class. " alt="" coords="174,254,300,295"/>
+</map>
diff --git a/doc/html/classFileReaderLas__coll__graph.md5 b/doc/html/classFileReaderLas__coll__graph.md5
new file mode 100644
index 0000000..fe2bb8a
--- /dev/null
+++ b/doc/html/classFileReaderLas__coll__graph.md5
@@ -0,0 +1 @@
+1afe3686e6ad3c318206312bf340ef58
\ No newline at end of file
diff --git a/doc/html/classFileReaderLas__coll__graph.png b/doc/html/classFileReaderLas__coll__graph.png
new file mode 100644
index 0000000..be84dc6
Binary files /dev/null and b/doc/html/classFileReaderLas__coll__graph.png differ
diff --git a/doc/html/classImgReaderGdal-members.html b/doc/html/classImgReaderGdal-members.html
new file mode 100644
index 0000000..cf1c532
--- /dev/null
+++ b/doc/html/classImgReaderGdal-members.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderGdal Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>covers</b>(double x, double y) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>covers</b>(double ulx, double uly, double lrx, double lry) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>GDALSetNoDataValue</b>(double noDataValue, int band=0) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>geo2image</b>(double x, double y, double &i, double &j) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getBoundingBox</b>(double &ulx, double &uly, double &lrx, double &lry) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCenterPos</b>(double &x, double &y) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getColorTable</b>(int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCompression</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDataset</b>() (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDataType</b>(int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeltaX</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeltaY</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDescription</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDriverDescription</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFileName</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getGeoTransform</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getGeoTransform</b>(double *gt) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getHistogram</b>(std::vector< double > &histvector, double &min, double &max, unsigned int &nbin, int theBand=0, bool kde=false) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getImageDescription</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getImageType</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getInterleave</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getLrx</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLry</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMax</b>(int &col, int &row, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMetadata</b>() (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMetadata</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMetadata</b>(std::list< std::string > &metadata) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMetadataItem</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMin</b>(int &col, int &row, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMinMax</b>(int startCol, int endCol, int startRow, int endRow, int band, double &minValue, double &maxValue) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMinMax</b>(double &minValue, double &maxValue, int band=0, bool exhaustiveSearch=true) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getNoDataValues</b>(std::vector< double > &noDataValues) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getNvalid</b>(int band) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getProjection</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getProjectionRef</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getRange</b>(std::vector< short > &range, int Band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getRasterBand</b>(int band=0) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getRefPix</b>(double &refX, double &refY, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getUlx</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getUly</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>image2geo</b>(double i, double j, double &x, double &y) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ImgReaderGdal</b>(void) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ImgReaderGdal</b>(const std::string &filename) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isGeoRef</b>() const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>isNoData</b>(double value) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_gds</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_gt</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nband</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ncol</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_noDataValues</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nrow</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_offset</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_scale</b> (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nrOfBand</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nrOfCol</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nrOfRow</b>(void) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushNoDataValue</b>(double noDataValue) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(T &value, const GDALDataType &dataType, int col, int row, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int row, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, double row, int band=0, RESAMPLE resample=NEAR) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::vector< T > &buffer, const GDALDataType &dataType, int row, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(std::vector< T > &buffer, const GDALDataType &dataType, double row, int band=0, RESAMPLE resample=NEAR) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readDataBlock</b>(Vector2d< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readDataBlock</b>(std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCodec</b>() (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setNoData</b>(const std::vector< double > nodata) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setOffset</b>(double theOffset, int band=0) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setScale</b>(double theScale, int band=0) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~ImgReaderGdal</b>(void) (defined in <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a>)</td><td class="entry"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgReaderGdal.html b/doc/html/classImgReaderGdal.html
new file mode 100644
index 0000000..3370dda
--- /dev/null
+++ b/doc/html/classImgReaderGdal.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: ImgReaderGdal Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classImgReaderGdal-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ImgReaderGdal Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for ImgReaderGdal:</div>
+<div class="dyncontent">
+<div class="center"><img src="classImgReaderGdal__coll__graph.png" border="0" usemap="#ImgReaderGdal_coll__map" alt="Collaboration graph"/></div>
+<map name="ImgReaderGdal_coll__map" id="ImgReaderGdal_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/><area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1434683e356b17c9974a44047129b382"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1434683e356b17c9974a44047129b382"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ImgReaderGdal</b> (const std::string &filename)</td></tr>
+<tr class="separator:a1434683e356b17c9974a44047129b382"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7daef788857fde9254c08f347324002e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7daef788857fde9254c08f347324002e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename)</td></tr>
+<tr class="separator:a7daef788857fde9254c08f347324002e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a514f33e43765374b9599891fae12a6c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a514f33e43765374b9599891fae12a6c5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:a514f33e43765374b9599891fae12a6c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afaf7f5cc088d5e82963ccbe71cf3b629"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afaf7f5cc088d5e82963ccbe71cf3b629"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getFileName</b> () const </td></tr>
+<tr class="separator:afaf7f5cc088d5e82963ccbe71cf3b629"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac7e9e480c2a5898eacf5cf9f3b2d33e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac7e9e480c2a5898eacf5cf9f3b2d33e"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfCol</b> (void) const </td></tr>
+<tr class="separator:aac7e9e480c2a5898eacf5cf9f3b2d33e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c71db92761ae0885e63c8c8cd308606"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c71db92761ae0885e63c8c8cd308606"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfRow</b> (void) const </td></tr>
+<tr class="separator:a6c71db92761ae0885e63c8c8cd308606"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac158ca3c033290683d8c81f1666f14fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac158ca3c033290683d8c81f1666f14fa"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfBand</b> (void) const </td></tr>
+<tr class="separator:ac158ca3c033290683d8c81f1666f14fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6835a9858ceea7a73cd87fc16b506dd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6835a9858ceea7a73cd87fc16b506dd1"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>isGeoRef</b> () const </td></tr>
+<tr class="separator:a6835a9858ceea7a73cd87fc16b506dd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a712541cca0b8c995686475c0da799496"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a712541cca0b8c995686475c0da799496"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getProjection</b> (void) const </td></tr>
+<tr class="separator:a712541cca0b8c995686475c0da799496"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04d950356cc9e54c286323db00bf176b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04d950356cc9e54c286323db00bf176b"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getProjectionRef</b> (void) const </td></tr>
+<tr class="separator:a04d950356cc9e54c286323db00bf176b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad4bd44b085efdd27548e38210769882a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4bd44b085efdd27548e38210769882a"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getGeoTransform</b> () const </td></tr>
+<tr class="separator:ad4bd44b085efdd27548e38210769882a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afeb6857f4adcced355ec23613b6aff70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afeb6857f4adcced355ec23613b6aff70"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getGeoTransform</b> (double *gt) const </td></tr>
+<tr class="separator:afeb6857f4adcced355ec23613b6aff70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91e20bd6f2a35f0a769b9047ed1ffdae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91e20bd6f2a35f0a769b9047ed1ffdae"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getDescription</b> () const </td></tr>
+<tr class="separator:a91e20bd6f2a35f0a769b9047ed1ffdae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39c9880c1f9877778dcacbe241cf1320"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39c9880c1f9877778dcacbe241cf1320"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getMetadataItem</b> () const </td></tr>
+<tr class="separator:a39c9880c1f9877778dcacbe241cf1320"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab83c36c95f6cfbf033eba5cb4c89e60d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab83c36c95f6cfbf033eba5cb4c89e60d"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getImageDescription</b> () const </td></tr>
+<tr class="separator:ab83c36c95f6cfbf033eba5cb4c89e60d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72c9b9178bbe6625a757dad8a24b0971"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72c9b9178bbe6625a757dad8a24b0971"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getBoundingBox</b> (double &ulx, double &uly, double &lrx, double &lry) const </td></tr>
+<tr class="separator:a72c9b9178bbe6625a757dad8a24b0971"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aace5556eef281ba2ea88cc1cc814bbe4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aace5556eef281ba2ea88cc1cc814bbe4"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getCenterPos</b> (double &x, double &y) const </td></tr>
+<tr class="separator:aace5556eef281ba2ea88cc1cc814bbe4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f35f2f55bf76c1a4968ce998601c576"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f35f2f55bf76c1a4968ce998601c576"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getUlx</b> () const </td></tr>
+<tr class="separator:a7f35f2f55bf76c1a4968ce998601c576"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af58a0598022c7a2a13f2e3af7da1da67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af58a0598022c7a2a13f2e3af7da1da67"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getUly</b> () const </td></tr>
+<tr class="separator:af58a0598022c7a2a13f2e3af7da1da67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7fcba7dbe42b93f65adbd7096f38c4b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fcba7dbe42b93f65adbd7096f38c4b9"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getLrx</b> () const </td></tr>
+<tr class="separator:a7fcba7dbe42b93f65adbd7096f38c4b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a192a3bf43bbd0f546eca84db2561eae3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a192a3bf43bbd0f546eca84db2561eae3"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getLry</b> () const </td></tr>
+<tr class="separator:a192a3bf43bbd0f546eca84db2561eae3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afac21441e51d39beb3ab5d282cd9f12e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afac21441e51d39beb3ab5d282cd9f12e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setScale</b> (double theScale, int band=0)</td></tr>
+<tr class="separator:afac21441e51d39beb3ab5d282cd9f12e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a332975068d99166b81001a5c656022bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a332975068d99166b81001a5c656022bf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setOffset</b> (double theOffset, int band=0)</td></tr>
+<tr class="separator:a332975068d99166b81001a5c656022bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74e4d4918fdd0fd1a0e1753a5823d578"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e4d4918fdd0fd1a0e1753a5823d578"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getNoDataValues</b> (std::vector< double > &noDataValues) const </td></tr>
+<tr class="separator:a74e4d4918fdd0fd1a0e1753a5823d578"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0708feaaf3e61736a1618d88e47b486"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0708feaaf3e61736a1618d88e47b486"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>isNoData</b> (double value) const </td></tr>
+<tr class="separator:aa0708feaaf3e61736a1618d88e47b486"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1a4c9373d77f6feeac06f80e28632b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1a4c9373d77f6feeac06f80e28632b2"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushNoDataValue</b> (double noDataValue)</td></tr>
+<tr class="separator:af1a4c9373d77f6feeac06f80e28632b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d05b02fd8230f06a84a05c5528948cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d05b02fd8230f06a84a05c5528948cd"></a>
+int </td><td class="memItemRight" valign="bottom"><b>setNoData</b> (const std::vector< double > nodata)</td></tr>
+<tr class="separator:a4d05b02fd8230f06a84a05c5528948cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a523e669bf091c8439d9b9e23d2e1326a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a523e669bf091c8439d9b9e23d2e1326a"></a>
+CPLErr </td><td class="memItemRight" valign="bottom"><b>GDALSetNoDataValue</b> (double noDataValue, int band=0)</td></tr>
+<tr class="separator:a523e669bf091c8439d9b9e23d2e1326a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af35b0f371e8da5080678689b86405f03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af35b0f371e8da5080678689b86405f03"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>covers</b> (double x, double y) const </td></tr>
+<tr class="separator:af35b0f371e8da5080678689b86405f03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f36a57c0f8be2a16b33d84a64d795d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f36a57c0f8be2a16b33d84a64d795d1"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>covers</b> (double ulx, double uly, double lrx, double lry) const </td></tr>
+<tr class="separator:a8f36a57c0f8be2a16b33d84a64d795d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c73b4e8f745bd6798ed64839a339d9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c73b4e8f745bd6798ed64839a339d9f"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>geo2image</b> (double x, double y, double &i, double &j) const </td></tr>
+<tr class="separator:a2c73b4e8f745bd6798ed64839a339d9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1460f59f7b13f60eb08ef9313a30502"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1460f59f7b13f60eb08ef9313a30502"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>image2geo</b> (double i, double j, double &x, double &y) const </td></tr>
+<tr class="separator:ac1460f59f7b13f60eb08ef9313a30502"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a71e468d5e410b868dba59953729ef637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71e468d5e410b868dba59953729ef637"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getDeltaX</b> (void) const </td></tr>
+<tr class="separator:a71e468d5e410b868dba59953729ef637"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3db8345555c9e1ba3753bc30b876e7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3db8345555c9e1ba3753bc30b876e7c"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getDeltaY</b> (void) const </td></tr>
+<tr class="separator:af3db8345555c9e1ba3753bc30b876e7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba4280eff30003c827bb2567a6bc3400"><td class="memTemplParams" colspan="2"><a class="anchor" id="aba4280eff30003c827bb2567a6bc3400"></a>
+template<typename T > </td></tr>
+<tr class="memitem:aba4280eff30003c827bb2567a6bc3400"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (T &value, const GDALDataType &dataType, int col, int row, int band=0) const </td></tr>
+<tr class="separator:aba4280eff30003c827bb2567a6bc3400"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a682f256062b021ee5771346e2fda2d1d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a682f256062b021ee5771346e2fda2d1d"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a682f256062b021ee5771346e2fda2d1d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int row, int band=0) const </td></tr>
+<tr class="separator:a682f256062b021ee5771346e2fda2d1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a349279f8b3511dada0faa9924fbcabbb"><td class="memTemplParams" colspan="2"><a class="anchor" id="a349279f8b3511dada0faa9924fbcabbb"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a349279f8b3511dada0faa9924fbcabbb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, double row, int band=0, RESAMPLE resample=NEAR) const </td></tr>
+<tr class="separator:a349279f8b3511dada0faa9924fbcabbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7a60c67b86a4355af5a59c1e66be9cd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae7a60c67b86a4355af5a59c1e66be9cd"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ae7a60c67b86a4355af5a59c1e66be9cd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readDataBlock</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const </td></tr>
+<tr class="separator:ae7a60c67b86a4355af5a59c1e66be9cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d95ea1de4434d7a5051c9f03aaac884"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3d95ea1de4434d7a5051c9f03aaac884"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a3d95ea1de4434d7a5051c9f03aaac884"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readDataBlock</b> (std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const </td></tr>
+<tr class="separator:a3d95ea1de4434d7a5051c9f03aaac884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ac0d1bc28c4fd320c22f18ef602455c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7ac0d1bc28c4fd320c22f18ef602455c"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a7ac0d1bc28c4fd320c22f18ef602455c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &buffer, const GDALDataType &dataType, int row, int band=0) const </td></tr>
+<tr class="separator:a7ac0d1bc28c4fd320c22f18ef602455c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad577cce450bb39b8ff7507bc0d86651"><td class="memTemplParams" colspan="2"><a class="anchor" id="aad577cce450bb39b8ff7507bc0d86651"></a>
+template<typename T > </td></tr>
+<tr class="memitem:aad577cce450bb39b8ff7507bc0d86651"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &buffer, const GDALDataType &dataType, double row, int band=0, RESAMPLE resample=NEAR) const </td></tr>
+<tr class="separator:aad577cce450bb39b8ff7507bc0d86651"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a591b1f2f78eacc0fd0d772e24996c6b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a591b1f2f78eacc0fd0d772e24996c6b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getMinMax</b> (int startCol, int endCol, int startRow, int endRow, int band, double &minValue, double &maxValue) const </td></tr>
+<tr class="separator:a591b1f2f78eacc0fd0d772e24996c6b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf6f92f4428a212e2dbdef95fa789f70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf6f92f4428a212e2dbdef95fa789f70"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getMinMax</b> (double &minValue, double &maxValue, int band=0, bool exhaustiveSearch=true) const </td></tr>
+<tr class="separator:adf6f92f4428a212e2dbdef95fa789f70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40a36fbaa00190aa5a758ec034369d3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40a36fbaa00190aa5a758ec034369d3d"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getMin</b> (int &col, int &row, int band=0) const </td></tr>
+<tr class="separator:a40a36fbaa00190aa5a758ec034369d3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4c5fb8c1132c2a52d97681d9f272387"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4c5fb8c1132c2a52d97681d9f272387"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getHistogram</b> (std::vector< double > &histvector, double &min, double &max, unsigned int &nbin, int theBand=0, bool kde=false)</td></tr>
+<tr class="separator:aa4c5fb8c1132c2a52d97681d9f272387"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44ca88cd5917979f184bb14f9c7f6eed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44ca88cd5917979f184bb14f9c7f6eed"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getMax</b> (int &col, int &row, int band=0) const </td></tr>
+<tr class="separator:a44ca88cd5917979f184bb14f9c7f6eed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ded019b9c6ef1b13feef6b9a08d92ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ded019b9c6ef1b13feef6b9a08d92ab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getRefPix</b> (double &refX, double &refY, int band=0) const </td></tr>
+<tr class="separator:a4ded019b9c6ef1b13feef6b9a08d92ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a906d020847b442de59059c99c8ec7cfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a906d020847b442de59059c99c8ec7cfb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getRange</b> (std::vector< short > &range, int Band=0) const </td></tr>
+<tr class="separator:a906d020847b442de59059c99c8ec7cfb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a864413c529506b8753c450e5316a814b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a864413c529506b8753c450e5316a814b"></a>
+unsigned long int </td><td class="memItemRight" valign="bottom"><b>getNvalid</b> (int band) const </td></tr>
+<tr class="separator:a864413c529506b8753c450e5316a814b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5591c9e50736c1553ec94a1254a290a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5591c9e50736c1553ec94a1254a290a6"></a>
+GDALDataType </td><td class="memItemRight" valign="bottom"><b>getDataType</b> (int band=0) const </td></tr>
+<tr class="separator:a5591c9e50736c1553ec94a1254a290a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3166cf2a6639b2a36f6830c9f8c37b6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3166cf2a6639b2a36f6830c9f8c37b6a"></a>
+GDALRasterBand * </td><td class="memItemRight" valign="bottom"><b>getRasterBand</b> (int band=0)</td></tr>
+<tr class="separator:a3166cf2a6639b2a36f6830c9f8c37b6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bfe81609a710a9d47947838cf5af8b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bfe81609a710a9d47947838cf5af8b9"></a>
+GDALColorTable * </td><td class="memItemRight" valign="bottom"><b>getColorTable</b> (int band=0) const </td></tr>
+<tr class="separator:a0bfe81609a710a9d47947838cf5af8b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a853ffedadc2fcc0efb303c149a45907b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a853ffedadc2fcc0efb303c149a45907b"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getDriverDescription</b> () const </td></tr>
+<tr class="separator:a853ffedadc2fcc0efb303c149a45907b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0108fc8cddf5522e4e6ca27c9d62240"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0108fc8cddf5522e4e6ca27c9d62240"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getImageType</b> () const </td></tr>
+<tr class="separator:ac0108fc8cddf5522e4e6ca27c9d62240"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1c51175ac5eb0e815411a5c875f0b1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1c51175ac5eb0e815411a5c875f0b1d"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getInterleave</b> () const </td></tr>
+<tr class="separator:af1c51175ac5eb0e815411a5c875f0b1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ed77fcfd0d7787eb5c6046c72289855"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ed77fcfd0d7787eb5c6046c72289855"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getCompression</b> () const </td></tr>
+<tr class="separator:a9ed77fcfd0d7787eb5c6046c72289855"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d8821df9c42d24811c8e21d2bba4340"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d8821df9c42d24811c8e21d2bba4340"></a>
+GDALDataset * </td><td class="memItemRight" valign="bottom"><b>getDataset</b> ()</td></tr>
+<tr class="separator:a7d8821df9c42d24811c8e21d2bba4340"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac97f73469d27ec904e73fb597eb163e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac97f73469d27ec904e73fb597eb163e6"></a>
+char ** </td><td class="memItemRight" valign="bottom"><b>getMetadata</b> ()</td></tr>
+<tr class="separator:ac97f73469d27ec904e73fb597eb163e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed2782ce8510531de43550701cfc6bb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed2782ce8510531de43550701cfc6bb2"></a>
+char ** </td><td class="memItemRight" valign="bottom"><b>getMetadata</b> () const </td></tr>
+<tr class="separator:aed2782ce8510531de43550701cfc6bb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59750d918c65b91b43e0d5f93379750d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59750d918c65b91b43e0d5f93379750d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getMetadata</b> (std::list< std::string > &metadata) const </td></tr>
+<tr class="separator:a59750d918c65b91b43e0d5f93379750d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a45bc57f58e04a49044a307b6a0480207"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45bc57f58e04a49044a307b6a0480207"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> ()</td></tr>
+<tr class="separator:a45bc57f58e04a49044a307b6a0480207"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a66e3da5cf14ee01d98f718da08ca3951"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66e3da5cf14ee01d98f718da08ca3951"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a66e3da5cf14ee01d98f718da08ca3951"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a804e326105d65f5b39e49f174192d9e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a804e326105d65f5b39e49f174192d9e0"></a>
+GDALDataset * </td><td class="memItemRight" valign="bottom"><b>m_gds</b></td></tr>
+<tr class="separator:a804e326105d65f5b39e49f174192d9e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa4e58b4fb0835f8dc2cec13e614c8af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa4e58b4fb0835f8dc2cec13e614c8af"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_ncol</b></td></tr>
+<tr class="separator:afa4e58b4fb0835f8dc2cec13e614c8af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a395ceefd4ca79cf2db23eba1628d975b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a395ceefd4ca79cf2db23eba1628d975b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_nrow</b></td></tr>
+<tr class="separator:a395ceefd4ca79cf2db23eba1628d975b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a854b58f7be9f49b51b530f890b5b1ee6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a854b58f7be9f49b51b530f890b5b1ee6"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_nband</b></td></tr>
+<tr class="separator:a854b58f7be9f49b51b530f890b5b1ee6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbf44f5365ca329ddbc435ec303a7bea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf44f5365ca329ddbc435ec303a7bea"></a>
+double </td><td class="memItemRight" valign="bottom"><b>m_gt</b> [6]</td></tr>
+<tr class="separator:adbf44f5365ca329ddbc435ec303a7bea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abccf0d1e621a857e436feb83cb05c301"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abccf0d1e621a857e436feb83cb05c301"></a>
+std::vector< double > </td><td class="memItemRight" valign="bottom"><b>m_noDataValues</b></td></tr>
+<tr class="separator:abccf0d1e621a857e436feb83cb05c301"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f327201ee3ee410786afb86109c66c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f327201ee3ee410786afb86109c66c2"></a>
+std::vector< double > </td><td class="memItemRight" valign="bottom"><b>m_scale</b></td></tr>
+<tr class="separator:a7f327201ee3ee410786afb86109c66c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7d02f9e74d645875c68486fd1cfee9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7d02f9e74d645875c68486fd1cfee9f"></a>
+std::vector< double > </td><td class="memItemRight" valign="bottom"><b>m_offset</b></td></tr>
+<tr class="separator:aa7d02f9e74d645875c68486fd1cfee9f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ImgReaderGdal_8h_source.html#l00033">33</a> of file <a class="el" href="ImgReaderGdal_8h_source.html">ImgReaderGdal.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgReaderGdal_8h_source.html">ImgReaderGdal.h</a></li>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgReaderGdal_8cc_source.html">ImgReaderGdal.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgReaderGdal__coll__graph.map b/doc/html/classImgReaderGdal__coll__graph.map
new file mode 100644
index 0000000..3bddeb4
--- /dev/null
+++ b/doc/html/classImgReaderGdal__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="ImgReaderGdal" name="ImgReaderGdal">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/>
+</map>
diff --git a/doc/html/classImgReaderGdal__coll__graph.md5 b/doc/html/classImgReaderGdal__coll__graph.md5
new file mode 100644
index 0000000..2aca7b9
--- /dev/null
+++ b/doc/html/classImgReaderGdal__coll__graph.md5
@@ -0,0 +1 @@
+39c12e7ae08720121b34733ddc358801
\ No newline at end of file
diff --git a/doc/html/classImgReaderGdal__coll__graph.png b/doc/html/classImgReaderGdal__coll__graph.png
new file mode 100644
index 0000000..567a5ee
Binary files /dev/null and b/doc/html/classImgReaderGdal__coll__graph.png differ
diff --git a/doc/html/classImgReaderOgr-members.html b/doc/html/classImgReaderOgr-members.html
new file mode 100644
index 0000000..7e8b582
--- /dev/null
+++ b/doc/html/classImgReaderOgr-members.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgReaderOgr Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDataSource</b>(void) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDriver</b>(void) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getExtent</b>(double &ulx, double &uly, double &lrx, double &lry, int layer) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getExtent</b>(double &ulx, double &uly, double &lrx, double &lry) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFeatureCount</b>(int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFieldCount</b>(int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFields</b>(std::vector< std::string > &fields, int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFields</b>(std::vector< OGRFieldDefn * > &fields, int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFieldSeparator</b>() const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getGeometryType</b>(int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLayer</b>(int layer=0) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getLayerCount</b>(void) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLayerName</b>(int layer=0) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getProjection</b>(int layer=0) const (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ImgReaderOgr</b>(void) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ImgReaderOgr</b>(const std::string &filename) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_datasource</b> (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_fs</b> (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator<<</b> (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(std::vector< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, OGRFeature *poFeature, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::vector< T > &data, const OGRFieldType &fieldType, const std::string &theField, int layer=0, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(Vector2d< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::map< int, Vector2d< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readData</b>(std::map< std::string, Vector2d< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readData</b>(std::vector< std::string > &data, const OGRFieldType &fieldType, const std::string &theField, int layer, bool verbose) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readDataImageOgr</b>(std::map< std::string, Vector2d< float > > &mapPixels, std::vector< std::string > &fields, const std::vector< short > &bands, const std::string &label, const std::vector< std::string > &layers, int verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderO [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readDataImageOgr</b>(std::map< std::string, Vector2d< float > > &mapPixels, std::vector< std::string > &fields, double start, double end, const std::string &label, const std::vector< std::string > &layers, int verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readSql</b>(Vector2d< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &sqlStatement, OGRGeometry *spatialFilter=NULL, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readSql</b>(std::map< int, Vector2d< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, const std::string &sqlStatement, OGRGeometry *spatialFilter, int layer=0, bool pos=false, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>readXY</b>(std::vector< T > &xVector, std::vector< T > &yVector, int layer=0, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>readY</b>(std::vector< T > &yVector, int layer=0, bool verbose=false) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCodec</b>(void) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setFieldSeparator</b>(const char fs) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~ImgReaderOgr</b>(void) (defined in <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a>)</td><td class="entry"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgReaderOgr.html b/doc/html/classImgReaderOgr.html
new file mode 100644
index 0000000..62ecd13
--- /dev/null
+++ b/doc/html/classImgReaderOgr.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: ImgReaderOgr Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="classImgReaderOgr-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ImgReaderOgr Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for ImgReaderOgr:</div>
+<div class="dyncontent">
+<div class="center"><img src="classImgReaderOgr__coll__graph.png" border="0" usemap="#ImgReaderOgr_coll__map" alt="Collaboration graph"/></div>
+<map name="ImgReaderOgr_coll__map" id="ImgReaderOgr_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/><area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a94fec0d12bb1fd34e4ae2adce153dd57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94fec0d12bb1fd34e4ae2adce153dd57"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ImgReaderOgr</b> (const std::string &filename)</td></tr>
+<tr class="separator:a94fec0d12bb1fd34e4ae2adce153dd57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9578a174fcdc8f7972a7bcb86b0a2c7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9578a174fcdc8f7972a7bcb86b0a2c7c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename)</td></tr>
+<tr class="separator:a9578a174fcdc8f7972a7bcb86b0a2c7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a69f4540287e25651a60c264d10fbe4cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69f4540287e25651a60c264d10fbe4cf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:a69f4540287e25651a60c264d10fbe4cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c07df2a840a6794999c672d5d2c2ad6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c07df2a840a6794999c672d5d2c2ad6"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a9c07df2a840a6794999c672d5d2c2ad6"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readXY</b> (std::vector< T > &xVector, std::vector< T > &yVector, int layer=0, bool verbose=false)</td></tr>
+<tr class="separator:a9c07df2a840a6794999c672d5d2c2ad6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a286a2705dd21e60b0c2e7c2903d6b81c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a286a2705dd21e60b0c2e7c2903d6b81c"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a286a2705dd21e60b0c2e7c2903d6b81c"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readY</b> (std::vector< T > &yVector, int layer=0, bool verbose=false)</td></tr>
+<tr class="separator:a286a2705dd21e60b0c2e7c2903d6b81c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfbf5900ca1501b94d587380fedb9743"><td class="memTemplParams" colspan="2"><a class="anchor" id="acfbf5900ca1501b94d587380fedb9743"></a>
+template<typename T > </td></tr>
+<tr class="memitem:acfbf5900ca1501b94d587380fedb9743"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, OGRFeature *poFeature, int layer=0, bool pos=false, bool verbose=false)</td></tr>
+<tr class="separator:acfbf5900ca1501b94d587380fedb9743"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a11d378cfa7f1cf3fe7d58c91ffc3cdf2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a11d378cfa7f1cf3fe7d58c91ffc3cdf2"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a11d378cfa7f1cf3fe7d58c91ffc3cdf2"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< T > &data, const OGRFieldType &fieldType, const std::string &theField, int layer=0, bool verbose=false)</td></tr>
+<tr class="separator:a11d378cfa7f1cf3fe7d58c91ffc3cdf2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13b71d20a6c57d4a59644a1167c5b10d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a13b71d20a6c57d4a59644a1167c5b10d"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a13b71d20a6c57d4a59644a1167c5b10d"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, int layer=0, bool pos=false, bool verbose=false)</td></tr>
+<tr class="separator:a13b71d20a6c57d4a59644a1167c5b10d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b75ce947dad5821be9e702f6e548b54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5b75ce947dad5821be9e702f6e548b54"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a5b75ce947dad5821be9e702f6e548b54"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::map< int, <a class="el" href="classVector2d.html">Vector2d</a>< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, int layer=0, bool pos=false, bool verbose=false)</td></tr>
+<tr class="separator:a5b75ce947dad5821be9e702f6e548b54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a727233009401acf559927884f956c960"><td class="memTemplParams" colspan="2"><a class="anchor" id="a727233009401acf559927884f956c960"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a727233009401acf559927884f956c960"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::map< std::string, <a class="el" href="classVector2d.html">Vector2d</a>< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, int layer=0, bool pos=false, bool verbose=false)</td></tr>
+<tr class="separator:a727233009401acf559927884f956c960"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93a29859caf6505737c59f5ac5b8d710"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93a29859caf6505737c59f5ac5b8d710"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>readDataImageOgr</b> (std::map< std::string, <a class="el" href="classVector2d.html">Vector2d</a>< float > > &mapPixels, std::vector< std::string > &fields, const std::vector< short > &bands, const std::string &label, const std::vector< std::string > &layers, int verbose=false)</td></tr>
+<tr class="separator:a93a29859caf6505737c59f5ac5b8d710"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d15d5e9ac84c21eba3c026afe125afb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d15d5e9ac84c21eba3c026afe125afb"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>readDataImageOgr</b> (std::map< std::string, <a class="el" href="classVector2d.html">Vector2d</a>< float > > &mapPixels, std::vector< std::string > &fields, double start, double end, const std::string &label, const std::vector< std::string > &layers, int verbose=false)</td></tr>
+<tr class="separator:a1d15d5e9ac84c21eba3c026afe125afb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e4a42329f61e713956a01e25fbdfd1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e4a42329f61e713956a01e25fbdfd1e"></a>
+unsigned long int </td><td class="memItemRight" valign="bottom"><b>getFeatureCount</b> (int layer=0) const </td></tr>
+<tr class="separator:a9e4a42329f61e713956a01e25fbdfd1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3f6c6942d2cda416c56d0da6035fba6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3f6c6942d2cda416c56d0da6035fba6"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFieldCount</b> (int layer=0) const </td></tr>
+<tr class="separator:aa3f6c6942d2cda416c56d0da6035fba6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b76e4b26f67408ae6466f1b594aca98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b76e4b26f67408ae6466f1b594aca98"></a>
+OGRLayer * </td><td class="memItemRight" valign="bottom"><b>getLayer</b> (int layer=0)</td></tr>
+<tr class="separator:a5b76e4b26f67408ae6466f1b594aca98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad564401b1069233c1a9c6cfef3cb7bde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad564401b1069233c1a9c6cfef3cb7bde"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getProjection</b> (int layer=0) const </td></tr>
+<tr class="separator:ad564401b1069233c1a9c6cfef3cb7bde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab007e9cd6bd6584cb4bd2af2b4ee46ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab007e9cd6bd6584cb4bd2af2b4ee46ed"></a>
+OGRwkbGeometryType </td><td class="memItemRight" valign="bottom"><b>getGeometryType</b> (int layer=0) const </td></tr>
+<tr class="separator:ab007e9cd6bd6584cb4bd2af2b4ee46ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3263eeab80039bc1c11ae325bcaa63a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3263eeab80039bc1c11ae325bcaa63a"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getLayerName</b> (int layer=0)</td></tr>
+<tr class="separator:af3263eeab80039bc1c11ae325bcaa63a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3223730305d29f98e9f790ebb29e65a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3223730305d29f98e9f790ebb29e65a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFields</b> (std::vector< std::string > &fields, int layer=0) const </td></tr>
+<tr class="separator:ac3223730305d29f98e9f790ebb29e65a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac68fdf56b605133e1d38f7570a94c479"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac68fdf56b605133e1d38f7570a94c479"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFields</b> (std::vector< OGRFieldDefn * > &fields, int layer=0) const </td></tr>
+<tr class="separator:ac68fdf56b605133e1d38f7570a94c479"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a688e1d39b3a8ba2c790fda1d42e8b7b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a688e1d39b3a8ba2c790fda1d42e8b7b7"></a>
+OGRDataSource * </td><td class="memItemRight" valign="bottom"><b>getDataSource</b> (void)</td></tr>
+<tr class="separator:a688e1d39b3a8ba2c790fda1d42e8b7b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a504972f7088ecb61cf9a4e28340ff1f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a504972f7088ecb61cf9a4e28340ff1f7"></a>
+OGRSFDriver * </td><td class="memItemRight" valign="bottom"><b>getDriver</b> (void) const </td></tr>
+<tr class="separator:a504972f7088ecb61cf9a4e28340ff1f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d1768efc19b910788ef52841d9075ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d1768efc19b910788ef52841d9075ed"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getLayerCount</b> (void) const </td></tr>
+<tr class="separator:a8d1768efc19b910788ef52841d9075ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a53d980642dc048b3fabce1e5948abd64"><td class="memTemplParams" colspan="2"><a class="anchor" id="a53d980642dc048b3fabce1e5948abd64"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a53d980642dc048b3fabce1e5948abd64"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readSql</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &sqlStatement, OGRGeometry *spatialFilter=NULL, int layer=0, bool pos=false, bool verbose=false)</td></tr>
+<tr class="separator:a53d980642dc048b3fabce1e5948abd64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a92e19ff3fdfa7e130708215c83521b5f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a92e19ff3fdfa7e130708215c83521b5f"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a92e19ff3fdfa7e130708215c83521b5f"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readSql</b> (std::map< int, <a class="el" href="classVector2d.html">Vector2d</a>< T > > &data, const OGRFieldType &fieldType, std::vector< std::string > &fields, const std::string &label, const std::string &sqlStatement, OGRGeometry *spatialFilter, int layer=0, bool pos=false, boo [...]
+<tr class="separator:a92e19ff3fdfa7e130708215c83521b5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2d0e4255c3f856e1e9fdf72294705df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2d0e4255c3f856e1e9fdf72294705df"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getExtent</b> (double &ulx, double &uly, double &lrx, double &lry, int layer)</td></tr>
+<tr class="separator:ae2d0e4255c3f856e1e9fdf72294705df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac697fc6e9dde91b3ac769df23e265ba2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac697fc6e9dde91b3ac769df23e265ba2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getExtent</b> (double &ulx, double &uly, double &lrx, double &lry)</td></tr>
+<tr class="separator:ac697fc6e9dde91b3ac769df23e265ba2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05b2fdedd8982d3ddf766c4b288a127e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05b2fdedd8982d3ddf766c4b288a127e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFieldSeparator</b> (const char fs)</td></tr>
+<tr class="separator:a05b2fdedd8982d3ddf766c4b288a127e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4235bf3f4ca39d99f33fbe920749bc77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4235bf3f4ca39d99f33fbe920749bc77"></a>
+char </td><td class="memItemRight" valign="bottom"><b>getFieldSeparator</b> () const </td></tr>
+<tr class="separator:a4235bf3f4ca39d99f33fbe920749bc77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a92c43d575cda30e8b23f79367676e429"><td class="memTemplParams" colspan="2"><a class="anchor" id="a92c43d575cda30e8b23f79367676e429"></a>
+template<> </td></tr>
+<tr class="memitem:a92c43d575cda30e8b23f79367676e429"><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><b>readData</b> (std::vector< std::string > &data, const OGRFieldType &fieldType, const std::string &theField, int layer, bool verbose)</td></tr>
+<tr class="separator:a92c43d575cda30e8b23f79367676e429"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae20d07a076ba6b4bbc64180387ad3475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae20d07a076ba6b4bbc64180387ad3475"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (void)</td></tr>
+<tr class="separator:ae20d07a076ba6b4bbc64180387ad3475"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a071a6270bfc16b5a85e93c82ff7f3ab8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a071a6270bfc16b5a85e93c82ff7f3ab8"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a071a6270bfc16b5a85e93c82ff7f3ab8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9eac7a1fb64f0380292247dae2601223"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eac7a1fb64f0380292247dae2601223"></a>
+OGRDataSource * </td><td class="memItemRight" valign="bottom"><b>m_datasource</b></td></tr>
+<tr class="separator:a9eac7a1fb64f0380292247dae2601223"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a328e2b2d8f97f0bdd1cca04a8f22e3a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a328e2b2d8f97f0bdd1cca04a8f22e3a5"></a>
+char </td><td class="memItemRight" valign="bottom"><b>m_fs</b></td></tr>
+<tr class="separator:a328e2b2d8f97f0bdd1cca04a8f22e3a5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a52ec57bf90bd0d91bf00b96c3d645648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52ec57bf90bd0d91bf00b96c3d645648"></a>
+std::ostream & </td><td class="memItemRight" valign="bottom"><b>operator<<</b> (std::ostream &theOstream, <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &theImageReader)</td></tr>
+<tr class="separator:a52ec57bf90bd0d91bf00b96c3d645648"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ImgReaderOgr_8h_source.html#l00035">35</a> of file <a class="el" href="ImgReaderOgr_8h_source.html">ImgReaderOgr.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgReaderOgr_8h_source.html">ImgReaderOgr.h</a></li>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgReaderOgr_8cc_source.html">ImgReaderOgr.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgReaderOgr__coll__graph.map b/doc/html/classImgReaderOgr__coll__graph.map
new file mode 100644
index 0000000..29b68d4
--- /dev/null
+++ b/doc/html/classImgReaderOgr__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="ImgReaderOgr" name="ImgReaderOgr">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/>
+</map>
diff --git a/doc/html/classImgReaderOgr__coll__graph.md5 b/doc/html/classImgReaderOgr__coll__graph.md5
new file mode 100644
index 0000000..e474047
--- /dev/null
+++ b/doc/html/classImgReaderOgr__coll__graph.md5
@@ -0,0 +1 @@
+a7b2b3b91bc53ca3661c7ad39dd3aa5c
\ No newline at end of file
diff --git a/doc/html/classImgReaderOgr__coll__graph.png b/doc/html/classImgReaderOgr__coll__graph.png
new file mode 100644
index 0000000..ee7506d
Binary files /dev/null and b/doc/html/classImgReaderOgr__coll__graph.png differ
diff --git a/doc/html/classImgWriterGdal-members.html b/doc/html/classImgWriterGdal-members.html
new file mode 100644
index 0000000..5b0a770
--- /dev/null
+++ b/doc/html/classImgWriterGdal-members.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterGdal Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>copyGeoTransform</b>(const ImgReaderGdal &imgSrc) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>covers</b>(double x, double y) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>covers</b>(double ulx, double uly, double lrx, double lry) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GDALSetNoDataValue</b>(double noDataValue, int band=0) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>geo2image</b>(double x, double y, double &i, double &j) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBoundingBox</b>(double &ulx, double &uly, double &lrx, double &lry) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getCentrePos</b>(double &x, double &y) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDataType</b>(int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDeltaX</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDeltaY</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFileName</b>() const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getGeoTransform</b>() const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getGeoTransform</b>(double *gt) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getProjection</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getRasterBand</b>(int band) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>image2geo</b>(double i, double j, double &x, double &y) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ImgWriterGdal</b>(void) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isGeoRef</b>() const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_gds</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_gt</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nband</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ncol</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nrow</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_options</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_type</b> (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nrOfBand</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nrOfCol</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nrOfRow</b>(void) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>open</b>(const std::string &filename, const ImgReaderGdal &imgSrc, const std::vector< std::string > &options=std::vector< std::string >()) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename, int ncol, int nrow, int nband, const GDALDataType &dataType, const std::string &imageType, const std::vector< std::string > &options=std::vector< std::string >()) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>rasterizeOgr</b>(ImgReaderOgr &ogrReader, const std::vector< double > &burnValues=std::vector< double >(), const std::vector< std::string > &layernames=std::vector< std::string >()) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCodec</b>(const std::string &imageType) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCodec</b>(const ImgReaderGdal &ImgSrc) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setColorTable</b>(const std::string &filename, int band=0) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setColorTable</b>(GDALColorTable *colorTable, int band=0) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setGeoTransform</b>(double *gt) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setImageDescription</b>(const std::string &imageDescription) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setMetadata</b>(char **metadata) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setProjection</b>(void) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setProjection</b>(const std::string &projection) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setProjectionProj4</b>(const std::string &projection) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeData</b>(T &value, const GDALDataType &dataType, int col, int row, int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeData</b>(std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int row, int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeData</b>(std::vector< T > &buffer, const GDALDataType &dataType, int row, int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeData</b>(void *pdata, const GDALDataType &dataType, int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeDataBlock</b>(Vector2d< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~ImgWriterGdal</b>(void) (defined in <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a>)</td><td class="entry"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgWriterGdal.html b/doc/html/classImgWriterGdal.html
new file mode 100644
index 0000000..69fd5e4
--- /dev/null
+++ b/doc/html/classImgWriterGdal.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: ImgWriterGdal Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classImgWriterGdal-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ImgWriterGdal Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for ImgWriterGdal:</div>
+<div class="dyncontent">
+<div class="center"><img src="classImgWriterGdal__coll__graph.png" border="0" usemap="#ImgWriterGdal_coll__map" alt="Collaboration graph"/></div>
+<map name="ImgWriterGdal_coll__map" id="ImgWriterGdal_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/><area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a39eece0dfdf9f748d5a3efb14c04b223"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39eece0dfdf9f748d5a3efb14c04b223"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename)</td></tr>
+<tr class="separator:a39eece0dfdf9f748d5a3efb14c04b223"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e3f6d15a12434de5003133b5a1dce46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e3f6d15a12434de5003133b5a1dce46"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename, const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgSrc, const std::vector< std::string > &options=std::vector< std::string >())</td></tr>
+<tr class="separator:a5e3f6d15a12434de5003133b5a1dce46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42163b49a345a54dd53bc7cfbe2cdf41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42163b49a345a54dd53bc7cfbe2cdf41"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename, int ncol, int nrow, int nband, const GDALDataType &dataType, const std::string &imageType, const std::vector< std::string > &options=std::vector< std::string >())</td></tr>
+<tr class="separator:a42163b49a345a54dd53bc7cfbe2cdf41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29f36d8b5c6f004a0b44413bc593a06c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29f36d8b5c6f004a0b44413bc593a06c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:a29f36d8b5c6f004a0b44413bc593a06c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04c38f64c8de2fa7a6da0fd887673f65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04c38f64c8de2fa7a6da0fd887673f65"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getFileName</b> () const </td></tr>
+<tr class="separator:a04c38f64c8de2fa7a6da0fd887673f65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad908cd57791a94ae78c1bdacabee851b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad908cd57791a94ae78c1bdacabee851b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfCol</b> (void) const </td></tr>
+<tr class="separator:ad908cd57791a94ae78c1bdacabee851b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a539b5cb2947010ec7d9d79aff685a6f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a539b5cb2947010ec7d9d79aff685a6f8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfRow</b> (void) const </td></tr>
+<tr class="separator:a539b5cb2947010ec7d9d79aff685a6f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a272a18a1ac026e8fc39f25518cc1640e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a272a18a1ac026e8fc39f25518cc1640e"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nrOfBand</b> (void) const </td></tr>
+<tr class="separator:a272a18a1ac026e8fc39f25518cc1640e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf54fe7f5fc54e17f235e6c20d788ed9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf54fe7f5fc54e17f235e6c20d788ed9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>copyGeoTransform</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgSrc)</td></tr>
+<tr class="separator:aaf54fe7f5fc54e17f235e6c20d788ed9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5cfa4c560e8f6e9bc443b3b482d1a10f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cfa4c560e8f6e9bc443b3b482d1a10f"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>setProjection</b> (void)</td></tr>
+<tr class="separator:a5cfa4c560e8f6e9bc443b3b482d1a10f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:accdb98bddf68438d9e4716a70899c00b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accdb98bddf68438d9e4716a70899c00b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setProjection</b> (const std::string &projection)</td></tr>
+<tr class="separator:accdb98bddf68438d9e4716a70899c00b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46aaabf3510de2a613d20246d6dc8074"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46aaabf3510de2a613d20246d6dc8074"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>setProjectionProj4</b> (const std::string &projection)</td></tr>
+<tr class="separator:a46aaabf3510de2a613d20246d6dc8074"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac108a7ab4faddda5279766251da4e980"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac108a7ab4faddda5279766251da4e980"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setImageDescription</b> (const std::string &imageDescription)</td></tr>
+<tr class="separator:ac108a7ab4faddda5279766251da4e980"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab002f6e5275cbaa097e7160d370fc7b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab002f6e5275cbaa097e7160d370fc7b9"></a>
+CPLErr </td><td class="memItemRight" valign="bottom"><b>GDALSetNoDataValue</b> (double noDataValue, int band=0)</td></tr>
+<tr class="separator:ab002f6e5275cbaa097e7160d370fc7b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a119b7442988bd347eef4295aa7d5cac8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a119b7442988bd347eef4295aa7d5cac8"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getProjection</b> (void) const </td></tr>
+<tr class="separator:a119b7442988bd347eef4295aa7d5cac8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc12b112024ebd66c54e6961ccc60a01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc12b112024ebd66c54e6961ccc60a01"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getGeoTransform</b> () const </td></tr>
+<tr class="separator:acc12b112024ebd66c54e6961ccc60a01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a81e8f22ab036874ad3e90f15004721d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81e8f22ab036874ad3e90f15004721d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getGeoTransform</b> (double *gt) const </td></tr>
+<tr class="separator:a81e8f22ab036874ad3e90f15004721d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a614042cd8c0fea041c1de282e8c21ce5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a614042cd8c0fea041c1de282e8c21ce5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setGeoTransform</b> (double *gt)</td></tr>
+<tr class="separator:a614042cd8c0fea041c1de282e8c21ce5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06dcbe1567048f78e5f348940ba5d268"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06dcbe1567048f78e5f348940ba5d268"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getBoundingBox</b> (double &ulx, double &uly, double &lrx, double &lry) const </td></tr>
+<tr class="separator:a06dcbe1567048f78e5f348940ba5d268"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8483cfc78bb8123be6280a8b09d6aeaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8483cfc78bb8123be6280a8b09d6aeaa"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>getCentrePos</b> (double &x, double &y) const </td></tr>
+<tr class="separator:a8483cfc78bb8123be6280a8b09d6aeaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9683458e2178d4f051d6f24574b96f22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9683458e2178d4f051d6f24574b96f22"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>covers</b> (double x, double y) const </td></tr>
+<tr class="separator:a9683458e2178d4f051d6f24574b96f22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cedc098d1733ef61845728aab4f9c56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cedc098d1733ef61845728aab4f9c56"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>covers</b> (double ulx, double uly, double lrx, double lry) const </td></tr>
+<tr class="separator:a4cedc098d1733ef61845728aab4f9c56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b44bab59936afa323174f111ad6228b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b44bab59936afa323174f111ad6228b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>geo2image</b> (double x, double y, double &i, double &j) const </td></tr>
+<tr class="separator:a1b44bab59936afa323174f111ad6228b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a135f141747bba7e4451332e5747a8515"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a135f141747bba7e4451332e5747a8515"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>image2geo</b> (double i, double j, double &x, double &y) const </td></tr>
+<tr class="separator:a135f141747bba7e4451332e5747a8515"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef51bf244050ae1e342bbf60450e4774"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef51bf244050ae1e342bbf60450e4774"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>isGeoRef</b> () const </td></tr>
+<tr class="separator:aef51bf244050ae1e342bbf60450e4774"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a498d8e8dc2c469df3487a1c4463aad35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a498d8e8dc2c469df3487a1c4463aad35"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getDeltaX</b> (void) const </td></tr>
+<tr class="separator:a498d8e8dc2c469df3487a1c4463aad35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3817ffd87cbe91326d12f6de0d1e6cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3817ffd87cbe91326d12f6de0d1e6cd"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getDeltaY</b> (void) const </td></tr>
+<tr class="separator:af3817ffd87cbe91326d12f6de0d1e6cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12acdd8869b7546d8d46041e8882ecbd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a12acdd8869b7546d8d46041e8882ecbd"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a12acdd8869b7546d8d46041e8882ecbd"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>writeData</b> (T &value, const GDALDataType &dataType, int col, int row, int band=0) const </td></tr>
+<tr class="separator:a12acdd8869b7546d8d46041e8882ecbd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb5f9887d42599250adab013843779f2"><td class="memTemplParams" colspan="2"><a class="anchor" id="acb5f9887d42599250adab013843779f2"></a>
+template<typename T > </td></tr>
+<tr class="memitem:acb5f9887d42599250adab013843779f2"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>writeData</b> (std::vector< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int row, int band=0) const </td></tr>
+<tr class="separator:acb5f9887d42599250adab013843779f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa25cd22a4f6c8f5b6874e4181352a488"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa25cd22a4f6c8f5b6874e4181352a488"></a>
+template<typename T > </td></tr>
+<tr class="memitem:aa25cd22a4f6c8f5b6874e4181352a488"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>writeData</b> (std::vector< T > &buffer, const GDALDataType &dataType, int row, int band=0) const </td></tr>
+<tr class="separator:aa25cd22a4f6c8f5b6874e4181352a488"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a210a845c2a1c27c377f9b7ec3bfb5445"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a210a845c2a1c27c377f9b7ec3bfb5445"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>writeData</b> (void *pdata, const GDALDataType &dataType, int band=0) const </td></tr>
+<tr class="separator:a210a845c2a1c27c377f9b7ec3bfb5445"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae87b86ecee4ef2de22aa6b8274f51bb4"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae87b86ecee4ef2de22aa6b8274f51bb4"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ae87b86ecee4ef2de22aa6b8274f51bb4"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>writeDataBlock</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &buffer, const GDALDataType &dataType, int minCol, int maxCol, int minRow, int maxRow, int band=0) const </td></tr>
+<tr class="separator:ae87b86ecee4ef2de22aa6b8274f51bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa482e0fc4e1536044a2caced4b9bb87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa482e0fc4e1536044a2caced4b9bb87"></a>
+GDALDataType </td><td class="memItemRight" valign="bottom"><b>getDataType</b> (int band=0) const </td></tr>
+<tr class="separator:aaa482e0fc4e1536044a2caced4b9bb87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac14abc49a02247046f2d16ce2daf8c1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac14abc49a02247046f2d16ce2daf8c1c"></a>
+GDALRasterBand * </td><td class="memItemRight" valign="bottom"><b>getRasterBand</b> (int band)</td></tr>
+<tr class="separator:ac14abc49a02247046f2d16ce2daf8c1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba7218154ec7485df3cc7b31d4fe1cbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba7218154ec7485df3cc7b31d4fe1cbc"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setColorTable</b> (const std::string &filename, int band=0)</td></tr>
+<tr class="separator:aba7218154ec7485df3cc7b31d4fe1cbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05696bec20682ef5f4087cde533ffaa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05696bec20682ef5f4087cde533ffaa1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setColorTable</b> (GDALColorTable *colorTable, int band=0)</td></tr>
+<tr class="separator:a05696bec20682ef5f4087cde533ffaa1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35425fab3a863cb624d674e67c8bf03c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35425fab3a863cb624d674e67c8bf03c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setMetadata</b> (char **metadata)</td></tr>
+<tr class="separator:a35425fab3a863cb624d674e67c8bf03c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90e4fdd42f8fe95d11bc3627bb2bb949"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90e4fdd42f8fe95d11bc3627bb2bb949"></a>
+void </td><td class="memItemRight" valign="bottom"><b>rasterizeOgr</b> (<a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &ogrReader, const std::vector< double > &burnValues=std::vector< double >(), const std::vector< std::string > &layernames=std::vector< std::string >())</td></tr>
+<tr class="separator:a90e4fdd42f8fe95d11bc3627bb2bb949"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a368aec4632a2877b30d5a895d5132012"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a368aec4632a2877b30d5a895d5132012"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (const std::string &imageType)</td></tr>
+<tr class="separator:a368aec4632a2877b30d5a895d5132012"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d084ba67f72031fa75047434ec74779"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d084ba67f72031fa75047434ec74779"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &ImgSrc)</td></tr>
+<tr class="separator:a1d084ba67f72031fa75047434ec74779"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a77409489fab55ae32df94a6911c3459d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77409489fab55ae32df94a6911c3459d"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a77409489fab55ae32df94a6911c3459d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a348a776adc9d1f4c5eb89fb194f63eed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a348a776adc9d1f4c5eb89fb194f63eed"></a>
+GDALDataset * </td><td class="memItemRight" valign="bottom"><b>m_gds</b></td></tr>
+<tr class="separator:a348a776adc9d1f4c5eb89fb194f63eed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e30c2d8b8696a3a20e85f507412821a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e30c2d8b8696a3a20e85f507412821a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_ncol</b></td></tr>
+<tr class="separator:a7e30c2d8b8696a3a20e85f507412821a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46e42741630881692611a452b82cc408"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46e42741630881692611a452b82cc408"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_nrow</b></td></tr>
+<tr class="separator:a46e42741630881692611a452b82cc408"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3502d2332d4a52a0a3efdb4f35a74be6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3502d2332d4a52a0a3efdb4f35a74be6"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m_nband</b></td></tr>
+<tr class="separator:a3502d2332d4a52a0a3efdb4f35a74be6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8b53c690c8c70627ac2710ef6abb3e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8b53c690c8c70627ac2710ef6abb3e2"></a>
+GDALDataType </td><td class="memItemRight" valign="bottom"><b>m_type</b></td></tr>
+<tr class="separator:aa8b53c690c8c70627ac2710ef6abb3e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa821eb63087da4a9cd84817416bfb27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa821eb63087da4a9cd84817416bfb27"></a>
+double </td><td class="memItemRight" valign="bottom"><b>m_gt</b> [6]</td></tr>
+<tr class="separator:afa821eb63087da4a9cd84817416bfb27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74dd6523b3f607f31e2f35baf45bfbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74dd6523b3f607f31e2f35baf45bfbd8"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>m_options</b></td></tr>
+<tr class="separator:a74dd6523b3f607f31e2f35baf45bfbd8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ImgWriterGdal_8h_source.html#l00032">32</a> of file <a class="el" href="ImgWriterGdal_8h_source.html">ImgWriterGdal.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgWriterGdal_8h_source.html">ImgWriterGdal.h</a></li>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgWriterGdal_8cc_source.html">ImgWriterGdal.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgWriterGdal__coll__graph.map b/doc/html/classImgWriterGdal__coll__graph.map
new file mode 100644
index 0000000..68e717c
--- /dev/null
+++ b/doc/html/classImgWriterGdal__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="ImgWriterGdal" name="ImgWriterGdal">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/>
+</map>
diff --git a/doc/html/classImgWriterGdal__coll__graph.md5 b/doc/html/classImgWriterGdal__coll__graph.md5
new file mode 100644
index 0000000..8bb0158
--- /dev/null
+++ b/doc/html/classImgWriterGdal__coll__graph.md5
@@ -0,0 +1 @@
+5cd564b9171a1c3be7d2dbd374b25a04
\ No newline at end of file
diff --git a/doc/html/classImgWriterGdal__coll__graph.png b/doc/html/classImgWriterGdal__coll__graph.png
new file mode 100644
index 0000000..399f1fe
Binary files /dev/null and b/doc/html/classImgWriterGdal__coll__graph.png differ
diff --git a/doc/html/classImgWriterOgr-members.html b/doc/html/classImgWriterOgr-members.html
new file mode 100644
index 0000000..12530c1
--- /dev/null
+++ b/doc/html/classImgWriterOgr-members.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ImgWriterOgr Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addData</b>(const ImgReaderGdal &imgReader, int layer=0, bool verbose=false) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addLineString</b>(std::vector< OGRPoint * > &points, const std::string &fieldName, const std::string &theId, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLineString</b>(std::vector< OGRPoint * > &points, const std::string &fieldName, int theId, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addPoint</b>(double x, double y, const std::map< std::string, double > &pointAttributes, std::string fieldName, const std::string &theId, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addPoint</b>(double x, double y, const std::map< std::string, double > &pointAttributes, std::string fieldName, int theId, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addRing</b>(std::vector< OGRPoint * > &points, const std::string &fieldName, int theId, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ascii2ogr</b>(const std::string &filename, const std::string &layername, const std::vector< std::string > &fieldName, const std::vector< OGRFieldType > &fieldType, short colX=1, short colY=2, const std::string &theProjection="", const OGRwkbGeometryType &eGType=wkbPoint, const char fs=' ') (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry">< [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>close</b>(void) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copyFields</b>(const ImgReaderOgr &imgReaderOgr, int srcLayer=0, int targetLayer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>copyLayer</b>(OGRLayer *poSrcLayer, const std::string &layername, char **papszOptions=NULL) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>createFeature</b>(int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>createFeature</b>(OGRFeature *theFeature, int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>createField</b>(const std::string &fieldname, const OGRFieldType &fieldType, int theLayer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>createLayer</b>(const std::string &layername="New layer", const std::string &theProjection="", const OGRwkbGeometryType &eGType=wkbUnknown, char **papszOptions=NULL) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDataSource</b>(void) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDriver</b>(void) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFeatureCount</b>(int layer=0) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFieldCount</b>(int layer=0) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFields</b>(std::vector< std::string > &fields, int layer=0) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFields</b>(std::vector< OGRFieldDefn * > &fields, int layer=0) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getLayer</b>(int layer=0) const (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLayerName</b>(int layer=0) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ImgWriterOgr</b>(void) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ImgWriterOgr</b>(const std::string &filename, const std::string &imageType="ESRI Shapefile") (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ImgWriterOgr</b>(const std::string &filename, ImgReaderOgr &imgReaderOgr) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ImgWriterOgr</b>(const std::string &filename, ImgReaderOgr &imgReaderOgr, bool copyData) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_datasource</b> (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_filename</b> (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>open</b>(const std::string &filename, ImgReaderOgr &imgReaderOgr) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>open</b>(const std::string &filename, const std::string &imageType="ESRI Shapefile") (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCodec</b>(const std::string &imageType) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCodec</b>(OGRSFDriver *poDriver) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~ImgWriterOgr</b>(void) (defined in <a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a>)</td><td class="entry"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgWriterOgr.html b/doc/html/classImgWriterOgr.html
new file mode 100644
index 0000000..aac4763
--- /dev/null
+++ b/doc/html/classImgWriterOgr.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: ImgWriterOgr Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classImgWriterOgr-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ImgWriterOgr Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for ImgWriterOgr:</div>
+<div class="dyncontent">
+<div class="center"><img src="classImgWriterOgr__coll__graph.png" border="0" usemap="#ImgWriterOgr_coll__map" alt="Collaboration graph"/></div>
+<map name="ImgWriterOgr_coll__map" id="ImgWriterOgr_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/><area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a06ed36aa3fee393b3d72858511a0c4da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06ed36aa3fee393b3d72858511a0c4da"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ImgWriterOgr</b> (const std::string &filename, const std::string &imageType="ESRI Shapefile")</td></tr>
+<tr class="separator:a06ed36aa3fee393b3d72858511a0c4da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44982aa40f6fbd0053167e8edf2ada46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44982aa40f6fbd0053167e8edf2ada46"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ImgWriterOgr</b> (const std::string &filename, <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &imgReaderOgr)</td></tr>
+<tr class="separator:a44982aa40f6fbd0053167e8edf2ada46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f7dd0327c6b209f0160ad81fa1b50c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f7dd0327c6b209f0160ad81fa1b50c1"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ImgWriterOgr</b> (const std::string &filename, <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &imgReaderOgr, bool copyData)</td></tr>
+<tr class="separator:a2f7dd0327c6b209f0160ad81fa1b50c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3696891d63ca716eafbb7ed7c192e5f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3696891d63ca716eafbb7ed7c192e5f5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename, <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &imgReaderOgr)</td></tr>
+<tr class="separator:a3696891d63ca716eafbb7ed7c192e5f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad10e9763688ecc94fbb6225e0f101b6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad10e9763688ecc94fbb6225e0f101b6f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>open</b> (const std::string &filename, const std::string &imageType="ESRI Shapefile")</td></tr>
+<tr class="separator:ad10e9763688ecc94fbb6225e0f101b6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae311da9131831cf2f013692ddde3266b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae311da9131831cf2f013692ddde3266b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>close</b> (void)</td></tr>
+<tr class="separator:ae311da9131831cf2f013692ddde3266b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae72e3dddee626e8c46562c0db9611628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae72e3dddee626e8c46562c0db9611628"></a>
+int </td><td class="memItemRight" valign="bottom"><b>ascii2ogr</b> (const std::string &filename, const std::string &layername, const std::vector< std::string > &fieldName, const std::vector< OGRFieldType > &fieldType, short colX=1, short colY=2, const std::string &theProjection="", const OGRwkbGeometryType &eGType=wkbPoint, const char fs=' ')</td></tr>
+<tr class="separator:ae72e3dddee626e8c46562c0db9611628"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a956bf99e23bde6482217827d6159a7ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a956bf99e23bde6482217827d6159a7ff"></a>
+OGRLayer * </td><td class="memItemRight" valign="bottom"><b>createLayer</b> (const std::string &layername="New layer", const std::string &theProjection="", const OGRwkbGeometryType &eGType=wkbUnknown, char **papszOptions=NULL)</td></tr>
+<tr class="separator:a956bf99e23bde6482217827d6159a7ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1498a0e45a6ec1b7d28b144baa6dfab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1498a0e45a6ec1b7d28b144baa6dfab6"></a>
+OGRLayer * </td><td class="memItemRight" valign="bottom"><b>copyLayer</b> (OGRLayer *poSrcLayer, const std::string &layername, char **papszOptions=NULL)</td></tr>
+<tr class="separator:a1498a0e45a6ec1b7d28b144baa6dfab6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a294f5a823ad31624481f1bd4f702d2ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a294f5a823ad31624481f1bd4f702d2ba"></a>
+void </td><td class="memItemRight" valign="bottom"><b>createField</b> (const std::string &fieldname, const OGRFieldType &fieldType, int theLayer=0)</td></tr>
+<tr class="separator:a294f5a823ad31624481f1bd4f702d2ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad523703c945833bed462d187a62cdd48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad523703c945833bed462d187a62cdd48"></a>
+OGRLayer * </td><td class="memItemRight" valign="bottom"><b>getLayer</b> (int layer=0) const </td></tr>
+<tr class="separator:ad523703c945833bed462d187a62cdd48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15ad92f4a2967369e39da29b4bff3166"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15ad92f4a2967369e39da29b4bff3166"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getLayerName</b> (int layer=0)</td></tr>
+<tr class="separator:a15ad92f4a2967369e39da29b4bff3166"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae1e8f108b3c8cd7c5dd9428668dcf293"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1e8f108b3c8cd7c5dd9428668dcf293"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFields</b> (std::vector< std::string > &fields, int layer=0) const </td></tr>
+<tr class="separator:ae1e8f108b3c8cd7c5dd9428668dcf293"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4d0d97668f55bf02de92b7c705bef0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0d97668f55bf02de92b7c705bef0b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFields</b> (std::vector< OGRFieldDefn * > &fields, int layer=0) const </td></tr>
+<tr class="separator:ab4d0d97668f55bf02de92b7c705bef0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad50e5f1f9d89b08392de8ac7b8d3385e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50e5f1f9d89b08392de8ac7b8d3385e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>copyFields</b> (const <a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> &imgReaderOgr, int srcLayer=0, int targetLayer=0)</td></tr>
+<tr class="separator:ad50e5f1f9d89b08392de8ac7b8d3385e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44d5d3f3970747e904fc3c7bcf6e9f72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44d5d3f3970747e904fc3c7bcf6e9f72"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addLineString</b> (std::vector< OGRPoint * > &points, const std::string &fieldName, const std::string &theId, int layer=0)</td></tr>
+<tr class="separator:a44d5d3f3970747e904fc3c7bcf6e9f72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acff921985b54fb57780755ea89da32a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acff921985b54fb57780755ea89da32a0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addRing</b> (std::vector< OGRPoint * > &points, const std::string &fieldName, int theId, int layer=0)</td></tr>
+<tr class="separator:acff921985b54fb57780755ea89da32a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a859197a4389540de7f4b731b6fda7e2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a859197a4389540de7f4b731b6fda7e2b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addLineString</b> (std::vector< OGRPoint * > &points, const std::string &fieldName, int theId, int layer=0)</td></tr>
+<tr class="separator:a859197a4389540de7f4b731b6fda7e2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9aadbe01f4400046374d6dbc23c593b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9aadbe01f4400046374d6dbc23c593b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addPoint</b> (double x, double y, const std::map< std::string, double > &pointAttributes, std::string fieldName, const std::string &theId, int layer=0)</td></tr>
+<tr class="separator:af9aadbe01f4400046374d6dbc23c593b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03bdd1b03a535c988e2d31f530459d13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03bdd1b03a535c988e2d31f530459d13"></a>
+void </td><td class="memItemRight" valign="bottom"><b>addPoint</b> (double x, double y, const std::map< std::string, double > &pointAttributes, std::string fieldName, int theId, int layer=0)</td></tr>
+<tr class="separator:a03bdd1b03a535c988e2d31f530459d13"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bc5dc87a4ef65738bd7ff4e8c85cca3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bc5dc87a4ef65738bd7ff4e8c85cca3"></a>
+int </td><td class="memItemRight" valign="bottom"><b>addData</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader, int layer=0, bool verbose=false)</td></tr>
+<tr class="separator:a8bc5dc87a4ef65738bd7ff4e8c85cca3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b4a98bb3139f79c4ad7f957b63b5c1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b4a98bb3139f79c4ad7f957b63b5c1f"></a>
+OGRFeature * </td><td class="memItemRight" valign="bottom"><b>createFeature</b> (int layer=0)</td></tr>
+<tr class="separator:a0b4a98bb3139f79c4ad7f957b63b5c1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aedc35f0ad0988e3f5804b85f5525a8d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aedc35f0ad0988e3f5804b85f5525a8d7"></a>
+OGRErr </td><td class="memItemRight" valign="bottom"><b>createFeature</b> (OGRFeature *theFeature, int layer=0)</td></tr>
+<tr class="separator:aedc35f0ad0988e3f5804b85f5525a8d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab70823411c6aeb9f9bf5afbb1b3a47ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab70823411c6aeb9f9bf5afbb1b3a47ea"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFieldCount</b> (int layer=0) const </td></tr>
+<tr class="separator:ab70823411c6aeb9f9bf5afbb1b3a47ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1205a18c02390b3dd112460637ed1102"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1205a18c02390b3dd112460637ed1102"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getFeatureCount</b> (int layer=0) const </td></tr>
+<tr class="separator:a1205a18c02390b3dd112460637ed1102"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa61e6c0c736092aa251d817312de4b13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa61e6c0c736092aa251d817312de4b13"></a>
+OGRDataSource * </td><td class="memItemRight" valign="bottom"><b>getDataSource</b> (void)</td></tr>
+<tr class="separator:aa61e6c0c736092aa251d817312de4b13"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a869a1fef21bcb82a9e2e81cb6550bd86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a869a1fef21bcb82a9e2e81cb6550bd86"></a>
+OGRSFDriver * </td><td class="memItemRight" valign="bottom"><b>getDriver</b> (void) const </td></tr>
+<tr class="separator:a869a1fef21bcb82a9e2e81cb6550bd86"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:af91a98e40e0ea05fe06ede2fbcd3261c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91a98e40e0ea05fe06ede2fbcd3261c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (const std::string &imageType)</td></tr>
+<tr class="separator:af91a98e40e0ea05fe06ede2fbcd3261c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c185e51f17b0b601d29352081625dd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c185e51f17b0b601d29352081625dd1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setCodec</b> (OGRSFDriver *poDriver)</td></tr>
+<tr class="separator:a7c185e51f17b0b601d29352081625dd1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a7bdacdeb023fdd371c3f82abd7dbebb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bdacdeb023fdd371c3f82abd7dbebb4"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>m_filename</b></td></tr>
+<tr class="separator:a7bdacdeb023fdd371c3f82abd7dbebb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51afb112595792902e884ac4cd35ec5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51afb112595792902e884ac4cd35ec5c"></a>
+OGRDataSource * </td><td class="memItemRight" valign="bottom"><b>m_datasource</b></td></tr>
+<tr class="separator:a51afb112595792902e884ac4cd35ec5c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ImgWriterOgr_8h_source.html#l00035">35</a> of file <a class="el" href="ImgWriterOgr_8h_source.html">ImgWriterOgr.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgWriterOgr_8h_source.html">ImgWriterOgr.h</a></li>
+<li>/home/kempenep/pktools/src/imageclasses/<a class="el" href="ImgWriterOgr_8cc_source.html">ImgWriterOgr.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classImgWriterOgr__coll__graph.map b/doc/html/classImgWriterOgr__coll__graph.map
new file mode 100644
index 0000000..dfbd6ad
--- /dev/null
+++ b/doc/html/classImgWriterOgr__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="ImgWriterOgr" name="ImgWriterOgr">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="28,99,107,125"/>
+<area shape="rect" id="node3" title="STL class. " alt="" coords="5,6,131,47"/>
+</map>
diff --git a/doc/html/classImgWriterOgr__coll__graph.md5 b/doc/html/classImgWriterOgr__coll__graph.md5
new file mode 100644
index 0000000..a3da165
--- /dev/null
+++ b/doc/html/classImgWriterOgr__coll__graph.md5
@@ -0,0 +1 @@
+69d47964f1c60eea15eda62cf75a4ee0
\ No newline at end of file
diff --git a/doc/html/classImgWriterOgr__coll__graph.png b/doc/html/classImgWriterOgr__coll__graph.png
new file mode 100644
index 0000000..f6ad151
Binary files /dev/null and b/doc/html/classImgWriterOgr__coll__graph.png differ
diff --git a/doc/html/classIncrease__IndexValue-members.html b/doc/html/classIncrease__IndexValue-members.html
new file mode 100644
index 0000000..76b1185
--- /dev/null
+++ b/doc/html/classIncrease__IndexValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Increase_IndexValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classIncrease__IndexValue.html">Increase_IndexValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const IndexValue &pv1, const IndexValue &pv2) const (defined in <a class="el" href="classIncrease__IndexValue.html">Increase_IndexValue</a>)</td><td class="entry"><a class="el" href="classIncrease__IndexValue.html">Increase_IndexValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classIncrease__IndexValue.html b/doc/html/classIncrease__IndexValue.html
new file mode 100644
index 0000000..356559f
--- /dev/null
+++ b/doc/html/classIncrease__IndexValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Increase_IndexValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classIncrease__IndexValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Increase_IndexValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac4dd6e5d04030bb73fec25a52d810433"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4dd6e5d04030bb73fec25a52d810433"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structIndexValue.html">IndexValue</a> &pv1, const <a class="el" href="structIndexValue.html">IndexValue</a> &pv2) const </td></tr>
+<tr class="separator:ac4dd6e5d04030bb73fec25a52d810433"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="IndexValue_8h_source.html#l00039">39</a> of file <a class="el" href="IndexValue_8h_source.html">IndexValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="IndexValue_8h_source.html">IndexValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classIncrease__PosValue-members.html b/doc/html/classIncrease__PosValue-members.html
new file mode 100644
index 0000000..162bc70
--- /dev/null
+++ b/doc/html/classIncrease__PosValue-members.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Increase_PosValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classIncrease__PosValue.html">Increase_PosValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const PosValue &pv1, const PosValue &pv2) const (defined in <a class="el" href="classIncrease__PosValue.html">Increase_PosValue</a>)</td><td class="entry"><a class="el" href="classIncrease__PosValue.html">Increase_PosValue</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classIncrease__PosValue.html b/doc/html/classIncrease__PosValue.html
new file mode 100644
index 0000000..7e43be9
--- /dev/null
+++ b/doc/html/classIncrease__PosValue.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Increase_PosValue Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classIncrease__PosValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Increase_PosValue Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa17e8bb8638acd506bd24ea06c5602bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa17e8bb8638acd506bd24ea06c5602bf"></a>
+int </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structPosValue.html">PosValue</a> &pv1, const <a class="el" href="structPosValue.html">PosValue</a> &pv2) const </td></tr>
+<tr class="separator:aa17e8bb8638acd506bd24ea06c5602bf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="PosValue_8h_source.html#l00040">40</a> of file <a class="el" href="PosValue_8h_source.html">PosValue.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="PosValue_8h_source.html">PosValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classKernel-members.html b/doc/html/classKernel-members.html
new file mode 100644
index 0000000..74175d0
--- /dev/null
+++ b/doc/html/classKernel-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Kernel Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classKernel.html">Kernel</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_Q</b>(int column, int len) const =0 (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_QD</b>() const =0 (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>k_function</b>(const svm_node *x, const svm_node *y, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Kernel</b>(int l, svm_node *const *x, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_function</b> (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>swap_index</b>(int i, int j) const (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Kernel</b>() (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~QMatrix</b>() (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classKernel.html b/doc/html/classKernel.html
new file mode 100644
index 0000000..b035b40
--- /dev/null
+++ b/doc/html/classKernel.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Kernel Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classKernel-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Kernel Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Kernel:</div>
+<div class="dyncontent">
+<div class="center"><img src="classKernel__inherit__graph.png" border="0" usemap="#Kernel_inherit__map" alt="Inheritance graph"/></div>
+<map name="Kernel_inherit__map" id="Kernel_inherit__map">
+<area shape="rect" id="node3" href="classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="5,155,123,181"/><area shape="rect" id="node4" href="classSVC__Q.html" title="SVC_Q" alt="" coords="148,155,215,181"/><area shape="rect" id="node5" href="classSVR__Q.html" title="SVR_Q" alt="" coords="239,155,305,181"/><area shape="rect" id="node2" href="classQMatrix.html" title="QMatrix" alt="" coords="147,5,215,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Kernel:</div>
+<div class="dyncontent">
+<div class="center"><img src="classKernel__coll__graph.png" border="0" usemap="#Kernel_coll__map" alt="Collaboration graph"/></div>
+<map name="Kernel_coll__map" id="Kernel_coll__map">
+<area shape="rect" id="node2" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a25ffaa0c67cc5b8c7fcdb6f97ca1725f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25ffaa0c67cc5b8c7fcdb6f97ca1725f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Kernel</b> (int l, <a class="el" href="structsvm__node.html">svm_node</a> *const *x, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a25ffaa0c67cc5b8c7fcdb6f97ca1725f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30483355cbb8b5ab4e4c7a93bcef7429"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30483355cbb8b5ab4e4c7a93bcef7429"></a>
+virtual Qfloat * </td><td class="memItemRight" valign="bottom"><b>get_Q</b> (int column, int len) const =0</td></tr>
+<tr class="separator:a30483355cbb8b5ab4e4c7a93bcef7429"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b7fde9af9d10f7b8f7105eb85bf3d5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b7fde9af9d10f7b8f7105eb85bf3d5b"></a>
+virtual double * </td><td class="memItemRight" valign="bottom"><b>get_QD</b> () const =0</td></tr>
+<tr class="separator:a5b7fde9af9d10f7b8f7105eb85bf3d5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adca807c5584bc42fd098cd9eb1f19621"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adca807c5584bc42fd098cd9eb1f19621"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j) const </td></tr>
+<tr class="separator:adca807c5584bc42fd098cd9eb1f19621"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a6ff0d4ac64bf7fba29d2ca3433dd5127"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff0d4ac64bf7fba29d2ca3433dd5127"></a>
+static double </td><td class="memItemRight" valign="bottom"><b>k_function</b> (const <a class="el" href="structsvm__node.html">svm_node</a> *x, const <a class="el" href="structsvm__node.html">svm_node</a> *y, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a6ff0d4ac64bf7fba29d2ca3433dd5127"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a575eeb588e8a5c62ff3228a35e255a02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575eeb588e8a5c62ff3228a35e255a02"></a>
+double(Kernel::* </td><td class="memItemRight" valign="bottom"><b>kernel_function</b> )(int i, int j) const </td></tr>
+<tr class="separator:a575eeb588e8a5c62ff3228a35e255a02"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l00204">204</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classKernel__coll__graph.map b/doc/html/classKernel__coll__graph.map
new file mode 100644
index 0000000..77ab7b6
--- /dev/null
+++ b/doc/html/classKernel__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="Kernel" name="Kernel">
+<area shape="rect" id="node2" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classKernel__coll__graph.md5 b/doc/html/classKernel__coll__graph.md5
new file mode 100644
index 0000000..f9318de
--- /dev/null
+++ b/doc/html/classKernel__coll__graph.md5
@@ -0,0 +1 @@
+85816886b75c2a0731c066be4a2e913a
\ No newline at end of file
diff --git a/doc/html/classKernel__coll__graph.png b/doc/html/classKernel__coll__graph.png
new file mode 100644
index 0000000..744c043
Binary files /dev/null and b/doc/html/classKernel__coll__graph.png differ
diff --git a/doc/html/classKernel__inherit__graph.map b/doc/html/classKernel__inherit__graph.map
new file mode 100644
index 0000000..dadb790
--- /dev/null
+++ b/doc/html/classKernel__inherit__graph.map
@@ -0,0 +1,6 @@
+<map id="Kernel" name="Kernel">
+<area shape="rect" id="node3" href="$classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="5,155,123,181"/>
+<area shape="rect" id="node4" href="$classSVC__Q.html" title="SVC_Q" alt="" coords="148,155,215,181"/>
+<area shape="rect" id="node5" href="$classSVR__Q.html" title="SVR_Q" alt="" coords="239,155,305,181"/>
+<area shape="rect" id="node2" href="$classQMatrix.html" title="QMatrix" alt="" coords="147,5,215,32"/>
+</map>
diff --git a/doc/html/classKernel__inherit__graph.md5 b/doc/html/classKernel__inherit__graph.md5
new file mode 100644
index 0000000..fd686fd
--- /dev/null
+++ b/doc/html/classKernel__inherit__graph.md5
@@ -0,0 +1 @@
+5c77420dc3aa316a280c681b4dcea066
\ No newline at end of file
diff --git a/doc/html/classKernel__inherit__graph.png b/doc/html/classKernel__inherit__graph.png
new file mode 100644
index 0000000..da14c5e
Binary files /dev/null and b/doc/html/classKernel__inherit__graph.png differ
diff --git a/doc/html/classLastReturnFilter-members.html b/doc/html/classLastReturnFilter-members.html
new file mode 100644
index 0000000..8f79e65
--- /dev/null
+++ b/doc/html/classLastReturnFilter-members.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">LastReturnFilter Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classLastReturnFilter.html">LastReturnFilter</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const liblas::Point &point) (defined in <a class="el" href="classLastReturnFilter.html">LastReturnFilter</a>)</td><td class="entry"><a class="el" href="classLastReturnFilter.html">LastReturnFilter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LastReturnFilter</b>() (defined in <a class="el" href="classLastReturnFilter.html">LastReturnFilter</a>)</td><td class="entry"><a class="el" href="classLastReturnFilter.html">LastReturnFilter</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classLastReturnFilter.html b/doc/html/classLastReturnFilter.html
new file mode 100644
index 0000000..7fcd48c
--- /dev/null
+++ b/doc/html/classLastReturnFilter.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: LastReturnFilter Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classLastReturnFilter-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">LastReturnFilter Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for LastReturnFilter:</div>
+<div class="dyncontent">
+<div class="center"><img src="classLastReturnFilter__inherit__graph.png" border="0" usemap="#LastReturnFilter_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for LastReturnFilter:</div>
+<div class="dyncontent">
+<div class="center"><img src="classLastReturnFilter__coll__graph.png" border="0" usemap="#LastReturnFilter_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:add252420b68bdf288eb67ecd2291365e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add252420b68bdf288eb67ecd2291365e"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>filter</b> (const liblas::Point &point)</td></tr>
+<tr class="separator:add252420b68bdf288eb67ecd2291365e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="FileReaderLas_8h_source.html#l00028">28</a> of file <a class="el" href="FileReaderLas_8h_source.html">FileReaderLas.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/lasclasses/<a class="el" href="FileReaderLas_8h_source.html">FileReaderLas.h</a></li>
+<li>/home/kempenep/pktools/src/lasclasses/<a class="el" href="FileReaderLas_8cc_source.html">FileReaderLas.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classLastReturnFilter__coll__graph.map b/doc/html/classLastReturnFilter__coll__graph.map
new file mode 100644
index 0000000..e9d95d2
--- /dev/null
+++ b/doc/html/classLastReturnFilter__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="LastReturnFilter" name="LastReturnFilter">
+</map>
diff --git a/doc/html/classLastReturnFilter__coll__graph.md5 b/doc/html/classLastReturnFilter__coll__graph.md5
new file mode 100644
index 0000000..b470319
--- /dev/null
+++ b/doc/html/classLastReturnFilter__coll__graph.md5
@@ -0,0 +1 @@
+d39673c5d5bfa1f1515c3e94849bbd8e
\ No newline at end of file
diff --git a/doc/html/classLastReturnFilter__coll__graph.png b/doc/html/classLastReturnFilter__coll__graph.png
new file mode 100644
index 0000000..ef160f6
Binary files /dev/null and b/doc/html/classLastReturnFilter__coll__graph.png differ
diff --git a/doc/html/classLastReturnFilter__inherit__graph.map b/doc/html/classLastReturnFilter__inherit__graph.map
new file mode 100644
index 0000000..e9d95d2
--- /dev/null
+++ b/doc/html/classLastReturnFilter__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="LastReturnFilter" name="LastReturnFilter">
+</map>
diff --git a/doc/html/classLastReturnFilter__inherit__graph.md5 b/doc/html/classLastReturnFilter__inherit__graph.md5
new file mode 100644
index 0000000..b470319
--- /dev/null
+++ b/doc/html/classLastReturnFilter__inherit__graph.md5
@@ -0,0 +1 @@
+d39673c5d5bfa1f1515c3e94849bbd8e
\ No newline at end of file
diff --git a/doc/html/classLastReturnFilter__inherit__graph.png b/doc/html/classLastReturnFilter__inherit__graph.png
new file mode 100644
index 0000000..ef160f6
Binary files /dev/null and b/doc/html/classLastReturnFilter__inherit__graph.png differ
diff --git a/doc/html/classMainWindow-members.html b/doc/html/classMainWindow-members.html
new file mode 100644
index 0000000..44dda37
--- /dev/null
+++ b/doc/html/classMainWindow-members.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">MainWindow Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classMainWindow.html">MainWindow</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MainWindow</b>(QWidget *parent=0) (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MainWindow</b>(QWidget *parent=0) (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MainWindow</b>(QWidget *parent=0) (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MainWindow</b>(QWidget *parent=0) (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MainWindow</b>(QWidget *parent=0) (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~MainWindow</b>() (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~MainWindow</b>() (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~MainWindow</b>() (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~MainWindow</b>() (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~MainWindow</b>() (defined in <a class="el" href="classMainWindow.html">MainWindow</a>)</td><td class="entry"><a class="el" href="classMainWindow.html">MainWindow</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classMainWindow.html b/doc/html/classMainWindow.html
new file mode 100644
index 0000000..308204c
--- /dev/null
+++ b/doc/html/classMainWindow.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: MainWindow Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classMainWindow-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">MainWindow Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for MainWindow:</div>
+<div class="dyncontent">
+<div class="center"><img src="classMainWindow__inherit__graph.png" border="0" usemap="#MainWindow_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for MainWindow:</div>
+<div class="dyncontent">
+<div class="center"><img src="classMainWindow__coll__graph.png" border="0" usemap="#MainWindow_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MainWindow</b> (QWidget *parent=0)</td></tr>
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MainWindow</b> (QWidget *parent=0)</td></tr>
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MainWindow</b> (QWidget *parent=0)</td></tr>
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MainWindow</b> (QWidget *parent=0)</td></tr>
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MainWindow</b> (QWidget *parent=0)</td></tr>
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">31</a> of file <a class="el" href="pkcomposite__gui_2mainwindow_8h_source.html">mainwindow.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/qt/pkcomposite_gui/<a class="el" href="pkcomposite__gui_2mainwindow_8h_source.html">mainwindow.h</a></li>
+<li>/home/kempenep/pktools/qt/pkcomposite_gui/<a class="el" href="pkcomposite__gui_2mainwindow_8cc_source.html">mainwindow.cc</a></li>
+<li>/home/kempenep/pktools/qt/pkdiff_gui/<a class="el" href="pkdiff__gui_2mainwindow_8cpp_source.html">mainwindow.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classMainWindow__coll__graph.map b/doc/html/classMainWindow__coll__graph.map
new file mode 100644
index 0000000..10b2148
--- /dev/null
+++ b/doc/html/classMainWindow__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="MainWindow" name="MainWindow">
+</map>
diff --git a/doc/html/classMainWindow__coll__graph.md5 b/doc/html/classMainWindow__coll__graph.md5
new file mode 100644
index 0000000..f12a71e
--- /dev/null
+++ b/doc/html/classMainWindow__coll__graph.md5
@@ -0,0 +1 @@
+2de25f242e69277e451feaec96359d9f
\ No newline at end of file
diff --git a/doc/html/classMainWindow__coll__graph.png b/doc/html/classMainWindow__coll__graph.png
new file mode 100644
index 0000000..ad28566
Binary files /dev/null and b/doc/html/classMainWindow__coll__graph.png differ
diff --git a/doc/html/classMainWindow__inherit__graph.map b/doc/html/classMainWindow__inherit__graph.map
new file mode 100644
index 0000000..10b2148
--- /dev/null
+++ b/doc/html/classMainWindow__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="MainWindow" name="MainWindow">
+</map>
diff --git a/doc/html/classMainWindow__inherit__graph.md5 b/doc/html/classMainWindow__inherit__graph.md5
new file mode 100644
index 0000000..f12a71e
--- /dev/null
+++ b/doc/html/classMainWindow__inherit__graph.md5
@@ -0,0 +1 @@
+2de25f242e69277e451feaec96359d9f
\ No newline at end of file
diff --git a/doc/html/classMainWindow__inherit__graph.png b/doc/html/classMainWindow__inherit__graph.png
new file mode 100644
index 0000000..ad28566
Binary files /dev/null and b/doc/html/classMainWindow__inherit__graph.png differ
diff --git a/doc/html/classONE__CLASS__Q-members.html b/doc/html/classONE__CLASS__Q-members.html
new file mode 100644
index 0000000..b169a4a
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q-members.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ONE_CLASS_Q Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_Q</b>(int i, int len) const (defined in <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>)</td><td class="entry"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_QD</b>() const (defined in <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>)</td><td class="entry"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>k_function</b>(const svm_node *x, const svm_node *y, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Kernel</b>(int l, svm_node *const *x, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_function</b> (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ONE_CLASS_Q</b>(const svm_problem &prob, const svm_parameter ¶m) (defined in <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>)</td><td class="entry"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_index</b>(int i, int j) const (defined in <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>)</td><td class="entry"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Kernel</b>() (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~ONE_CLASS_Q</b>() (defined in <a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>)</td><td class="entry"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~QMatrix</b>() (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classONE__CLASS__Q.html b/doc/html/classONE__CLASS__Q.html
new file mode 100644
index 0000000..224be63
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: ONE_CLASS_Q Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classONE__CLASS__Q-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ONE_CLASS_Q Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for ONE_CLASS_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classONE__CLASS__Q__inherit__graph.png" border="0" usemap="#ONE__CLASS__Q_inherit__map" alt="Inheritance graph"/></div>
+<map name="ONE__CLASS__Q_inherit__map" id="ONE__CLASS__Q_inherit__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="35,80,92,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="30,5,97,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for ONE_CLASS_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classONE__CLASS__Q__coll__graph.png" border="0" usemap="#ONE__CLASS__Q_coll__map" alt="Collaboration graph"/></div>
+<map name="ONE__CLASS__Q_coll__map" id="ONE__CLASS__Q_coll__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="35,80,92,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="30,5,97,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a759ec4e3e00887ed848cf3f79ab7065f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a759ec4e3e00887ed848cf3f79ab7065f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ONE_CLASS_Q</b> (const <a class="el" href="structsvm__problem.html">svm_problem</a> &prob, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a759ec4e3e00887ed848cf3f79ab7065f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f8501234022e017cf46c4dfb2da9d31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f8501234022e017cf46c4dfb2da9d31"></a>
+Qfloat * </td><td class="memItemRight" valign="bottom"><b>get_Q</b> (int i, int len) const </td></tr>
+<tr class="separator:a1f8501234022e017cf46c4dfb2da9d31"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a882480d4370d8a89d667a28c3ed68a73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a882480d4370d8a89d667a28c3ed68a73"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>get_QD</b> () const </td></tr>
+<tr class="separator:a882480d4370d8a89d667a28c3ed68a73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8bc86ca742c27d82718346388f83fad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8bc86ca742c27d82718346388f83fad"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j) const </td></tr>
+<tr class="separator:ad8bc86ca742c27d82718346388f83fad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classKernel')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25ffaa0c67cc5b8c7fcdb6f97ca1725f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Kernel</b> (int l, <a class="el" href="structsvm__node.html">svm_node</a> *const *x, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classKernel')"><img src="closed.png" alt="-"/> Static Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff0d4ac64bf7fba29d2ca3433dd5127"></a>
+static double </td><td class="memItemRight" valign="bottom"><b>k_function</b> (const <a class="el" href="structsvm__node.html">svm_node</a> *x, const <a class="el" href="structsvm__node.html">svm_node</a> *y, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classKernel')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575eeb588e8a5c62ff3228a35e255a02"></a>
+double(Kernel::* </td><td class="memItemRight" valign="bottom"><b>kernel_function</b> )(int i, int j) const </td></tr>
+<tr class="separator:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l01323">1323</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classONE__CLASS__Q__coll__graph.map b/doc/html/classONE__CLASS__Q__coll__graph.map
new file mode 100644
index 0000000..e061d2f
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="ONE_CLASS_Q" name="ONE_CLASS_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="35,80,92,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="30,5,97,32"/>
+</map>
diff --git a/doc/html/classONE__CLASS__Q__coll__graph.md5 b/doc/html/classONE__CLASS__Q__coll__graph.md5
new file mode 100644
index 0000000..6355315
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q__coll__graph.md5
@@ -0,0 +1 @@
+3cc848b1d60d5cb3df39d11225084950
\ No newline at end of file
diff --git a/doc/html/classONE__CLASS__Q__coll__graph.png b/doc/html/classONE__CLASS__Q__coll__graph.png
new file mode 100644
index 0000000..5ae9bf8
Binary files /dev/null and b/doc/html/classONE__CLASS__Q__coll__graph.png differ
diff --git a/doc/html/classONE__CLASS__Q__inherit__graph.map b/doc/html/classONE__CLASS__Q__inherit__graph.map
new file mode 100644
index 0000000..e061d2f
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="ONE_CLASS_Q" name="ONE_CLASS_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="35,80,92,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="30,5,97,32"/>
+</map>
diff --git a/doc/html/classONE__CLASS__Q__inherit__graph.md5 b/doc/html/classONE__CLASS__Q__inherit__graph.md5
new file mode 100644
index 0000000..6355315
--- /dev/null
+++ b/doc/html/classONE__CLASS__Q__inherit__graph.md5
@@ -0,0 +1 @@
+3cc848b1d60d5cb3df39d11225084950
\ No newline at end of file
diff --git a/doc/html/classONE__CLASS__Q__inherit__graph.png b/doc/html/classONE__CLASS__Q__inherit__graph.png
new file mode 100644
index 0000000..5ae9bf8
Binary files /dev/null and b/doc/html/classONE__CLASS__Q__inherit__graph.png differ
diff --git a/doc/html/classOptFactory-members.html b/doc/html/classOptFactory-members.html
new file mode 100644
index 0000000..98be087
--- /dev/null
+++ b/doc/html/classOptFactory-members.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">OptFactory Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classOptFactory.html">OptFactory</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getOptimizer</b>(const std::string &algorithmString, unsigned int npar) (defined in <a class="el" href="classOptFactory.html">OptFactory</a>)</td><td class="entry"><a class="el" href="classOptFactory.html">OptFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OptFactory</b>() (defined in <a class="el" href="classOptFactory.html">OptFactory</a>)</td><td class="entry"><a class="el" href="classOptFactory.html">OptFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~OptFactory</b>() (defined in <a class="el" href="classOptFactory.html">OptFactory</a>)</td><td class="entry"><a class="el" href="classOptFactory.html">OptFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classOptFactory.html b/doc/html/classOptFactory.html
new file mode 100644
index 0000000..832b590
--- /dev/null
+++ b/doc/html/classOptFactory.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: OptFactory Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classOptFactory-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">OptFactory Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a4f740f09ee4ae1ee92c5e4a2426ef232"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f740f09ee4ae1ee92c5e4a2426ef232"></a>
+static nlopt::opt </td><td class="memItemRight" valign="bottom"><b>getOptimizer</b> (const std::string &algorithmString, unsigned int npar)</td></tr>
+<tr class="separator:a4f740f09ee4ae1ee92c5e4a2426ef232"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="OptFactory_8h_source.html#l00025">25</a> of file <a class="el" href="OptFactory_8h_source.html">OptFactory.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="OptFactory_8h_source.html">OptFactory.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classOptionpk-members.html b/doc/html/classOptionpk-members.html
new file mode 100644
index 0000000..2333a45
--- /dev/null
+++ b/doc/html/classOptionpk-members.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Optionpk< T > Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classOptionpk.html">Optionpk< T ></a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">findSubstring</a>(const T &argument) const </td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>findSubstring</b>(const std::string &argument) const (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>findSubstring</b>(const std::string &argument) const (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDefaultValue</b>() const (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">getGPLv3License</a>()</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">getHelp</a>() const </td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">getLongName</a>() const </td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">getShortName</a>() const </td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#a4ab58d03540efa49fe3ebf6a58507f23">operator<<</a>(std::ostream &os, const Optionpk< T1 > &theOption)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk</a>()</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#a027b169ab11595296121c5e1b8499c6e">Optionpk</a>(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a4356ce7db419ff66abd207028ff1e2fc">Optionpk</a>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide=0)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Optionpk</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Optionpk</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Optionpk</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">retrieveOption</a>(int argc, char **argv)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a7fda7da55d4511d6868e86bd67a90aa9">setAll</a>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setAll</b>(const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide) (defined in <a class="el" href="classOptionpk.html">Optionpk< T ></a>)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">setDefault</a>(const T &defaultValue)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">setHelp</a>(const std::string &helpInfo)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">setHide</a>(short hide)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">setLongName</a>(const std::string &longName)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">setShortName</a>(const std::string &shortName)</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">~Optionpk</a>()</td><td class="entry"><a class="el" href="classOptionpk.html">Optionpk< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classOptionpk.html b/doc/html/classOptionpk.html
new file mode 100644
index 0000000..23134c2
--- /dev/null
+++ b/doc/html/classOptionpk.html
@@ -0,0 +1,520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Optionpk< T > Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="classOptionpk-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Optionpk< T > Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for Optionpk< T >:</div>
+<div class="dyncontent">
+<div class="center"><img src="classOptionpk__inherit__graph.png" border="0" usemap="#Optionpk_3_01T_01_4_inherit__map" alt="Inheritance graph"/></div>
+<map name="Optionpk_3_01T_01_4_inherit__map" id="Optionpk_3_01T_01_4_inherit__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,5,120,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Optionpk< T >:</div>
+<div class="dyncontent">
+<div class="center"><img src="classOptionpk__coll__graph.png" border="0" usemap="#Optionpk_3_01T_01_4_coll__map" alt="Collaboration graph"/></div>
+<map name="Optionpk_3_01T_01_4_coll__map" id="Optionpk_3_01T_01_4_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,96,120,123"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0082d074d437413b3beefa06c0521644"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0082d074d437413b3beefa06c0521644"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk</a> ()</td></tr>
+<tr class="memdesc:a0082d074d437413b3beefa06c0521644"><td class="mdescLeft"> </td><td class="mdescRight">default constructor <br/></td></tr>
+<tr class="separator:a0082d074d437413b3beefa06c0521644"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a027b169ab11595296121c5e1b8499c6e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a027b169ab11595296121c5e1b8499c6e">Optionpk</a> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="memdesc:a027b169ab11595296121c5e1b8499c6e"><td class="mdescLeft"> </td><td class="mdescRight">constructor for option without default value <a href="#a027b169ab11595296121c5e1b8499c6e">More...</a><br/></td></tr>
+<tr class="separator:a027b169ab11595296121c5e1b8499c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4356ce7db419ff66abd207028ff1e2fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a4356ce7db419ff66abd207028ff1e2fc">Optionpk</a> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide=0)</td></tr>
+<tr class="memdesc:a4356ce7db419ff66abd207028ff1e2fc"><td class="mdescLeft"> </td><td class="mdescRight">constructor for option with default value. Option can be hidden for help info <a href="#a4356ce7db419ff66abd207028ff1e2fc">More...</a><br/></td></tr>
+<tr class="separator:a4356ce7db419ff66abd207028ff1e2fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacf921491e6b6fab3c4cad8b39594cff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf921491e6b6fab3c4cad8b39594cff"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">~Optionpk</a> ()</td></tr>
+<tr class="memdesc:aacf921491e6b6fab3c4cad8b39594cff"><td class="mdescLeft"> </td><td class="mdescRight">default destructor <br/></td></tr>
+<tr class="separator:aacf921491e6b6fab3c4cad8b39594cff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afea9af606e15b12bc49bc25d0477fe8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afea9af606e15b12bc49bc25d0477fe8e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">setHelp</a> (const std::string &helpInfo)</td></tr>
+<tr class="memdesc:afea9af606e15b12bc49bc25d0477fe8e"><td class="mdescLeft"> </td><td class="mdescRight">set help information <br/></td></tr>
+<tr class="separator:afea9af606e15b12bc49bc25d0477fe8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95628f0f149cb9465468facfb3f0f915"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95628f0f149cb9465468facfb3f0f915"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">setHide</a> (short hide)</td></tr>
+<tr class="memdesc:a95628f0f149cb9465468facfb3f0f915"><td class="mdescLeft"> </td><td class="mdescRight">hide option from short help -h (1) or make invisible to short and long help –help (2) <br/></td></tr>
+<tr class="separator:a95628f0f149cb9465468facfb3f0f915"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b788a1b8e5c738732a1733613065ef7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">retrieveOption</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:a7b788a1b8e5c738732a1733613065ef7"><td class="mdescLeft"> </td><td class="mdescRight">read option from command line (use for all options!) <a href="#a7b788a1b8e5c738732a1733613065ef7">More...</a><br/></td></tr>
+<tr class="separator:a7b788a1b8e5c738732a1733613065ef7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:affd58e09b1baaf0b1754fbf938eea11a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affd58e09b1baaf0b1754fbf938eea11a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="memdesc:affd58e09b1baaf0b1754fbf938eea11a"><td class="mdescLeft"> </td><td class="mdescRight">set all attributes of the option, except default and hide <br/></td></tr>
+<tr class="separator:affd58e09b1baaf0b1754fbf938eea11a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7fda7da55d4511d6868e86bd67a90aa9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fda7da55d4511d6868e86bd67a90aa9"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a7fda7da55d4511d6868e86bd67a90aa9">setAll</a> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide)</td></tr>
+<tr class="memdesc:a7fda7da55d4511d6868e86bd67a90aa9"><td class="mdescLeft"> </td><td class="mdescRight">set all attributes of the option <br/></td></tr>
+<tr class="separator:a7fda7da55d4511d6868e86bd67a90aa9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9dc2dafc605ed3e2a8a798063ce7187"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9dc2dafc605ed3e2a8a798063ce7187"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">setDefault</a> (const T &defaultValue)</td></tr>
+<tr class="memdesc:ae9dc2dafc605ed3e2a8a798063ce7187"><td class="mdescLeft"> </td><td class="mdescRight">set a default value for the option <br/></td></tr>
+<tr class="separator:ae9dc2dafc605ed3e2a8a798063ce7187"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cf16831ba96ffa15881afc0af5ed2a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cf16831ba96ffa15881afc0af5ed2a6"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getDefaultValue</b> () const </td></tr>
+<tr class="separator:a9cf16831ba96ffa15881afc0af5ed2a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a561e7d4b4141cd9023563d4dee01b932"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a561e7d4b4141cd9023563d4dee01b932"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">setShortName</a> (const std::string &shortName)</td></tr>
+<tr class="memdesc:a561e7d4b4141cd9023563d4dee01b932"><td class="mdescLeft"> </td><td class="mdescRight">set the short name to be used as -shortName <br/></td></tr>
+<tr class="separator:a561e7d4b4141cd9023563d4dee01b932"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ee7c0fc0cbea09eac543e1d2c5b7457"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ee7c0fc0cbea09eac543e1d2c5b7457"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">setLongName</a> (const std::string &longName)</td></tr>
+<tr class="memdesc:a6ee7c0fc0cbea09eac543e1d2c5b7457"><td class="mdescLeft"> </td><td class="mdescRight">set the long name to be used as –longName <br/></td></tr>
+<tr class="separator:a6ee7c0fc0cbea09eac543e1d2c5b7457"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0d0d55bac2456e6cbcec97892667742"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0d0d55bac2456e6cbcec97892667742"></a>
+std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">getShortName</a> () const </td></tr>
+<tr class="memdesc:ae0d0d55bac2456e6cbcec97892667742"><td class="mdescLeft"> </td><td class="mdescRight">get the short name to be used as -shortName <br/></td></tr>
+<tr class="separator:ae0d0d55bac2456e6cbcec97892667742"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7ce0ff4dfe57f1e6685b67fb1d70b69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7ce0ff4dfe57f1e6685b67fb1d70b69"></a>
+std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">getLongName</a> () const </td></tr>
+<tr class="memdesc:af7ce0ff4dfe57f1e6685b67fb1d70b69"><td class="mdescLeft"> </td><td class="mdescRight">get the long name to be used as –longName <br/></td></tr>
+<tr class="separator:af7ce0ff4dfe57f1e6685b67fb1d70b69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6054c64a684a4aaba41787d9f8be031f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6054c64a684a4aaba41787d9f8be031f"></a>
+std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">getHelp</a> () const </td></tr>
+<tr class="memdesc:a6054c64a684a4aaba41787d9f8be031f"><td class="mdescLeft"> </td><td class="mdescRight">get help info stored in m_help <br/></td></tr>
+<tr class="separator:a6054c64a684a4aaba41787d9f8be031f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a092414f315f6b310fc88eaf5688b81f4"><td class="memItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">findSubstring</a> (const T &argument) const </td></tr>
+<tr class="separator:a092414f315f6b310fc88eaf5688b81f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad8494670a4fcd2e9a13f6329cce03c4a"></a>
+template<> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="separator:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c252508f70b8afb3f1d179f05a89852"></a>
+template<> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)</td></tr>
+<tr class="separator:a9c252508f70b8afb3f1d179f05a89852"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70b4e40e37515ea510d44a668b43e722"><td class="memTemplParams" colspan="2"><a class="anchor" id="a70b4e40e37515ea510d44a668b43e722"></a>
+template<> </td></tr>
+<tr class="memitem:a70b4e40e37515ea510d44a668b43e722"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>Optionpk</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="separator:a70b4e40e37515ea510d44a668b43e722"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memTemplParams" colspan="2"><a class="anchor" id="acb5ab11e1db7dc20bc9d07d17718c953"></a>
+template<> </td></tr>
+<tr class="memitem:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>Optionpk</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)</td></tr>
+<tr class="separator:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c083ccb476747385cecbcacbc9d2296"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4c083ccb476747385cecbcacbc9d2296"></a>
+template<> </td></tr>
+<tr class="memitem:a4c083ccb476747385cecbcacbc9d2296"><td class="memTemplItemLeft" align="right" valign="top">std::vector< std::string ><br class="typebreak"/>
+::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>findSubstring</b> (const std::string &argument) const</td></tr>
+<tr class="separator:a4c083ccb476747385cecbcacbc9d2296"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad8494670a4fcd2e9a13f6329cce03c4a"></a>
+template<> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="separator:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad8494670a4fcd2e9a13f6329cce03c4a"></a>
+template<> </td></tr>
+<tr class="memitem:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo)</td></tr>
+<tr class="separator:ad8494670a4fcd2e9a13f6329cce03c4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c252508f70b8afb3f1d179f05a89852"></a>
+template<> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)</td></tr>
+<tr class="separator:a9c252508f70b8afb3f1d179f05a89852"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c252508f70b8afb3f1d179f05a89852"></a>
+template<> </td></tr>
+<tr class="memitem:a9c252508f70b8afb3f1d179f05a89852"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>setAll</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)</td></tr>
+<tr class="separator:a9c252508f70b8afb3f1d179f05a89852"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memTemplParams" colspan="2"><a class="anchor" id="acb5ab11e1db7dc20bc9d07d17718c953"></a>
+template<> </td></tr>
+<tr class="memitem:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>Optionpk</b> (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)</td></tr>
+<tr class="separator:acb5ab11e1db7dc20bc9d07d17718c953"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c083ccb476747385cecbcacbc9d2296"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4c083ccb476747385cecbcacbc9d2296"></a>
+template<> </td></tr>
+<tr class="memitem:a4c083ccb476747385cecbcacbc9d2296"><td class="memTemplItemLeft" align="right" valign="top">std::vector< std::string ><br class="typebreak"/>
+::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>findSubstring</b> (const std::string &argument) const</td></tr>
+<tr class="separator:a4c083ccb476747385cecbcacbc9d2296"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:acb7e411ce6a318424bf2ad1f9dc846ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb7e411ce6a318424bf2ad1f9dc846ff"></a>
+static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">getGPLv3License</a> ()</td></tr>
+<tr class="memdesc:acb7e411ce6a318424bf2ad1f9dc846ff"><td class="mdescLeft"> </td><td class="mdescRight">get license info <br/></td></tr>
+<tr class="separator:acb7e411ce6a318424bf2ad1f9dc846ff"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a4ab58d03540efa49fe3ebf6a58507f23"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4ab58d03540efa49fe3ebf6a58507f23"></a>
+template<class T1 > </td></tr>
+<tr class="memitem:a4ab58d03540efa49fe3ebf6a58507f23"><td class="memTemplItemLeft" align="right" valign="top">std::ostream & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classOptionpk.html#a4ab58d03540efa49fe3ebf6a58507f23">operator<<</a> (std::ostream &os, const <a class="el" href="classOptionpk.html">Optionpk</a>< T1 > &theOption)</td></tr>
+<tr class="memdesc:a4ab58d03540efa49fe3ebf6a58507f23"><td class="mdescLeft"> </td><td class="mdescRight">print values for this option <br/></td></tr>
+<tr class="separator:a4ab58d03540efa49fe3ebf6a58507f23"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<class T><br/>
+class Optionpk< T ></h3>
+
+<p>Class to implement command line options. With the constructor you can define an option, in both short <code>-</code> and long <code>--</code> format, of a specific type, help information and a default value.<br/>
+This class inherits from std::vector, so the option variable is a vector, supporting multiple inputs for the same option (e.g., –input file1 [–input file2 ...]. Several command line option formats are supported:</p>
+<ul>
+<li><code>-shortOption value</code></li>
+<li><code>-shortOption=value</code></li>
+<li><code>--longOption value</code></li>
+<li><code>--longOption=value</code></li>
+<li><code>-shortOption</code> (no value for boolean options, which are automatically set by invoking the option)</li>
+<li><code>--longOption</code> (no value for boolean options, which are automatically set by invoking the option)</li>
+</ul>
+<p>Option names should have regular characters and no white space in them. Some names are reserved and can not be used either:</p>
+<ul>
+<li>short option <code>h</code> or long option <code>help</code>: shows usage</li>
+<li>long option <code>help</code> shows long help info</li>
+<li>long option <code>license</code>: shows license info</li>
+<li>long option <code>version</code>: shows current version of pktools</li>
+<li>long option <code>doxygen</code>: shows help info in table format, ready to be included in doxygen</li>
+</ul>
+<p>A call to member function <a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">retrieveOption</a> reads the command line arguments and initializes the object (vector). Make sure to call this member function before using the option object in your main program (or a segmentation error due to an un-initialized vector will occur).</p>
+<p>All calls to retrieveOption should reside in a try{} block. If one of the reserved options</p>
+<ul>
+<li><code>license</code></li>
+<li><code>version</code> is used, an exception of type std::string is thrown. This can be caught with a catch(string predefinedString) right after the try block, where the message can be sent to stdout and the program can be ended.</li>
+</ul>
+<p>Similarly, if help is invoked with the short option <code>-h</code> or long option <code>--help</code>, the main program is informed by the return value <code>false</code> of <a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">retrieveOption</a> (for any option). An example how to use <a class="el" href="classOptionpk.html">Optionpk</a> is shown in <a class="el" href="pktestOption_8cc_source.html">pktestOption.cc</a> </p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00106">106</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a027b169ab11595296121c5e1b8499c6e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<class T > </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classOptionpk.html">Optionpk</a>< T >::<a class="el" href="classOptionpk.html">Optionpk</a> </td>
+ <td>(</td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>shortName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>longName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>helpInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>constructor for option without default value </p>
+<p>constructor without default value<br/>
+shortName is option invoked with <code>-</code><br/>
+longName is option invoked with <code>--</code><br/>
+helpInfo is the help message that is shown when option -h or –help is invoked<br/>
+</p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00209">209</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> : m_hasDefault(<span class="keyword">false</span>)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(shortName,longName,helpInfo);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="ttc" id="classOptionpk_html_affd58e09b1baaf0b1754fbf938eea11a"><div class="ttname"><a href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk::setAll</a></div><div class="ttdeci">void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</div><div class="ttdoc">set all attributes of the option, except default and hide </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00277">Optionpk. [...]
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a4356ce7db419ff66abd207028ff1e2fc"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<class T > </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classOptionpk.html">Optionpk</a>< T >::<a class="el" href="classOptionpk.html">Optionpk</a> </td>
+ <td>(</td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>shortName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>longName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string & </td>
+ <td class="paramname"><em>helpInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T & </td>
+ <td class="paramname"><em>defaultValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">short </td>
+ <td class="paramname"><em>hide</em> = <code>0</code> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>constructor for option with default value. Option can be hidden for help info </p>
+<p>constructor with default value.<br/>
+shortName is option invoked with <code>-</code><br/>
+longName is option invoked with <code>--</code><br/>
+helpInfo is the help message that is shown when option -h or –help is invoked<br/>
+defaultValue is default value of the option (first value of vector: option[0])<br/>
+hide=0 : option is visible for in both short (<code>-h</code>). Typical use: mandatory options<br/>
+hide=1 : option is only visible in long help (<code>--help</code>). Typical use: expert options<br/>
+hide=2 : option is hidden for user. Typical use: Easter eggs or options only known to author </p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00225">225</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">setAll</a>(shortName,longName,helpInfo,defaultValue, hide);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="ttc" id="classOptionpk_html_affd58e09b1baaf0b1754fbf938eea11a"><div class="ttname"><a href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk::setAll</a></div><div class="ttdeci">void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)</div><div class="ttdoc">set all attributes of the option, except default and hide </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00277">Optionpk. [...]
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a092414f315f6b310fc88eaf5688b81f4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<class T> </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector<T>::const_iterator <a class="el" href="classOptionpk.html">Optionpk</a>< T >::findSubstring </td>
+ <td>(</td>
+ <td class="paramtype">const T & </td>
+ <td class="paramname"><em>argument</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>find substring in options of type string (e.g., -co INTERLEAVE=BAND) this template function only makes sense for T=std::string (implemented via a specialization) </p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00160">160</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> {std::string errorString=<span class="stringliteral">"Error: findSubstring only defined for options of type std::string"</span>; <span class="keywordflow">throw</span>(errorString);};</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a7b788a1b8e5c738732a1733613065ef7"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<class T > </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classOptionpk.html">Optionpk</a>< T >::retrieveOption </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>argv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>read option from command line (use for all options!) </p>
+<p>make sure to call this function first before using the option in main program (or segmentation fault will occur...) </p>
+
+<p>Definition at line <a class="el" href="Optionpk_8h_source.html#l00305">305</a> of file <a class="el" href="Optionpk_8h_source.html">Optionpk.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> { </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordtype">bool</span> noHelp=<span class="keyword">true</span>;<span class="comment">//return value, alert main program that hard coded option (help, version, license, doxygen) was invoked</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> std::string helpStringShort=<span class="stringliteral">"-h"</span>;<span class="comment">//short option for help (hard coded)</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> std::string helpStringLong=<span class="stringliteral">"--help"</span>;<span class="comment">//long option for help (hard coded)</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> std::string helpStringDoxygen=<span class="stringliteral">"--doxygen"</span>;<span class="comment">//option to create table of options ready to use for doxygen</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::string versionString=<span class="stringliteral">"--version"</span>;<span class="comment">//option to show current version</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> std::string licenseString=<span class="stringliteral">"--license"</span>;<span class="comment">//option to show current version</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 1; i < argc; ++i ){</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> std::string currentArgument;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> std::string currentOption=argv[i];</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> std::string shortOption=m_shortName;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> std::string longOption=m_longName;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> shortOption.insert(0,<span class="stringliteral">"-"</span>);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> longOption.insert(0,<span class="stringliteral">"--"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">size_t</span> foundEqual=currentOption.rfind(<span class="stringliteral">"="</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos){</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> currentArgument=currentOption.substr(foundEqual+1);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> currentOption=currentOption.substr(0,foundEqual);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>(!helpStringShort.compare(currentOption)){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span>(m_hide<1)</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> std::cout << usage() << std::endl;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!helpStringLong.compare(currentOption)){</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">if</span>(m_hide<2)</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> std::cout << usage() << std::endl;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!helpStringDoxygen.compare(currentOption)){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(m_hide<2)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> std::cout << usageDoxygen() << std::endl;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> noHelp=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!versionString.compare(currentOption)){</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> std::string theVersion=<span class="stringliteral">"version "</span>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> theVersion+=VERSION;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> theVersion+=<span class="stringliteral">", Copyright (C) Pieter Kempeneers.\n\</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="stringliteral"> This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="stringliteral"> This is free software, and you are welcome to redistribute it\n \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="stringliteral"> under certain conditions; use option --license for details."</span>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">throw</span>(theVersion);<span class="comment">//no need to continue registering (break prevents from multiplication of version info)</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!licenseString.compare(currentOption)){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">throw</span>(<a class="code" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">getGPLv3License</a>());</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span>(hasShortOption()&&!(shortOption.compare(currentOption))){<span class="comment">//for -option</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> this->push_back(string2type<T>(currentArgument));</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_hasArgument && i < argc-1)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> this->push_back(string2type<T>(argv[++i]));</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> this->push_back(string2type<T>(<span class="stringliteral">"1"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hasLongOption()&&!(longOption.compare(currentOption))){<span class="comment">//for --option</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(foundEqual!=std::string::npos)</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> this->push_back(string2type<T>(currentArgument));</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_hasArgument && i < argc-1)</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> this->push_back(string2type<T>(argv[++i]));</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> this->push_back(string2type<T>(<span class="stringliteral">"1"</span>));</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(!(this->size())&&m_hasDefault)<span class="comment">//only set default value if no options were given</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> this->push_back(m_defaultValue);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">return</span>(noHelp);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="ttc" id="classOptionpk_html_acb7e411ce6a318424bf2ad1f9dc846ff"><div class="ttname"><a href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">Optionpk::getGPLv3License</a></div><div class="ttdeci">static std::string getGPLv3License()</div><div class="ttdoc">get license info </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00143">Optionpk.h:143</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="Optionpk_8h_source.html">Optionpk.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classOptionpk__coll__graph.map b/doc/html/classOptionpk__coll__graph.map
new file mode 100644
index 0000000..f94e56d
--- /dev/null
+++ b/doc/html/classOptionpk__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="Optionpk< T >" name="Optionpk< T >">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,96,120,123"/>
+</map>
diff --git a/doc/html/classOptionpk__coll__graph.md5 b/doc/html/classOptionpk__coll__graph.md5
new file mode 100644
index 0000000..31ea47e
--- /dev/null
+++ b/doc/html/classOptionpk__coll__graph.md5
@@ -0,0 +1 @@
+4f870ed6f6d4377a5fdde63d8dedb941
\ No newline at end of file
diff --git a/doc/html/classOptionpk__coll__graph.png b/doc/html/classOptionpk__coll__graph.png
new file mode 100644
index 0000000..bfe514d
Binary files /dev/null and b/doc/html/classOptionpk__coll__graph.png differ
diff --git a/doc/html/classOptionpk__inherit__graph.map b/doc/html/classOptionpk__inherit__graph.map
new file mode 100644
index 0000000..3e5ef33
--- /dev/null
+++ b/doc/html/classOptionpk__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Optionpk< T >" name="Optionpk< T >">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,5,120,32"/>
+</map>
diff --git a/doc/html/classOptionpk__inherit__graph.md5 b/doc/html/classOptionpk__inherit__graph.md5
new file mode 100644
index 0000000..0db5a00
--- /dev/null
+++ b/doc/html/classOptionpk__inherit__graph.md5
@@ -0,0 +1 @@
+49ea1bb4062c4a395ab38ecda0ec44a8
\ No newline at end of file
diff --git a/doc/html/classOptionpk__inherit__graph.png b/doc/html/classOptionpk__inherit__graph.png
new file mode 100644
index 0000000..e2d4dd6
Binary files /dev/null and b/doc/html/classOptionpk__inherit__graph.png differ
diff --git a/doc/html/classQMatrix-members.html b/doc/html/classQMatrix-members.html
new file mode 100644
index 0000000..3709e83
--- /dev/null
+++ b/doc/html/classQMatrix-members.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">QMatrix Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classQMatrix.html">QMatrix</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_Q</b>(int column, int len) const =0 (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_QD</b>() const =0 (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_index</b>(int i, int j) const =0 (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~QMatrix</b>() (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classQMatrix.html b/doc/html/classQMatrix.html
new file mode 100644
index 0000000..a7fc3fa
--- /dev/null
+++ b/doc/html/classQMatrix.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: QMatrix Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classQMatrix-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">QMatrix Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for QMatrix:</div>
+<div class="dyncontent">
+<div class="center"><img src="classQMatrix__inherit__graph.png" border="0" usemap="#QMatrix_inherit__map" alt="Inheritance graph"/></div>
+<map name="QMatrix_inherit__map" id="QMatrix_inherit__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="152,80,209,107"/><area shape="rect" id="node3" href="classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="5,155,123,181"/><area shape="rect" id="node4" href="classSVC__Q.html" title="SVC_Q" alt="" coords="148,155,215,181"/><area shape="rect" id="node5" href="classSVR__Q.html" title="SVR_Q" alt="" coords="239,155,305,181"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a87c11086390c81293d2978e042be3d10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87c11086390c81293d2978e042be3d10"></a>
+virtual Qfloat * </td><td class="memItemRight" valign="bottom"><b>get_Q</b> (int column, int len) const =0</td></tr>
+<tr class="separator:a87c11086390c81293d2978e042be3d10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af04994d9632b6194f626c431ce93083f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af04994d9632b6194f626c431ce93083f"></a>
+virtual double * </td><td class="memItemRight" valign="bottom"><b>get_QD</b> () const =0</td></tr>
+<tr class="separator:af04994d9632b6194f626c431ce93083f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb4e256ebe3008dff0d4b5414102dbe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb4e256ebe3008dff0d4b5414102dbe7"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j) const =0</td></tr>
+<tr class="separator:acb4e256ebe3008dff0d4b5414102dbe7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l00196">196</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classQMatrix__inherit__graph.map b/doc/html/classQMatrix__inherit__graph.map
new file mode 100644
index 0000000..6ec7bbc
--- /dev/null
+++ b/doc/html/classQMatrix__inherit__graph.map
@@ -0,0 +1,6 @@
+<map id="QMatrix" name="QMatrix">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="152,80,209,107"/>
+<area shape="rect" id="node3" href="$classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="5,155,123,181"/>
+<area shape="rect" id="node4" href="$classSVC__Q.html" title="SVC_Q" alt="" coords="148,155,215,181"/>
+<area shape="rect" id="node5" href="$classSVR__Q.html" title="SVR_Q" alt="" coords="239,155,305,181"/>
+</map>
diff --git a/doc/html/classQMatrix__inherit__graph.md5 b/doc/html/classQMatrix__inherit__graph.md5
new file mode 100644
index 0000000..451e69f
--- /dev/null
+++ b/doc/html/classQMatrix__inherit__graph.md5
@@ -0,0 +1 @@
+16f1983d166214f64c8d7731777e3899
\ No newline at end of file
diff --git a/doc/html/classQMatrix__inherit__graph.png b/doc/html/classQMatrix__inherit__graph.png
new file mode 100644
index 0000000..737bcee
Binary files /dev/null and b/doc/html/classQMatrix__inherit__graph.png differ
diff --git a/doc/html/classSVC__Q-members.html b/doc/html/classSVC__Q-members.html
new file mode 100644
index 0000000..38cc8f4
--- /dev/null
+++ b/doc/html/classSVC__Q-members.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SVC_Q Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classSVC__Q.html">SVC_Q</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_Q</b>(int i, int len) const (defined in <a class="el" href="classSVC__Q.html">SVC_Q</a>)</td><td class="entry"><a class="el" href="classSVC__Q.html">SVC_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_QD</b>() const (defined in <a class="el" href="classSVC__Q.html">SVC_Q</a>)</td><td class="entry"><a class="el" href="classSVC__Q.html">SVC_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>k_function</b>(const svm_node *x, const svm_node *y, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Kernel</b>(int l, svm_node *const *x, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_function</b> (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SVC_Q</b>(const svm_problem &prob, const svm_parameter ¶m, const schar *y_) (defined in <a class="el" href="classSVC__Q.html">SVC_Q</a>)</td><td class="entry"><a class="el" href="classSVC__Q.html">SVC_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_index</b>(int i, int j) const (defined in <a class="el" href="classSVC__Q.html">SVC_Q</a>)</td><td class="entry"><a class="el" href="classSVC__Q.html">SVC_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Kernel</b>() (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~QMatrix</b>() (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~SVC_Q</b>() (defined in <a class="el" href="classSVC__Q.html">SVC_Q</a>)</td><td class="entry"><a class="el" href="classSVC__Q.html">SVC_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSVC__Q.html b/doc/html/classSVC__Q.html
new file mode 100644
index 0000000..8aac902
--- /dev/null
+++ b/doc/html/classSVC__Q.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: SVC_Q Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classSVC__Q-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">SVC_Q Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SVC_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSVC__Q__inherit__graph.png" border="0" usemap="#SVC__Q_inherit__map" alt="Inheritance graph"/></div>
+<map name="SVC__Q_inherit__map" id="SVC__Q_inherit__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for SVC_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSVC__Q__coll__graph.png" border="0" usemap="#SVC__Q_coll__map" alt="Collaboration graph"/></div>
+<map name="SVC__Q_coll__map" id="SVC__Q_coll__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a23d7cf0b0606ccf2cb987205b94dddc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23d7cf0b0606ccf2cb987205b94dddc7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>SVC_Q</b> (const <a class="el" href="structsvm__problem.html">svm_problem</a> &prob, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m, const schar *y_)</td></tr>
+<tr class="separator:a23d7cf0b0606ccf2cb987205b94dddc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9341b6030b3fdc88466e4a602b5abff0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9341b6030b3fdc88466e4a602b5abff0"></a>
+Qfloat * </td><td class="memItemRight" valign="bottom"><b>get_Q</b> (int i, int len) const </td></tr>
+<tr class="separator:a9341b6030b3fdc88466e4a602b5abff0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac73020a6e438e209d63223e1fa8cac29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac73020a6e438e209d63223e1fa8cac29"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>get_QD</b> () const </td></tr>
+<tr class="separator:ac73020a6e438e209d63223e1fa8cac29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c889db8ee0156ed5bcdaa4d6bc4e245"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c889db8ee0156ed5bcdaa4d6bc4e245"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j) const </td></tr>
+<tr class="separator:a9c889db8ee0156ed5bcdaa4d6bc4e245"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classKernel')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25ffaa0c67cc5b8c7fcdb6f97ca1725f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Kernel</b> (int l, <a class="el" href="structsvm__node.html">svm_node</a> *const *x, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classKernel')"><img src="closed.png" alt="-"/> Static Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff0d4ac64bf7fba29d2ca3433dd5127"></a>
+static double </td><td class="memItemRight" valign="bottom"><b>k_function</b> (const <a class="el" href="structsvm__node.html">svm_node</a> *x, const <a class="el" href="structsvm__node.html">svm_node</a> *y, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classKernel')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575eeb588e8a5c62ff3228a35e255a02"></a>
+double(Kernel::* </td><td class="memItemRight" valign="bottom"><b>kernel_function</b> )(int i, int j) const </td></tr>
+<tr class="separator:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l01273">1273</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSVC__Q__coll__graph.map b/doc/html/classSVC__Q__coll__graph.map
new file mode 100644
index 0000000..525bd78
--- /dev/null
+++ b/doc/html/classSVC__Q__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="SVC_Q" name="SVC_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classSVC__Q__coll__graph.md5 b/doc/html/classSVC__Q__coll__graph.md5
new file mode 100644
index 0000000..49e0937
--- /dev/null
+++ b/doc/html/classSVC__Q__coll__graph.md5
@@ -0,0 +1 @@
+be01d771f362a07cb29951e4936c8c03
\ No newline at end of file
diff --git a/doc/html/classSVC__Q__coll__graph.png b/doc/html/classSVC__Q__coll__graph.png
new file mode 100644
index 0000000..94a074c
Binary files /dev/null and b/doc/html/classSVC__Q__coll__graph.png differ
diff --git a/doc/html/classSVC__Q__inherit__graph.map b/doc/html/classSVC__Q__inherit__graph.map
new file mode 100644
index 0000000..525bd78
--- /dev/null
+++ b/doc/html/classSVC__Q__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="SVC_Q" name="SVC_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classSVC__Q__inherit__graph.md5 b/doc/html/classSVC__Q__inherit__graph.md5
new file mode 100644
index 0000000..49e0937
--- /dev/null
+++ b/doc/html/classSVC__Q__inherit__graph.md5
@@ -0,0 +1 @@
+be01d771f362a07cb29951e4936c8c03
\ No newline at end of file
diff --git a/doc/html/classSVC__Q__inherit__graph.png b/doc/html/classSVC__Q__inherit__graph.png
new file mode 100644
index 0000000..94a074c
Binary files /dev/null and b/doc/html/classSVC__Q__inherit__graph.png differ
diff --git a/doc/html/classSVR__Q-members.html b/doc/html/classSVR__Q-members.html
new file mode 100644
index 0000000..d114ddf
--- /dev/null
+++ b/doc/html/classSVR__Q-members.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SVR_Q Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classSVR__Q.html">SVR_Q</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_Q</b>(int i, int len) const (defined in <a class="el" href="classSVR__Q.html">SVR_Q</a>)</td><td class="entry"><a class="el" href="classSVR__Q.html">SVR_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get_QD</b>() const (defined in <a class="el" href="classSVR__Q.html">SVR_Q</a>)</td><td class="entry"><a class="el" href="classSVR__Q.html">SVR_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>k_function</b>(const svm_node *x, const svm_node *y, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Kernel</b>(int l, svm_node *const *x, const svm_parameter ¶m) (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_function</b> (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SVR_Q</b>(const svm_problem &prob, const svm_parameter ¶m) (defined in <a class="el" href="classSVR__Q.html">SVR_Q</a>)</td><td class="entry"><a class="el" href="classSVR__Q.html">SVR_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_index</b>(int i, int j) const (defined in <a class="el" href="classSVR__Q.html">SVR_Q</a>)</td><td class="entry"><a class="el" href="classSVR__Q.html">SVR_Q</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Kernel</b>() (defined in <a class="el" href="classKernel.html">Kernel</a>)</td><td class="entry"><a class="el" href="classKernel.html">Kernel</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~QMatrix</b>() (defined in <a class="el" href="classQMatrix.html">QMatrix</a>)</td><td class="entry"><a class="el" href="classQMatrix.html">QMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~SVR_Q</b>() (defined in <a class="el" href="classSVR__Q.html">SVR_Q</a>)</td><td class="entry"><a class="el" href="classSVR__Q.html">SVR_Q</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSVR__Q.html b/doc/html/classSVR__Q.html
new file mode 100644
index 0000000..f6d477e
--- /dev/null
+++ b/doc/html/classSVR__Q.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: SVR_Q Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classSVR__Q-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">SVR_Q Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SVR_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSVR__Q__inherit__graph.png" border="0" usemap="#SVR__Q_inherit__map" alt="Inheritance graph"/></div>
+<map name="SVR__Q_inherit__map" id="SVR__Q_inherit__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for SVR_Q:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSVR__Q__coll__graph.png" border="0" usemap="#SVR__Q_coll__map" alt="Collaboration graph"/></div>
+<map name="SVR__Q_coll__map" id="SVR__Q_coll__map">
+<area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a348978e0cce4c0bf503dc825241eb4ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a348978e0cce4c0bf503dc825241eb4ff"></a>
+ </td><td class="memItemRight" valign="bottom"><b>SVR_Q</b> (const <a class="el" href="structsvm__problem.html">svm_problem</a> &prob, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a348978e0cce4c0bf503dc825241eb4ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d3884f0c68f4ce18d47570e4a203405"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d3884f0c68f4ce18d47570e4a203405"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j) const </td></tr>
+<tr class="separator:a9d3884f0c68f4ce18d47570e4a203405"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba55078d17e7815f093ffa154f3cee9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba55078d17e7815f093ffa154f3cee9d"></a>
+Qfloat * </td><td class="memItemRight" valign="bottom"><b>get_Q</b> (int i, int len) const </td></tr>
+<tr class="separator:aba55078d17e7815f093ffa154f3cee9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac22ed5ce1b0bf6a900c3c8d631e77d76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac22ed5ce1b0bf6a900c3c8d631e77d76"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>get_QD</b> () const </td></tr>
+<tr class="separator:ac22ed5ce1b0bf6a900c3c8d631e77d76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classKernel')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25ffaa0c67cc5b8c7fcdb6f97ca1725f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Kernel</b> (int l, <a class="el" href="structsvm__node.html">svm_node</a> *const *x, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a25ffaa0c67cc5b8c7fcdb6f97ca1725f inherit pub_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classKernel')"><img src="closed.png" alt="-"/> Static Public Member Functions inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff0d4ac64bf7fba29d2ca3433dd5127"></a>
+static double </td><td class="memItemRight" valign="bottom"><b>k_function</b> (const <a class="el" href="structsvm__node.html">svm_node</a> *x, const <a class="el" href="structsvm__node.html">svm_node</a> *y, const <a class="el" href="structsvm__parameter.html">svm_parameter</a> ¶m)</td></tr>
+<tr class="separator:a6ff0d4ac64bf7fba29d2ca3433dd5127 inherit pub_static_methods_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_classKernel"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classKernel')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classKernel.html">Kernel</a></td></tr>
+<tr class="memitem:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575eeb588e8a5c62ff3228a35e255a02"></a>
+double(Kernel::* </td><td class="memItemRight" valign="bottom"><b>kernel_function</b> )(int i, int j) const </td></tr>
+<tr class="separator:a575eeb588e8a5c62ff3228a35e255a02 inherit pro_attribs_classKernel"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l01369">1369</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSVR__Q__coll__graph.map b/doc/html/classSVR__Q__coll__graph.map
new file mode 100644
index 0000000..558924c
--- /dev/null
+++ b/doc/html/classSVR__Q__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="SVR_Q" name="SVR_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classSVR__Q__coll__graph.md5 b/doc/html/classSVR__Q__coll__graph.md5
new file mode 100644
index 0000000..dd5c95e
--- /dev/null
+++ b/doc/html/classSVR__Q__coll__graph.md5
@@ -0,0 +1 @@
+a7e53ec819237bac61d50010179771f7
\ No newline at end of file
diff --git a/doc/html/classSVR__Q__coll__graph.png b/doc/html/classSVR__Q__coll__graph.png
new file mode 100644
index 0000000..8b53c43
Binary files /dev/null and b/doc/html/classSVR__Q__coll__graph.png differ
diff --git a/doc/html/classSVR__Q__inherit__graph.map b/doc/html/classSVR__Q__inherit__graph.map
new file mode 100644
index 0000000..558924c
--- /dev/null
+++ b/doc/html/classSVR__Q__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="SVR_Q" name="SVR_Q">
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="9,80,67,107"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classSVR__Q__inherit__graph.md5 b/doc/html/classSVR__Q__inherit__graph.md5
new file mode 100644
index 0000000..dd5c95e
--- /dev/null
+++ b/doc/html/classSVR__Q__inherit__graph.md5
@@ -0,0 +1 @@
+a7e53ec819237bac61d50010179771f7
\ No newline at end of file
diff --git a/doc/html/classSVR__Q__inherit__graph.png b/doc/html/classSVR__Q__inherit__graph.png
new file mode 100644
index 0000000..8b53c43
Binary files /dev/null and b/doc/html/classSVR__Q__inherit__graph.png differ
diff --git a/doc/html/classSolver-members.html b/doc/html/classSolver-members.html
new file mode 100644
index 0000000..c1ba2c2
--- /dev/null
+++ b/doc/html/classSolver-members.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Solver Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classSolver.html">Solver</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active_set</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>active_size</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>alpha</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>alpha_status</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>calculate_rho</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Cn</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Cp</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>do_shrinking</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>eps</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FREE</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>G</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>G_bar</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_C</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_free</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_lower_bound</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_upper_bound</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>l</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LOWER_BOUND</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>p</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Q</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>QD</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reconstruct_gradient</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>select_working_set</b>(int &i, int &j) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Solve</b>(int l, const QMatrix &Q, const double *p_, const schar *y_, double *alpha_, double Cp, double Cn, double eps, SolutionInfo *si, int shrinking, bool verbose=false) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Solver</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>swap_index</b>(int i, int j) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unshrink</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>update_alpha_status</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>UPPER_BOUND</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>y</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Solver</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSolver.html b/doc/html/classSolver.html
new file mode 100644
index 0000000..0255434
--- /dev/null
+++ b/doc/html/classSolver.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Solver Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="classSolver-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Solver Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Solver:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSolver__inherit__graph.png" border="0" usemap="#Solver_inherit__map" alt="Inheritance graph"/></div>
+<map name="Solver_inherit__map" id="Solver_inherit__map">
+<area shape="rect" id="node2" href="classSolver__NU.html" title="Solver_NU" alt="" coords="5,80,91,107"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Solver:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSolver__coll__graph.png" border="0" usemap="#Solver_coll__map" alt="Collaboration graph"/></div>
+<map name="Solver_coll__map" id="Solver_coll__map">
+<area shape="rect" id="node2" href="classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac3bb5ec5ddc9ad38643b94fcc47a3a23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3bb5ec5ddc9ad38643b94fcc47a3a23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>Solve</b> (int l, const <a class="el" href="classQMatrix.html">QMatrix</a> &Q, const double *p_, const schar *y_, double *alpha_, double Cp, double Cn, double eps, <a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a> *si, int shrinking, bool verbose=false)</td></tr>
+<tr class="separator:ac3bb5ec5ddc9ad38643b94fcc47a3a23"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:ac379e632a6b428a803d621c92b0b3515"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom">{ <b>LOWER_BOUND</b>,
+<b>UPPER_BOUND</b>,
+<b>FREE</b>
+ }</td></tr>
+<tr class="separator:ac379e632a6b428a803d621c92b0b3515"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae55a8581815436d13e760dadaec34e2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae55a8581815436d13e760dadaec34e2a"></a>
+double </td><td class="memItemRight" valign="bottom"><b>get_C</b> (int i)</td></tr>
+<tr class="separator:ae55a8581815436d13e760dadaec34e2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a978b4ff9b60b2d75e54970fd6a2c20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a978b4ff9b60b2d75e54970fd6a2c20"></a>
+void </td><td class="memItemRight" valign="bottom"><b>update_alpha_status</b> (int i)</td></tr>
+<tr class="separator:a5a978b4ff9b60b2d75e54970fd6a2c20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98d878b13d6f710fcaa0b16e657a37b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98d878b13d6f710fcaa0b16e657a37b6"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_upper_bound</b> (int i)</td></tr>
+<tr class="separator:a98d878b13d6f710fcaa0b16e657a37b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5876eedb0a6de6954f6037af0992cbed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5876eedb0a6de6954f6037af0992cbed"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_lower_bound</b> (int i)</td></tr>
+<tr class="separator:a5876eedb0a6de6954f6037af0992cbed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b5e230875b8b5f06150ff0690e36b47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b5e230875b8b5f06150ff0690e36b47"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_free</b> (int i)</td></tr>
+<tr class="separator:a7b5e230875b8b5f06150ff0690e36b47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a043f498c1dda0122859d03f9cd07dc08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a043f498c1dda0122859d03f9cd07dc08"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j)</td></tr>
+<tr class="separator:a043f498c1dda0122859d03f9cd07dc08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e34992ede606a336606ae54f6e963e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e34992ede606a336606ae54f6e963e6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reconstruct_gradient</b> ()</td></tr>
+<tr class="separator:a7e34992ede606a336606ae54f6e963e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95fb4eaf33362558e1fc768f4db019d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95fb4eaf33362558e1fc768f4db019d3"></a>
+virtual int </td><td class="memItemRight" valign="bottom"><b>select_working_set</b> (int &i, int &j)</td></tr>
+<tr class="separator:a95fb4eaf33362558e1fc768f4db019d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad00b01f72232ca932cad68e58c9cde5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00b01f72232ca932cad68e58c9cde5a"></a>
+virtual double </td><td class="memItemRight" valign="bottom"><b>calculate_rho</b> ()</td></tr>
+<tr class="separator:ad00b01f72232ca932cad68e58c9cde5a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3f6665a1ca590e56b3d51f8ddcc347c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3f6665a1ca590e56b3d51f8ddcc347c"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>do_shrinking</b> ()</td></tr>
+<tr class="separator:ad3f6665a1ca590e56b3d51f8ddcc347c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a06ba1b87b3749cc545e573151b7beca0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06ba1b87b3749cc545e573151b7beca0"></a>
+int </td><td class="memItemRight" valign="bottom"><b>active_size</b></td></tr>
+<tr class="separator:a06ba1b87b3749cc545e573151b7beca0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3acc1043d06dedf87f054ff3eea5c426"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3acc1043d06dedf87f054ff3eea5c426"></a>
+schar * </td><td class="memItemRight" valign="bottom"><b>y</b></td></tr>
+<tr class="separator:a3acc1043d06dedf87f054ff3eea5c426"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8ab27068f2e045591970aae1201afe9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8ab27068f2e045591970aae1201afe9"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>G</b></td></tr>
+<tr class="separator:ad8ab27068f2e045591970aae1201afe9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fe653e04c43956d5fb86635651b0003"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe653e04c43956d5fb86635651b0003"></a>
+char * </td><td class="memItemRight" valign="bottom"><b>alpha_status</b></td></tr>
+<tr class="separator:a9fe653e04c43956d5fb86635651b0003"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00d7a7cefa2504d41c7db6cd7cc6b428"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d7a7cefa2504d41c7db6cd7cc6b428"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>alpha</b></td></tr>
+<tr class="separator:a00d7a7cefa2504d41c7db6cd7cc6b428"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d3461718f0570bdc47f5dfb31d61e0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d3461718f0570bdc47f5dfb31d61e0a"></a>
+const <a class="el" href="classQMatrix.html">QMatrix</a> * </td><td class="memItemRight" valign="bottom"><b>Q</b></td></tr>
+<tr class="separator:a2d3461718f0570bdc47f5dfb31d61e0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c7b7b1207983543855165e8eb249f2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c7b7b1207983543855165e8eb249f2a"></a>
+const double * </td><td class="memItemRight" valign="bottom"><b>QD</b></td></tr>
+<tr class="separator:a7c7b7b1207983543855165e8eb249f2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a718333cc2c1d40abf9c292a788cba1e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a718333cc2c1d40abf9c292a788cba1e5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr>
+<tr class="separator:a718333cc2c1d40abf9c292a788cba1e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e45dbea8be469bf8247e14768549dd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e45dbea8be469bf8247e14768549dd5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>Cp</b></td></tr>
+<tr class="separator:a2e45dbea8be469bf8247e14768549dd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38d741d194839fb445f982dd78e0b97b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38d741d194839fb445f982dd78e0b97b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>Cn</b></td></tr>
+<tr class="separator:a38d741d194839fb445f982dd78e0b97b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a882cce072f56679880d409e3e73f7ae8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a882cce072f56679880d409e3e73f7ae8"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+<tr class="separator:a882cce072f56679880d409e3e73f7ae8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6382277606a9b3df3d2f0ac947e1cde3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6382277606a9b3df3d2f0ac947e1cde3"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>active_set</b></td></tr>
+<tr class="separator:a6382277606a9b3df3d2f0ac947e1cde3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89e58cf39a0415c9032b8ec2f4575dcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89e58cf39a0415c9032b8ec2f4575dcc"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>G_bar</b></td></tr>
+<tr class="separator:a89e58cf39a0415c9032b8ec2f4575dcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88832d45b6de977b1cbb2afd4c0e494c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88832d45b6de977b1cbb2afd4c0e494c"></a>
+int </td><td class="memItemRight" valign="bottom"><b>l</b></td></tr>
+<tr class="separator:a88832d45b6de977b1cbb2afd4c0e494c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62ded1c184aeb28f8dee04eb4a10530a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62ded1c184aeb28f8dee04eb4a10530a"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>unshrink</b></td></tr>
+<tr class="separator:a62ded1c184aeb28f8dee04eb4a10530a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l00395">395</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSolver__NU-members.html b/doc/html/classSolver__NU-members.html
new file mode 100644
index 0000000..a1c3a57
--- /dev/null
+++ b/doc/html/classSolver__NU-members.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Solver_NU Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classSolver__NU.html">Solver_NU</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active_set</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>active_size</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>alpha</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>alpha_status</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Cn</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Cp</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>eps</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FREE</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>G</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>G_bar</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_C</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_free</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_lower_bound</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_upper_bound</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>l</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LOWER_BOUND</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>p</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Q</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>QD</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reconstruct_gradient</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Solve</b>(int l, const QMatrix &Q, const double *p, const schar *y, double *alpha, double Cp, double Cn, double eps, SolutionInfo *si, int shrinking, bool verbose=false) (defined in <a class="el" href="classSolver__NU.html">Solver_NU</a>)</td><td class="entry"><a class="el" href="classSolver__NU.html">Solver_NU</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Solver</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Solver_NU</b>() (defined in <a class="el" href="classSolver__NU.html">Solver_NU</a>)</td><td class="entry"><a class="el" href="classSolver__NU.html">Solver_NU</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>swap_index</b>(int i, int j) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unshrink</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>update_alpha_status</b>(int i) (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>UPPER_BOUND</b> enum value (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>y</b> (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Solver</b>() (defined in <a class="el" href="classSolver.html">Solver</a>)</td><td class="entry"><a class="el" href="classSolver.html">Solver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSolver__NU.html b/doc/html/classSolver__NU.html
new file mode 100644
index 0000000..39fc839
--- /dev/null
+++ b/doc/html/classSolver__NU.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Solver_NU Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classSolver__NU-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Solver_NU Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Solver_NU:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSolver__NU__inherit__graph.png" border="0" usemap="#Solver__NU_inherit__map" alt="Inheritance graph"/></div>
+<map name="Solver__NU_inherit__map" id="Solver__NU_inherit__map">
+<area shape="rect" id="node2" href="classSolver.html" title="Solver" alt="" coords="19,5,76,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Solver_NU:</div>
+<div class="dyncontent">
+<div class="center"><img src="classSolver__NU__coll__graph.png" border="0" usemap="#Solver__NU_coll__map" alt="Collaboration graph"/></div>
+<map name="Solver__NU_coll__map" id="Solver__NU_coll__map">
+<area shape="rect" id="node2" href="classSolver.html" title="Solver" alt="" coords="19,96,76,123"/><area shape="rect" id="node3" href="classQMatrix.html" title="QMatrix" alt="" coords="14,5,81,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4cc19c4f8a921ed24db991d300f02e4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cc19c4f8a921ed24db991d300f02e4c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>Solve</b> (int l, const <a class="el" href="classQMatrix.html">QMatrix</a> &Q, const double *p, const schar *y, double *alpha, double Cp, double Cn, double eps, <a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a> *si, int shrinking, bool verbose=false)</td></tr>
+<tr class="separator:a4cc19c4f8a921ed24db991d300f02e4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classSolver"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSolver')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classSolver.html">Solver</a></td></tr>
+<tr class="memitem:ac3bb5ec5ddc9ad38643b94fcc47a3a23 inherit pub_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3bb5ec5ddc9ad38643b94fcc47a3a23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>Solve</b> (int l, const <a class="el" href="classQMatrix.html">QMatrix</a> &Q, const double *p_, const schar *y_, double *alpha_, double Cp, double Cn, double eps, <a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a> *si, int shrinking, bool verbose=false)</td></tr>
+<tr class="separator:ac3bb5ec5ddc9ad38643b94fcc47a3a23 inherit pub_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_types_classSolver"><td colspan="2" onclick="javascript:toggleInherit('pro_types_classSolver')"><img src="closed.png" alt="-"/> Protected Types inherited from <a class="el" href="classSolver.html">Solver</a></td></tr>
+<tr class="memitem:ac379e632a6b428a803d621c92b0b3515 inherit pro_types_classSolver"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom">{ <b>LOWER_BOUND</b>,
+<b>UPPER_BOUND</b>,
+<b>FREE</b>
+ }</td></tr>
+<tr class="separator:ac379e632a6b428a803d621c92b0b3515 inherit pro_types_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_classSolver"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classSolver')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="classSolver.html">Solver</a></td></tr>
+<tr class="memitem:ae55a8581815436d13e760dadaec34e2a inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae55a8581815436d13e760dadaec34e2a"></a>
+double </td><td class="memItemRight" valign="bottom"><b>get_C</b> (int i)</td></tr>
+<tr class="separator:ae55a8581815436d13e760dadaec34e2a inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a978b4ff9b60b2d75e54970fd6a2c20 inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a978b4ff9b60b2d75e54970fd6a2c20"></a>
+void </td><td class="memItemRight" valign="bottom"><b>update_alpha_status</b> (int i)</td></tr>
+<tr class="separator:a5a978b4ff9b60b2d75e54970fd6a2c20 inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98d878b13d6f710fcaa0b16e657a37b6 inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98d878b13d6f710fcaa0b16e657a37b6"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_upper_bound</b> (int i)</td></tr>
+<tr class="separator:a98d878b13d6f710fcaa0b16e657a37b6 inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5876eedb0a6de6954f6037af0992cbed inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5876eedb0a6de6954f6037af0992cbed"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_lower_bound</b> (int i)</td></tr>
+<tr class="separator:a5876eedb0a6de6954f6037af0992cbed inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b5e230875b8b5f06150ff0690e36b47 inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b5e230875b8b5f06150ff0690e36b47"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_free</b> (int i)</td></tr>
+<tr class="separator:a7b5e230875b8b5f06150ff0690e36b47 inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a043f498c1dda0122859d03f9cd07dc08 inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a043f498c1dda0122859d03f9cd07dc08"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap_index</b> (int i, int j)</td></tr>
+<tr class="separator:a043f498c1dda0122859d03f9cd07dc08 inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e34992ede606a336606ae54f6e963e6 inherit pro_methods_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e34992ede606a336606ae54f6e963e6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reconstruct_gradient</b> ()</td></tr>
+<tr class="separator:a7e34992ede606a336606ae54f6e963e6 inherit pro_methods_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_classSolver"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSolver')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classSolver.html">Solver</a></td></tr>
+<tr class="memitem:a06ba1b87b3749cc545e573151b7beca0 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06ba1b87b3749cc545e573151b7beca0"></a>
+int </td><td class="memItemRight" valign="bottom"><b>active_size</b></td></tr>
+<tr class="separator:a06ba1b87b3749cc545e573151b7beca0 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3acc1043d06dedf87f054ff3eea5c426 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3acc1043d06dedf87f054ff3eea5c426"></a>
+schar * </td><td class="memItemRight" valign="bottom"><b>y</b></td></tr>
+<tr class="separator:a3acc1043d06dedf87f054ff3eea5c426 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8ab27068f2e045591970aae1201afe9 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8ab27068f2e045591970aae1201afe9"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>G</b></td></tr>
+<tr class="separator:ad8ab27068f2e045591970aae1201afe9 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fe653e04c43956d5fb86635651b0003 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe653e04c43956d5fb86635651b0003"></a>
+char * </td><td class="memItemRight" valign="bottom"><b>alpha_status</b></td></tr>
+<tr class="separator:a9fe653e04c43956d5fb86635651b0003 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00d7a7cefa2504d41c7db6cd7cc6b428 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d7a7cefa2504d41c7db6cd7cc6b428"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>alpha</b></td></tr>
+<tr class="separator:a00d7a7cefa2504d41c7db6cd7cc6b428 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d3461718f0570bdc47f5dfb31d61e0a inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d3461718f0570bdc47f5dfb31d61e0a"></a>
+const <a class="el" href="classQMatrix.html">QMatrix</a> * </td><td class="memItemRight" valign="bottom"><b>Q</b></td></tr>
+<tr class="separator:a2d3461718f0570bdc47f5dfb31d61e0a inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c7b7b1207983543855165e8eb249f2a inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c7b7b1207983543855165e8eb249f2a"></a>
+const double * </td><td class="memItemRight" valign="bottom"><b>QD</b></td></tr>
+<tr class="separator:a7c7b7b1207983543855165e8eb249f2a inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a718333cc2c1d40abf9c292a788cba1e5 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a718333cc2c1d40abf9c292a788cba1e5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr>
+<tr class="separator:a718333cc2c1d40abf9c292a788cba1e5 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e45dbea8be469bf8247e14768549dd5 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e45dbea8be469bf8247e14768549dd5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>Cp</b></td></tr>
+<tr class="separator:a2e45dbea8be469bf8247e14768549dd5 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38d741d194839fb445f982dd78e0b97b inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38d741d194839fb445f982dd78e0b97b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>Cn</b></td></tr>
+<tr class="separator:a38d741d194839fb445f982dd78e0b97b inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a882cce072f56679880d409e3e73f7ae8 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a882cce072f56679880d409e3e73f7ae8"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+<tr class="separator:a882cce072f56679880d409e3e73f7ae8 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6382277606a9b3df3d2f0ac947e1cde3 inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6382277606a9b3df3d2f0ac947e1cde3"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>active_set</b></td></tr>
+<tr class="separator:a6382277606a9b3df3d2f0ac947e1cde3 inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89e58cf39a0415c9032b8ec2f4575dcc inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89e58cf39a0415c9032b8ec2f4575dcc"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>G_bar</b></td></tr>
+<tr class="separator:a89e58cf39a0415c9032b8ec2f4575dcc inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88832d45b6de977b1cbb2afd4c0e494c inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88832d45b6de977b1cbb2afd4c0e494c"></a>
+int </td><td class="memItemRight" valign="bottom"><b>l</b></td></tr>
+<tr class="separator:a88832d45b6de977b1cbb2afd4c0e494c inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62ded1c184aeb28f8dee04eb4a10530a inherit pro_attribs_classSolver"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62ded1c184aeb28f8dee04eb4a10530a"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>unshrink</b></td></tr>
+<tr class="separator:a62ded1c184aeb28f8dee04eb4a10530a inherit pro_attribs_classSolver"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l01016">1016</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classSolver__NU__coll__graph.map b/doc/html/classSolver__NU__coll__graph.map
new file mode 100644
index 0000000..925cfc3
--- /dev/null
+++ b/doc/html/classSolver__NU__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="Solver_NU" name="Solver_NU">
+<area shape="rect" id="node2" href="$classSolver.html" title="Solver" alt="" coords="19,96,76,123"/>
+<area shape="rect" id="node3" href="$classQMatrix.html" title="QMatrix" alt="" coords="14,5,81,32"/>
+</map>
diff --git a/doc/html/classSolver__NU__coll__graph.md5 b/doc/html/classSolver__NU__coll__graph.md5
new file mode 100644
index 0000000..7177380
--- /dev/null
+++ b/doc/html/classSolver__NU__coll__graph.md5
@@ -0,0 +1 @@
+6543c36bd4df2184596e187d1c765cdf
\ No newline at end of file
diff --git a/doc/html/classSolver__NU__coll__graph.png b/doc/html/classSolver__NU__coll__graph.png
new file mode 100644
index 0000000..96348c1
Binary files /dev/null and b/doc/html/classSolver__NU__coll__graph.png differ
diff --git a/doc/html/classSolver__NU__inherit__graph.map b/doc/html/classSolver__NU__inherit__graph.map
new file mode 100644
index 0000000..257fd8f
--- /dev/null
+++ b/doc/html/classSolver__NU__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Solver_NU" name="Solver_NU">
+<area shape="rect" id="node2" href="$classSolver.html" title="Solver" alt="" coords="19,5,76,32"/>
+</map>
diff --git a/doc/html/classSolver__NU__inherit__graph.md5 b/doc/html/classSolver__NU__inherit__graph.md5
new file mode 100644
index 0000000..d852505
--- /dev/null
+++ b/doc/html/classSolver__NU__inherit__graph.md5
@@ -0,0 +1 @@
+701fd7ff490aa194f36920de56b96d23
\ No newline at end of file
diff --git a/doc/html/classSolver__NU__inherit__graph.png b/doc/html/classSolver__NU__inherit__graph.png
new file mode 100644
index 0000000..7ea4c0a
Binary files /dev/null and b/doc/html/classSolver__NU__inherit__graph.png differ
diff --git a/doc/html/classSolver__coll__graph.map b/doc/html/classSolver__coll__graph.map
new file mode 100644
index 0000000..11fab22
--- /dev/null
+++ b/doc/html/classSolver__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="Solver" name="Solver">
+<area shape="rect" id="node2" href="$classQMatrix.html" title="QMatrix" alt="" coords="5,5,72,32"/>
+</map>
diff --git a/doc/html/classSolver__coll__graph.md5 b/doc/html/classSolver__coll__graph.md5
new file mode 100644
index 0000000..0d3924b
--- /dev/null
+++ b/doc/html/classSolver__coll__graph.md5
@@ -0,0 +1 @@
+262789c6a3eb0d883423648adb1331a6
\ No newline at end of file
diff --git a/doc/html/classSolver__coll__graph.png b/doc/html/classSolver__coll__graph.png
new file mode 100644
index 0000000..060089d
Binary files /dev/null and b/doc/html/classSolver__coll__graph.png differ
diff --git a/doc/html/classSolver__inherit__graph.map b/doc/html/classSolver__inherit__graph.map
new file mode 100644
index 0000000..d4b3170
--- /dev/null
+++ b/doc/html/classSolver__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Solver" name="Solver">
+<area shape="rect" id="node2" href="$classSolver__NU.html" title="Solver_NU" alt="" coords="5,80,91,107"/>
+</map>
diff --git a/doc/html/classSolver__inherit__graph.md5 b/doc/html/classSolver__inherit__graph.md5
new file mode 100644
index 0000000..b849b97
--- /dev/null
+++ b/doc/html/classSolver__inherit__graph.md5
@@ -0,0 +1 @@
+6cc560af3cdb31cb392a6c822559375e
\ No newline at end of file
diff --git a/doc/html/classSolver__inherit__graph.png b/doc/html/classSolver__inherit__graph.png
new file mode 100644
index 0000000..afad4b2
Binary files /dev/null and b/doc/html/classSolver__inherit__graph.png differ
diff --git a/doc/html/classUi_1_1MainWindow-members.html b/doc/html/classUi_1_1MainWindow-members.html
new file mode 100644
index 0000000..ae074a9
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow-members.html
@@ -0,0 +1,262 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>Ui</b></li><li class="navelem"><a class="el" href="classUi_1_1MainWindow.html">MainWindow</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Ui::MainWindow Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classUi_1_1MainWindow.html">Ui::MainWindow</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>a_srs</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionColor_table</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionExtent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionInput</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionInput_image</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionMask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionOutput</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionOutput_image</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionQuit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionReference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionSample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionSelection_Info_file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionTraining</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>as_from</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>as_to</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>autoscale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>bname</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>bndnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>buttonGroup</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cband</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ccost</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>centralWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cname</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>coef0</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>commandLineEdit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>commandLinkButtonPrepareTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>commandLinkButtonPrepareTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>compressed</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>confusion</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>consoleEdit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>crule</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ct</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cv</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dstnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dy</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>f</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gamma</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gridLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gridLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>groupBox</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_10</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_11</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_15</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_7</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_8</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_9</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>interleaved</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kd</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>kerneltype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_10</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_11</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_12</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_13</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_14</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_15</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_16</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_17</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_18</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_19</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_20</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_21</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_22</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_23</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_24</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_25</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_7</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_8</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_9</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>layoutWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lclass</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>listWidget_band</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>listWidget_input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lref</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lrx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lry</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mainToolBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>manual</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>max</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>menuBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>menuFile</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>min</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>msknodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nclass</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>noscale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nu</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>offset</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>oformat</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>otype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>output</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>polygon</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushButton_restore</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushButton_run</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>rule</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>srcnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>statusBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>svmtype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tab</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tab_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tab_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tab_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tableView_labels</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tabWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>threshold</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tiled</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tln</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_createTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_ct</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_defaults</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_extent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_mask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_output</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_Run</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_sample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_training</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>training</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ulx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>uly</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalSpacer</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalSpacer_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalSpacer_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>widget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classUi_1_1MainWindow.html b/doc/html/classUi_1_1MainWindow.html
new file mode 100644
index 0000000..61d0f4e
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow.html
@@ -0,0 +1,655 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Ui::MainWindow Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>Ui</b></li><li class="navelem"><a class="el" href="classUi_1_1MainWindow.html">MainWindow</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="classUi_1_1MainWindow-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Ui::MainWindow Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Ui::MainWindow:</div>
+<div class="dyncontent">
+<div class="center"><img src="classUi_1_1MainWindow__inherit__graph.png" border="0" usemap="#Ui_1_1MainWindow_inherit__map" alt="Inheritance graph"/></div>
+<map name="Ui_1_1MainWindow_inherit__map" id="Ui_1_1MainWindow_inherit__map">
+<area shape="rect" id="node2" href="classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="28,5,144,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Ui::MainWindow:</div>
+<div class="dyncontent">
+<div class="center"><img src="classUi_1_1MainWindow__coll__graph.png" border="0" usemap="#Ui_1_1MainWindow_coll__map" alt="Collaboration graph"/></div>
+<map name="Ui_1_1MainWindow_coll__map" id="Ui_1_1MainWindow_coll__map">
+<area shape="rect" id="node2" href="classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="28,5,144,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_classUi__MainWindow"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classUi__MainWindow')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618 inherit pub_methods_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_attribs_classUi__MainWindow"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classUi__MainWindow')"><img src="closed.png" alt="-"/> Public Attributes inherited from <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td></tr>
+<tr class="memitem:af2483b34f1656f3e57729ad834ddf677 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2483b34f1656f3e57729ad834ddf677"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionInput_image</b></td></tr>
+<tr class="separator:af2483b34f1656f3e57729ad834ddf677 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29b62934c81c009fdf0d03a9ee63ce0b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29b62934c81c009fdf0d03a9ee63ce0b"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionOutput_image</b></td></tr>
+<tr class="separator:a29b62934c81c009fdf0d03a9ee63ce0b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af229024ef8f86d81e376205c1a5a9ee5 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af229024ef8f86d81e376205c1a5a9ee5"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionQuit</b></td></tr>
+<tr class="separator:af229024ef8f86d81e376205c1a5a9ee5 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77d713a73993a0942c43c083168f17e9 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77d713a73993a0942c43c083168f17e9"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionSelection_Info_file</b></td></tr>
+<tr class="separator:a77d713a73993a0942c43c083168f17e9 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa71af6efef796a61c728993c3a675636 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa71af6efef796a61c728993c3a675636"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionExtent</b></td></tr>
+<tr class="separator:aa71af6efef796a61c728993c3a675636 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6600dd3bdd3d55e535659e4a4096ea48 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6600dd3bdd3d55e535659e4a4096ea48"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>centralWidget</b></td></tr>
+<tr class="separator:a6600dd3bdd3d55e535659e4a4096ea48 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a649287f742c9a33b8444116dccb1b72b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a649287f742c9a33b8444116dccb1b72b"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout</b></td></tr>
+<tr class="separator:a649287f742c9a33b8444116dccb1b72b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13404ee3b30e38230383dd765a5eec4a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13404ee3b30e38230383dd765a5eec4a"></a>
+QTabWidget * </td><td class="memItemRight" valign="bottom"><b>tabWidget</b></td></tr>
+<tr class="separator:a13404ee3b30e38230383dd765a5eec4a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97e497a37904b5538bba9c218f40cb58 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97e497a37904b5538bba9c218f40cb58"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab</b></td></tr>
+<tr class="separator:a97e497a37904b5538bba9c218f40cb58 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbe60c634b3214ee76ff9e1fa70c7801 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe60c634b3214ee76ff9e1fa70c7801"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_2</b></td></tr>
+<tr class="separator:afbe60c634b3214ee76ff9e1fa70c7801 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbbc615e662a726cd71cabd62c7d2a70 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbbc615e662a726cd71cabd62c7d2a70"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_2</b></td></tr>
+<tr class="separator:acbbc615e662a726cd71cabd62c7d2a70 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8441da46ea0343bc6ad8f05e2e1c270 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8441da46ea0343bc6ad8f05e2e1c270"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_3</b></td></tr>
+<tr class="separator:ab8441da46ea0343bc6ad8f05e2e1c270 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca97445f66e25e0819038ec3c7b7c129 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca97445f66e25e0819038ec3c7b7c129"></a>
+QListWidget * </td><td class="memItemRight" valign="bottom"><b>listWidget_input</b></td></tr>
+<tr class="separator:aca97445f66e25e0819038ec3c7b7c129 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0ed1aaea955dfef1d84b92e2723769d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0ed1aaea955dfef1d84b92e2723769d"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label</b></td></tr>
+<tr class="separator:af0ed1aaea955dfef1d84b92e2723769d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade2b29a951ec97479a76b77481982472 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2b29a951ec97479a76b77481982472"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_input</b></td></tr>
+<tr class="separator:ade2b29a951ec97479a76b77481982472 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0244a06f306ce55b10f9d3cc97be18e8 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0244a06f306ce55b10f9d3cc97be18e8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lry</b></td></tr>
+<tr class="separator:a0244a06f306ce55b10f9d3cc97be18e8 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b4ef3f31d735e9d9e3a78b152c7a43b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4ef3f31d735e9d9e3a78b152c7a43b"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>uly</b></td></tr>
+<tr class="separator:a7b4ef3f31d735e9d9e3a78b152c7a43b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f5576686ce98bcc41bd1b1eca07e56a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f5576686ce98bcc41bd1b1eca07e56a"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_2</b></td></tr>
+<tr class="separator:a2f5576686ce98bcc41bd1b1eca07e56a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1662d5e0a54ac7f38c5ab5d991f4ce14 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1662d5e0a54ac7f38c5ab5d991f4ce14"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_2</b></td></tr>
+<tr class="separator:a1662d5e0a54ac7f38c5ab5d991f4ce14 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72b0851f6a34cfe6b9875edeac284d1f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72b0851f6a34cfe6b9875edeac284d1f"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lrx</b></td></tr>
+<tr class="separator:a72b0851f6a34cfe6b9875edeac284d1f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05c1a490d770856a4a3af1563e2c660a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05c1a490d770856a4a3af1563e2c660a"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ulx</b></td></tr>
+<tr class="separator:a05c1a490d770856a4a3af1563e2c660a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a953dcd0e658a0903339e2ef3c94d4e7e inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a953dcd0e658a0903339e2ef3c94d4e7e"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_4</b></td></tr>
+<tr class="separator:a953dcd0e658a0903339e2ef3c94d4e7e inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03b8709208e6996236604b2cde800390 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03b8709208e6996236604b2cde800390"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>extent</b></td></tr>
+<tr class="separator:a03b8709208e6996236604b2cde800390 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a53306da61a2245541d184a47245944cd inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53306da61a2245541d184a47245944cd"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_extent</b></td></tr>
+<tr class="separator:a53306da61a2245541d184a47245944cd inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e6564e567db2242a5ff37cff57bc1d4 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6564e567db2242a5ff37cff57bc1d4"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_2</b></td></tr>
+<tr class="separator:a1e6564e567db2242a5ff37cff57bc1d4 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87e310470e3a3ad29981f1166af9be7f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87e310470e3a3ad29981f1166af9be7f"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_4</b></td></tr>
+<tr class="separator:a87e310470e3a3ad29981f1166af9be7f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a986c0329937b0114c287180b96a6ff6b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a986c0329937b0114c287180b96a6ff6b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer_3</b></td></tr>
+<tr class="separator:a986c0329937b0114c287180b96a6ff6b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3da2273c5f6f94c4d49561cc860f97b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3da2273c5f6f94c4d49561cc860f97b"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>resample</b></td></tr>
+<tr class="separator:ae3da2273c5f6f94c4d49561cc860f97b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a318a53712b4ddbe8e627a9744d3a0a00 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a318a53712b4ddbe8e627a9744d3a0a00"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_18</b></td></tr>
+<tr class="separator:a318a53712b4ddbe8e627a9744d3a0a00 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad058591c79a610b3cee046f63d1778e inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad058591c79a610b3cee046f63d1778e"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_17</b></td></tr>
+<tr class="separator:aad058591c79a610b3cee046f63d1778e inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b80df24ad136b865c5d89a20d5bb2ec inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b80df24ad136b865c5d89a20d5bb2ec"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>crule</b></td></tr>
+<tr class="separator:a6b80df24ad136b865c5d89a20d5bb2ec inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ca10771e840725caeb3f43ee7d7858b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ca10771e840725caeb3f43ee7d7858b"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_19</b></td></tr>
+<tr class="separator:a8ca10771e840725caeb3f43ee7d7858b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1c6584a6a7b602d2b1b5a32db95eaa7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1c6584a6a7b602d2b1b5a32db95eaa7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cband</b></td></tr>
+<tr class="separator:ab1c6584a6a7b602d2b1b5a32db95eaa7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad396eaa8d855b13559c50e02164b8325 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad396eaa8d855b13559c50e02164b8325"></a>
+QGroupBox * </td><td class="memItemRight" valign="bottom"><b>groupBox</b></td></tr>
+<tr class="separator:ad396eaa8d855b13559c50e02164b8325 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a183b845e444a43e0be1cd9f5be22c359 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a183b845e444a43e0be1cd9f5be22c359"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_3</b></td></tr>
+<tr class="separator:a183b845e444a43e0be1cd9f5be22c359 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5512eae4640544a462d1973743e6532b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5512eae4640544a462d1973743e6532b"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_21</b></td></tr>
+<tr class="separator:a5512eae4640544a462d1973743e6532b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf0cc3cdcf78e05d41d5d80916bbf7ce inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf0cc3cdcf78e05d41d5d80916bbf7ce"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>srcnodata</b></td></tr>
+<tr class="separator:abf0cc3cdcf78e05d41d5d80916bbf7ce inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59690f12b04136e7cb2278d9de865e73 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59690f12b04136e7cb2278d9de865e73"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_23</b></td></tr>
+<tr class="separator:a59690f12b04136e7cb2278d9de865e73 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5535fb6244ecc9af33991a3309a93a0 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5535fb6244ecc9af33991a3309a93a0"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_22</b></td></tr>
+<tr class="separator:ac5535fb6244ecc9af33991a3309a93a0 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cb993e55f48a7ea284055d7d26d2ca8 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cb993e55f48a7ea284055d7d26d2ca8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>min</b></td></tr>
+<tr class="separator:a7cb993e55f48a7ea284055d7d26d2ca8 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff20afaa8f9943bea0f26a1e5b80a065 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff20afaa8f9943bea0f26a1e5b80a065"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>max</b></td></tr>
+<tr class="separator:aff20afaa8f9943bea0f26a1e5b80a065 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2812ef8517ae9d0f250a2d39569b08a7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2812ef8517ae9d0f250a2d39569b08a7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_20</b></td></tr>
+<tr class="separator:a2812ef8517ae9d0f250a2d39569b08a7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcb71699e34ea39e15ab52a210d82f43 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcb71699e34ea39e15ab52a210d82f43"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>bndnodata</b></td></tr>
+<tr class="separator:abcb71699e34ea39e15ab52a210d82f43 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4a217e81b9707b402a58b7e55ed81e2 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4a217e81b9707b402a58b7e55ed81e2"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_4</b></td></tr>
+<tr class="separator:ac4a217e81b9707b402a58b7e55ed81e2 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab70233e701808fd06001b2c59717d63b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab70233e701808fd06001b2c59717d63b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_5</b></td></tr>
+<tr class="separator:ab70233e701808fd06001b2c59717d63b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a449fab77f12d72a810b50ec1768adcaa inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a449fab77f12d72a810b50ec1768adcaa"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_3</b></td></tr>
+<tr class="separator:a449fab77f12d72a810b50ec1768adcaa inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0802f681bf63ded0edff4bc7c1a6e9d4 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0802f681bf63ded0edff4bc7c1a6e9d4"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_3</b></td></tr>
+<tr class="separator:a0802f681bf63ded0edff4bc7c1a6e9d4 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4586abe48f0aabf940b0dc2df3772ed inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4586abe48f0aabf940b0dc2df3772ed"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout</b></td></tr>
+<tr class="separator:ac4586abe48f0aabf940b0dc2df3772ed inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2f233a14d9b1c41ec685a9fe1c606b7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2f233a14d9b1c41ec685a9fe1c606b7"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_6</b></td></tr>
+<tr class="separator:ab2f233a14d9b1c41ec685a9fe1c606b7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9687c8357009cfcf28517fa276ea1918 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9687c8357009cfcf28517fa276ea1918"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_7</b></td></tr>
+<tr class="separator:a9687c8357009cfcf28517fa276ea1918 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85082b01c10e391194bc6e48c0d8cb28 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85082b01c10e391194bc6e48c0d8cb28"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_14</b></td></tr>
+<tr class="separator:a85082b01c10e391194bc6e48c0d8cb28 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24601dbd2cc80ac985454289af5ba4f7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24601dbd2cc80ac985454289af5ba4f7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>file</b></td></tr>
+<tr class="separator:a24601dbd2cc80ac985454289af5ba4f7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0130582ecf8dfbf621aa87f6d0d702f7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0130582ecf8dfbf621aa87f6d0d702f7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_10</b></td></tr>
+<tr class="separator:a0130582ecf8dfbf621aa87f6d0d702f7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29d5ce90df70e771627c460f7618444c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29d5ce90df70e771627c460f7618444c"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>oformat</b></td></tr>
+<tr class="separator:a29d5ce90df70e771627c460f7618444c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacb80f899e57d6b0ead98c016786181f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacb80f899e57d6b0ead98c016786181f"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>interleaved</b></td></tr>
+<tr class="separator:aacb80f899e57d6b0ead98c016786181f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbe5a2168615ca342d06286db75927bc inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe5a2168615ca342d06286db75927bc"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_9</b></td></tr>
+<tr class="separator:abbe5a2168615ca342d06286db75927bc inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a783887ea0ca8c4763cebe24749b26909 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783887ea0ca8c4763cebe24749b26909"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dx</b></td></tr>
+<tr class="separator:a783887ea0ca8c4763cebe24749b26909 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae1122bf5c5f6daf310a93072a5eb72a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae1122bf5c5f6daf310a93072a5eb72a"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_8</b></td></tr>
+<tr class="separator:aae1122bf5c5f6daf310a93072a5eb72a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c75bb276de75b3e98e7db39e4a9e190 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c75bb276de75b3e98e7db39e4a9e190"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_13</b></td></tr>
+<tr class="separator:a3c75bb276de75b3e98e7db39e4a9e190 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8e8e32f6a5a0ce9327728cb0e29d8c4 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8e8e32f6a5a0ce9327728cb0e29d8c4"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_ct</b></td></tr>
+<tr class="separator:af8e8e32f6a5a0ce9327728cb0e29d8c4 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98ba6b67118efbc43442a8486bc0401f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98ba6b67118efbc43442a8486bc0401f"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>compressed</b></td></tr>
+<tr class="separator:a98ba6b67118efbc43442a8486bc0401f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1df694de9f13a0ef3efae2c9aa495464 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df694de9f13a0ef3efae2c9aa495464"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_12</b></td></tr>
+<tr class="separator:a1df694de9f13a0ef3efae2c9aa495464 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22df1f839ef6e572270af38e1041b466 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22df1f839ef6e572270af38e1041b466"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ct</b></td></tr>
+<tr class="separator:a22df1f839ef6e572270af38e1041b466 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abeaf6128b140b9fb7dd5323545c39aa6 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeaf6128b140b9fb7dd5323545c39aa6"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>output</b></td></tr>
+<tr class="separator:abeaf6128b140b9fb7dd5323545c39aa6 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae414e3be8e98c0fb2bd68eb04ba6a557 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae414e3be8e98c0fb2bd68eb04ba6a557"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_output</b></td></tr>
+<tr class="separator:ae414e3be8e98c0fb2bd68eb04ba6a557 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac10ed68694c23da02ddc0ceacd54ef01 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac10ed68694c23da02ddc0ceacd54ef01"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_6</b></td></tr>
+<tr class="separator:ac10ed68694c23da02ddc0ceacd54ef01 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae09ab268d64ef88053d9274a1db7d809 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae09ab268d64ef88053d9274a1db7d809"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>a_srs</b></td></tr>
+<tr class="separator:ae09ab268d64ef88053d9274a1db7d809 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe8180cf76469366b43fadd603c1b1f7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe8180cf76469366b43fadd603c1b1f7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_15</b></td></tr>
+<tr class="separator:afe8180cf76469366b43fadd603c1b1f7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8792d3c1f86d599e980b8925b70de355 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8792d3c1f86d599e980b8925b70de355"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dy</b></td></tr>
+<tr class="separator:a8792d3c1f86d599e980b8925b70de355 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af121c391d64554ab2602ae6174e03d95 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af121c391d64554ab2602ae6174e03d95"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_5</b></td></tr>
+<tr class="separator:af121c391d64554ab2602ae6174e03d95 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c901d77b89b7313d2b6918936635b6d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c901d77b89b7313d2b6918936635b6d"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>tiled</b></td></tr>
+<tr class="separator:a8c901d77b89b7313d2b6918936635b6d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34a7316dcf81648b6bf02a45db6bfb65 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34a7316dcf81648b6bf02a45db6bfb65"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>otype</b></td></tr>
+<tr class="separator:a34a7316dcf81648b6bf02a45db6bfb65 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5137915fc613f86173da699e3fc07cc5 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5137915fc613f86173da699e3fc07cc5"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_11</b></td></tr>
+<tr class="separator:a5137915fc613f86173da699e3fc07cc5 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6dee70ca9d545f8ff0d05cc9dc3123c5 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6dee70ca9d545f8ff0d05cc9dc3123c5"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dstnodata</b></td></tr>
+<tr class="separator:a6dee70ca9d545f8ff0d05cc9dc3123c5 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7090df769df333313a687a987792883c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7090df769df333313a687a987792883c"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_file</b></td></tr>
+<tr class="separator:a7090df769df333313a687a987792883c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a253fbc5b44941384321b7c58cf96cc65 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253fbc5b44941384321b7c58cf96cc65"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_3</b></td></tr>
+<tr class="separator:a253fbc5b44941384321b7c58cf96cc65 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56fc5cc3db81beb7a6d527557b5a197d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56fc5cc3db81beb7a6d527557b5a197d"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_4</b></td></tr>
+<tr class="separator:a56fc5cc3db81beb7a6d527557b5a197d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1c14de256d44c85dff296049ed3a2c4 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1c14de256d44c85dff296049ed3a2c4"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_5</b></td></tr>
+<tr class="separator:aa1c14de256d44c85dff296049ed3a2c4 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41f23b25032f2c3cda8f6493923a262b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f23b25032f2c3cda8f6493923a262b"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_4</b></td></tr>
+<tr class="separator:a41f23b25032f2c3cda8f6493923a262b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05a2b7e86c6eb260486ded962a789cf4 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05a2b7e86c6eb260486ded962a789cf4"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_24</b></td></tr>
+<tr class="separator:a05a2b7e86c6eb260486ded962a789cf4 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2f8779d650040be1ffaa36d852876c7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2f8779d650040be1ffaa36d852876c7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>commandLineEdit</b></td></tr>
+<tr class="separator:af2f8779d650040be1ffaa36d852876c7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04b9a0d777a586619a27b9c0856f67cd inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04b9a0d777a586619a27b9c0856f67cd"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_25</b></td></tr>
+<tr class="separator:a04b9a0d777a586619a27b9c0856f67cd inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98553b2cd47e2b9d117d678600bc4881 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98553b2cd47e2b9d117d678600bc4881"></a>
+QPlainTextEdit * </td><td class="memItemRight" valign="bottom"><b>consoleEdit</b></td></tr>
+<tr class="separator:a98553b2cd47e2b9d117d678600bc4881 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7b3fe6a3f100795153cd504ce0b86bf inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7b3fe6a3f100795153cd504ce0b86bf"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer_2</b></td></tr>
+<tr class="separator:af7b3fe6a3f100795153cd504ce0b86bf inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ee21d2c2bc000e7a8ba931bacfc5a69 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ee21d2c2bc000e7a8ba931bacfc5a69"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_2</b></td></tr>
+<tr class="separator:a9ee21d2c2bc000e7a8ba931bacfc5a69 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8285ba7a77c4d2649c9d338bb3288401 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8285ba7a77c4d2649c9d338bb3288401"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_Run</b></td></tr>
+<tr class="separator:a8285ba7a77c4d2649c9d338bb3288401 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae189b5a48fa6e6f4b6775f1f832afe9c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae189b5a48fa6e6f4b6775f1f832afe9c"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer</b></td></tr>
+<tr class="separator:ae189b5a48fa6e6f4b6775f1f832afe9c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18a1a9c96f3a40914574d293b6a652a9 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18a1a9c96f3a40914574d293b6a652a9"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_defaults</b></td></tr>
+<tr class="separator:a18a1a9c96f3a40914574d293b6a652a9 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a502a50d7dc22415f511336bdfb4318b9 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502a50d7dc22415f511336bdfb4318b9"></a>
+QMenuBar * </td><td class="memItemRight" valign="bottom"><b>menuBar</b></td></tr>
+<tr class="separator:a502a50d7dc22415f511336bdfb4318b9 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1663312349b8d12c8d108637bbbc856d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1663312349b8d12c8d108637bbbc856d"></a>
+QMenu * </td><td class="memItemRight" valign="bottom"><b>menuFile</b></td></tr>
+<tr class="separator:a1663312349b8d12c8d108637bbbc856d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abca26371605d7c5235fab5188d4bdcf7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abca26371605d7c5235fab5188d4bdcf7"></a>
+QToolBar * </td><td class="memItemRight" valign="bottom"><b>mainToolBar</b></td></tr>
+<tr class="separator:abca26371605d7c5235fab5188d4bdcf7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa919f3af6f2f526a70f1fa331f63724 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa919f3af6f2f526a70f1fa331f63724"></a>
+QStatusBar * </td><td class="memItemRight" valign="bottom"><b>statusBar</b></td></tr>
+<tr class="separator:afa919f3af6f2f526a70f1fa331f63724 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31435a8f54c77c0b475ec5fad844d449 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31435a8f54c77c0b475ec5fad844d449"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionInput</b></td></tr>
+<tr class="separator:a31435a8f54c77c0b475ec5fad844d449 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a986bbe5b2e5194ca4359bcf644a385ae inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a986bbe5b2e5194ca4359bcf644a385ae"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionOutput</b></td></tr>
+<tr class="separator:a986bbe5b2e5194ca4359bcf644a385ae inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad68c49f53c306e35cdb9bf6ecd4044ac inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad68c49f53c306e35cdb9bf6ecd4044ac"></a>
+QListWidget * </td><td class="memItemRight" valign="bottom"><b>listWidget_band</b></td></tr>
+<tr class="separator:ad68c49f53c306e35cdb9bf6ecd4044ac inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72cc3989b0102c6ae970a431e271bf08 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72cc3989b0102c6ae970a431e271bf08"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_16</b></td></tr>
+<tr class="separator:a72cc3989b0102c6ae970a431e271bf08 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31508f09b3c486787c83b94aab2d2564 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31508f09b3c486787c83b94aab2d2564"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton</b></td></tr>
+<tr class="separator:a31508f09b3c486787c83b94aab2d2564 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab01ef3bec5f958312898455ce66c7723 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab01ef3bec5f958312898455ce66c7723"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_9</b></td></tr>
+<tr class="separator:ab01ef3bec5f958312898455ce66c7723 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c53f7f2e3106a4225d5be295e1315ae inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c53f7f2e3106a4225d5be295e1315ae"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer</b></td></tr>
+<tr class="separator:a2c53f7f2e3106a4225d5be295e1315ae inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13a8029dca885a0a01ea02f528940fab inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13a8029dca885a0a01ea02f528940fab"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_8</b></td></tr>
+<tr class="separator:a13a8029dca885a0a01ea02f528940fab inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22505456c3a4a7c6de5270b57de2c80d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22505456c3a4a7c6de5270b57de2c80d"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>autoscale</b></td></tr>
+<tr class="separator:a22505456c3a4a7c6de5270b57de2c80d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8c611cdd69ea67faec07751c3b8b6e8 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8c611cdd69ea67faec07751c3b8b6e8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>offset</b></td></tr>
+<tr class="separator:ad8c611cdd69ea67faec07751c3b8b6e8 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39c33b001fc29ed0099bb8914fd91082 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39c33b001fc29ed0099bb8914fd91082"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>manual</b></td></tr>
+<tr class="separator:a39c33b001fc29ed0099bb8914fd91082 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2d7c1d984e76c0e28db04d9deb6ec64 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2d7c1d984e76c0e28db04d9deb6ec64"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>noscale</b></td></tr>
+<tr class="separator:ac2d7c1d984e76c0e28db04d9deb6ec64 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63919cdecc2e3eb912a7ffc81652adab inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63919cdecc2e3eb912a7ffc81652adab"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>scale</b></td></tr>
+<tr class="separator:a63919cdecc2e3eb912a7ffc81652adab inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adab70055ed97a7fda442dd160d86a886 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adab70055ed97a7fda442dd160d86a886"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>as_from</b></td></tr>
+<tr class="separator:adab70055ed97a7fda442dd160d86a886 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20f0df22fcdfef9fe9554f1d962d7b1f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20f0df22fcdfef9fe9554f1d962d7b1f"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>as_to</b></td></tr>
+<tr class="separator:a20f0df22fcdfef9fe9554f1d962d7b1f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99361df7cfa0c2bcc7edc18d8465bd8b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99361df7cfa0c2bcc7edc18d8465bd8b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_11</b></td></tr>
+<tr class="separator:a99361df7cfa0c2bcc7edc18d8465bd8b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab18937cd7bb632b9c8f9cd260a8294f1 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab18937cd7bb632b9c8f9cd260a8294f1"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_10</b></td></tr>
+<tr class="separator:ab18937cd7bb632b9c8f9cd260a8294f1 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5db9c132a93e3153c40d227f6edb7fbc inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5db9c132a93e3153c40d227f6edb7fbc"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nodata</b></td></tr>
+<tr class="separator:a5db9c132a93e3153c40d227f6edb7fbc inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae35e3adae2de50d8cd252c506e98ddc9 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae35e3adae2de50d8cd252c506e98ddc9"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_7</b></td></tr>
+<tr class="separator:ae35e3adae2de50d8cd252c506e98ddc9 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6fb1003e5e276a4014555669f7ae7bff inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fb1003e5e276a4014555669f7ae7bff"></a>
+QButtonGroup * </td><td class="memItemRight" valign="bottom"><b>buttonGroup</b></td></tr>
+<tr class="separator:a6fb1003e5e276a4014555669f7ae7bff inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa77983563a18cda5d8ba564d1600083e inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa77983563a18cda5d8ba564d1600083e"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionReference</b></td></tr>
+<tr class="separator:aa77983563a18cda5d8ba564d1600083e inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a512e66e9f4479ec227af409963880f1d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a512e66e9f4479ec227af409963880f1d"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionMask</b></td></tr>
+<tr class="separator:a512e66e9f4479ec227af409963880f1d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b18042273fd8aa43ae4af65441935e0 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b18042273fd8aa43ae4af65441935e0"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionColor_table</b></td></tr>
+<tr class="separator:a5b18042273fd8aa43ae4af65441935e0 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6356443dc067ef5164e2f4dc834e640b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6356443dc067ef5164e2f4dc834e640b"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>layoutWidget</b></td></tr>
+<tr class="separator:a6356443dc067ef5164e2f4dc834e640b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6897c356e2adde5d97027f8d26331357 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6897c356e2adde5d97027f8d26331357"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lclass</b></td></tr>
+<tr class="separator:a6897c356e2adde5d97027f8d26331357 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3f2ade02aa3aefff983b4b8db9d0e4a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3f2ade02aa3aefff983b4b8db9d0e4a"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>input</b></td></tr>
+<tr class="separator:af3f2ade02aa3aefff983b4b8db9d0e4a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4463b780f779d1073d0509831b31803 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4463b780f779d1073d0509831b31803"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>confusion</b></td></tr>
+<tr class="separator:af4463b780f779d1073d0509831b31803 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8417f8874fd5a3caa6b0e31a66df0d19 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8417f8874fd5a3caa6b0e31a66df0d19"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>mask</b></td></tr>
+<tr class="separator:a8417f8874fd5a3caa6b0e31a66df0d19 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2473f8d42df45ca53d95a61ffb8885d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2473f8d42df45ca53d95a61ffb8885d"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_mask</b></td></tr>
+<tr class="separator:af2473f8d42df45ca53d95a61ffb8885d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb84fc9a53c22baccd1b7015ae639c28 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb84fc9a53c22baccd1b7015ae639c28"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>msknodata</b></td></tr>
+<tr class="separator:abb84fc9a53c22baccd1b7015ae639c28 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba74df373b63053ef7f9765ae814d577 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba74df373b63053ef7f9765ae814d577"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_15</b></td></tr>
+<tr class="separator:aba74df373b63053ef7f9765ae814d577 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fc91cdea93e734b8ff54b4f45d91591 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fc91cdea93e734b8ff54b4f45d91591"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nclass</b></td></tr>
+<tr class="separator:a5fc91cdea93e734b8ff54b4f45d91591 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a80073e5017dba745c782bfe61209a7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a80073e5017dba745c782bfe61209a7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lref</b></td></tr>
+<tr class="separator:a2a80073e5017dba745c782bfe61209a7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6b649c212c78ef9bb66a108da7c50fd inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6b649c212c78ef9bb66a108da7c50fd"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_reference</b></td></tr>
+<tr class="separator:ae6b649c212c78ef9bb66a108da7c50fd inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff982475d8c004b4ca25d739438760ca inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff982475d8c004b4ca25d739438760ca"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:aff982475d8c004b4ca25d739438760ca inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8887c0c124789e7457e4f5fffef5680 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8887c0c124789e7457e4f5fffef5680"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_reference</b></td></tr>
+<tr class="separator:ab8887c0c124789e7457e4f5fffef5680 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a240c41f3553dbfbe7250c740a032da3e inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a240c41f3553dbfbe7250c740a032da3e"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>f</b></td></tr>
+<tr class="separator:a240c41f3553dbfbe7250c740a032da3e inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78b00a5bdda86ec7892a7d1e2e5ee87b inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78b00a5bdda86ec7892a7d1e2e5ee87b"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>widget</b></td></tr>
+<tr class="separator:a78b00a5bdda86ec7892a7d1e2e5ee87b inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94fb1c65fd7dacec12b5a47af58479a5 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94fb1c65fd7dacec12b5a47af58479a5"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>commandLinkButtonPrepareTable</b></td></tr>
+<tr class="separator:a94fb1c65fd7dacec12b5a47af58479a5 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61eb000c4b462e0380e46eded3a4c830 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61eb000c4b462e0380e46eded3a4c830"></a>
+QTableView * </td><td class="memItemRight" valign="bottom"><b>tableView_labels</b></td></tr>
+<tr class="separator:a61eb000c4b462e0380e46eded3a4c830 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0af2d7d014e5aaa05be04d2bd0c4d53d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0af2d7d014e5aaa05be04d2bd0c4d53d"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_6</b></td></tr>
+<tr class="separator:a0af2d7d014e5aaa05be04d2bd0c4d53d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7104d878681f568e492c5bd0f653157 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7104d878681f568e492c5bd0f653157"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout</b></td></tr>
+<tr class="separator:ae7104d878681f568e492c5bd0f653157 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abfe8db90f18bab5814359c7f3367baa0 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfe8db90f18bab5814359c7f3367baa0"></a>
+QPushButton * </td><td class="memItemRight" valign="bottom"><b>pushButton_run</b></td></tr>
+<tr class="separator:abfe8db90f18bab5814359c7f3367baa0 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f4a50315ae4629ea4ae5df781018699 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f4a50315ae4629ea4ae5df781018699"></a>
+QPushButton * </td><td class="memItemRight" valign="bottom"><b>pushButton_restore</b></td></tr>
+<tr class="separator:a8f4a50315ae4629ea4ae5df781018699 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b8cf9fae10935c6c8c2ad4f9ce09780 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b8cf9fae10935c6c8c2ad4f9ce09780"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionSample</b></td></tr>
+<tr class="separator:a8b8cf9fae10935c6c8c2ad4f9ce09780 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a197ed7a89b637eed613b793a945afdc7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a197ed7a89b637eed613b793a945afdc7"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_5</b></td></tr>
+<tr class="separator:a197ed7a89b637eed613b793a945afdc7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4fc4a01984f4958d08903a46ce7509a inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4fc4a01984f4958d08903a46ce7509a"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_3</b></td></tr>
+<tr class="separator:ae4fc4a01984f4958d08903a46ce7509a inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbd6c33eda93409d23853400a98dfc1f inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbd6c33eda93409d23853400a98dfc1f"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_4</b></td></tr>
+<tr class="separator:adbd6c33eda93409d23853400a98dfc1f inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46aefd5319c7da5010e6a94e54b971d7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46aefd5319c7da5010e6a94e54b971d7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>sample</b></td></tr>
+<tr class="separator:a46aefd5319c7da5010e6a94e54b971d7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0730ef2aea01c2cc23c1b14a46fd1f73 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0730ef2aea01c2cc23c1b14a46fd1f73"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_sample</b></td></tr>
+<tr class="separator:a0730ef2aea01c2cc23c1b14a46fd1f73 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaff3956ce218d4705eade6970756b0c7 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaff3956ce218d4705eade6970756b0c7"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>polygon</b></td></tr>
+<tr class="separator:aaff3956ce218d4705eade6970756b0c7 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0b057737b6ce6aafa0d6851dae71403 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0b057737b6ce6aafa0d6851dae71403"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_5</b></td></tr>
+<tr class="separator:aa0b057737b6ce6aafa0d6851dae71403 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cbbe6cb509a39748725e2fa7149621c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cbbe6cb509a39748725e2fa7149621c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>bname</b></td></tr>
+<tr class="separator:a0cbbe6cb509a39748725e2fa7149621c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae238700e73e3dd998804a028b823216d inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae238700e73e3dd998804a028b823216d"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>rule</b></td></tr>
+<tr class="separator:ae238700e73e3dd998804a028b823216d inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abff58f8857b2dce03c53d2e73c19fe44 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abff58f8857b2dce03c53d2e73c19fe44"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_createTable</b></td></tr>
+<tr class="separator:abff58f8857b2dce03c53d2e73c19fe44 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a241007acbe0ceabf194003e06b6d7dea inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241007acbe0ceabf194003e06b6d7dea"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>threshold</b></td></tr>
+<tr class="separator:a241007acbe0ceabf194003e06b6d7dea inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad0581e2d63087e1a0a41a4055b9bb9fa inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0581e2d63087e1a0a41a4055b9bb9fa"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cname</b></td></tr>
+<tr class="separator:ad0581e2d63087e1a0a41a4055b9bb9fa inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab49ec6265af01cb2efc6937271833edc inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab49ec6265af01cb2efc6937271833edc"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_6</b></td></tr>
+<tr class="separator:ab49ec6265af01cb2efc6937271833edc inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e5d2021459f39c979022c3b0631bf57 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e5d2021459f39c979022c3b0631bf57"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionTraining</b></td></tr>
+<tr class="separator:a4e5d2021459f39c979022c3b0631bf57 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4d1122633b0a9bef92c1c2dc5066561 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4d1122633b0a9bef92c1c2dc5066561"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_training</b></td></tr>
+<tr class="separator:aa4d1122633b0a9bef92c1c2dc5066561 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad78262d99bcc37fabdf3ddd623ab6976 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad78262d99bcc37fabdf3ddd623ab6976"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>training</b></td></tr>
+<tr class="separator:ad78262d99bcc37fabdf3ddd623ab6976 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff8ee25a1615f462b64639744df73993 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff8ee25a1615f462b64639744df73993"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>label</b></td></tr>
+<tr class="separator:aff8ee25a1615f462b64639744df73993 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a242883afffec0ee80fc73bb189e8f635 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a242883afffec0ee80fc73bb189e8f635"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>tln</b></td></tr>
+<tr class="separator:a242883afffec0ee80fc73bb189e8f635 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf69068faed214d9746111f34193b0cc inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf69068faed214d9746111f34193b0cc"></a>
+QCommandLinkButton * </td><td class="memItemRight" valign="bottom"><b>commandLinkButtonPrepareTable</b></td></tr>
+<tr class="separator:adf69068faed214d9746111f34193b0cc inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b94daa368f7d0045147e8881360eabc inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b94daa368f7d0045147e8881360eabc"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cv</b></td></tr>
+<tr class="separator:a0b94daa368f7d0045147e8881360eabc inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a205cd33937d5f5499057dfb40345d620 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a205cd33937d5f5499057dfb40345d620"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ccost</b></td></tr>
+<tr class="separator:a205cd33937d5f5499057dfb40345d620 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41242ff48a25ddf15e858868e0c2a553 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41242ff48a25ddf15e858868e0c2a553"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>svmtype</b></td></tr>
+<tr class="separator:a41242ff48a25ddf15e858868e0c2a553 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31bff91db266f21874b654b918c4cbf1 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31bff91db266f21874b654b918c4cbf1"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>gamma</b></td></tr>
+<tr class="separator:a31bff91db266f21874b654b918c4cbf1 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e011553af28c90d93097f6ceef83a5c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e011553af28c90d93097f6ceef83a5c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>coef0</b></td></tr>
+<tr class="separator:a8e011553af28c90d93097f6ceef83a5c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8d217f6ef19479d3d7b873bc61d002c inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8d217f6ef19479d3d7b873bc61d002c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nu</b></td></tr>
+<tr class="separator:ae8d217f6ef19479d3d7b873bc61d002c inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe5762e2bac6134dedb576a95efa45b2 inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe5762e2bac6134dedb576a95efa45b2"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>kd</b></td></tr>
+<tr class="separator:afe5762e2bac6134dedb576a95efa45b2 inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeda674e59c4c35b006a519df57e58afd inherit pub_attribs_classUi__MainWindow"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeda674e59c4c35b006a519df57e58afd"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>kerneltype</b></td></tr>
+<tr class="separator:aeda674e59c4c35b006a519df57e58afd inherit pub_attribs_classUi__MainWindow"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">702</a> of file <a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html">ui_mainwindow.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug/<a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html">ui_mainwindow.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classUi_1_1MainWindow__coll__graph.map b/doc/html/classUi_1_1MainWindow__coll__graph.map
new file mode 100644
index 0000000..8ce9c39
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="Ui::MainWindow" name="Ui::MainWindow">
+<area shape="rect" id="node2" href="$classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="28,5,144,32"/>
+</map>
diff --git a/doc/html/classUi_1_1MainWindow__coll__graph.md5 b/doc/html/classUi_1_1MainWindow__coll__graph.md5
new file mode 100644
index 0000000..274ebd9
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow__coll__graph.md5
@@ -0,0 +1 @@
+0ee01170730be0f29279620ebd50f876
\ No newline at end of file
diff --git a/doc/html/classUi_1_1MainWindow__coll__graph.png b/doc/html/classUi_1_1MainWindow__coll__graph.png
new file mode 100644
index 0000000..af2158a
Binary files /dev/null and b/doc/html/classUi_1_1MainWindow__coll__graph.png differ
diff --git a/doc/html/classUi_1_1MainWindow__inherit__graph.map b/doc/html/classUi_1_1MainWindow__inherit__graph.map
new file mode 100644
index 0000000..8ce9c39
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Ui::MainWindow" name="Ui::MainWindow">
+<area shape="rect" id="node2" href="$classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="28,5,144,32"/>
+</map>
diff --git a/doc/html/classUi_1_1MainWindow__inherit__graph.md5 b/doc/html/classUi_1_1MainWindow__inherit__graph.md5
new file mode 100644
index 0000000..274ebd9
--- /dev/null
+++ b/doc/html/classUi_1_1MainWindow__inherit__graph.md5
@@ -0,0 +1 @@
+0ee01170730be0f29279620ebd50f876
\ No newline at end of file
diff --git a/doc/html/classUi_1_1MainWindow__inherit__graph.png b/doc/html/classUi_1_1MainWindow__inherit__graph.png
new file mode 100644
index 0000000..af2158a
Binary files /dev/null and b/doc/html/classUi_1_1MainWindow__inherit__graph.png differ
diff --git a/doc/html/classUi__MainWindow-members.html b/doc/html/classUi__MainWindow-members.html
new file mode 100644
index 0000000..0acd357
--- /dev/null
+++ b/doc/html/classUi__MainWindow-members.html
@@ -0,0 +1,258 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Ui_MainWindow Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>a_srs</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionColor_table</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionExtent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionInput</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionInput_image</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionMask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionOutput</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionOutput_image</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionQuit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionReference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionSample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>actionSelection_Info_file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>actionTraining</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>as_from</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>as_to</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>autoscale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>bname</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>bndnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>buttonGroup</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cband</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ccost</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>centralWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cname</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>coef0</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>commandLineEdit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>commandLinkButtonPrepareTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>commandLinkButtonPrepareTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>compressed</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>confusion</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>consoleEdit</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>crule</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ct</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cv</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dstnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dy</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>f</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gamma</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gridLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gridLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gridLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>groupBox</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalLayout_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_10</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_11</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_15</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_7</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>horizontalSpacer_8</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>horizontalSpacer_9</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>interleaved</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kd</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>kerneltype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_10</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_11</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_12</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_13</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_14</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_15</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_16</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_17</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_18</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_19</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_20</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_21</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_22</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_23</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_24</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_25</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_7</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_8</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>label_9</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label_reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>layoutWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lclass</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>listWidget_band</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>listWidget_input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lref</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lrx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lry</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mainToolBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>manual</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>max</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>menuBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>menuFile</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>min</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>msknodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nclass</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>noscale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nu</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>offset</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>oformat</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>otype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>output</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>polygon</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushButton_restore</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushButton_run</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>retranslateUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>rule</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setupUi</b>(QMainWindow *MainWindow) (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>srcnodata</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>statusBar</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>svmtype</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tab</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tab_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tab_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tab_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tableView_labels</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tabWidget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>threshold</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tiled</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>tln</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_createTable</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_ct</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_defaults</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_extent</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_file</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_input</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_mask</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_output</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_reference</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_Run</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toolButton_sample</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toolButton_training</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>training</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ulx</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>uly</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_4</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalLayout_5</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalLayout_6</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalSpacer</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verticalSpacer_2</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verticalSpacer_3</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>widget</b> (defined in <a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a>)</td><td class="entry"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classUi__MainWindow.html b/doc/html/classUi__MainWindow.html
new file mode 100644
index 0000000..3825104
--- /dev/null
+++ b/doc/html/classUi__MainWindow.html
@@ -0,0 +1,647 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Ui_MainWindow Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="classUi__MainWindow-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Ui_MainWindow Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Ui_MainWindow:</div>
+<div class="dyncontent">
+<div class="center"><img src="classUi__MainWindow__inherit__graph.png" border="0" usemap="#Ui__MainWindow_inherit__map" alt="Inheritance graph"/></div>
+<map name="Ui__MainWindow_inherit__map" id="Ui__MainWindow_inherit__map">
+<area shape="rect" id="node2" href="classUi_1_1MainWindow.html" title="Ui::MainWindow" alt="" coords="27,80,145,107"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf4a0872c4c77d8f43a2ec66ed849b58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setupUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:acf4a0872c4c77d8f43a2ec66ed849b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097dd160c3534a204904cb374412c618"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a097dd160c3534a204904cb374412c618"></a>
+void </td><td class="memItemRight" valign="bottom"><b>retranslateUi</b> (QMainWindow *<a class="el" href="classMainWindow.html">MainWindow</a>)</td></tr>
+<tr class="separator:a097dd160c3534a204904cb374412c618"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:af2483b34f1656f3e57729ad834ddf677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2483b34f1656f3e57729ad834ddf677"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionInput_image</b></td></tr>
+<tr class="separator:af2483b34f1656f3e57729ad834ddf677"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29b62934c81c009fdf0d03a9ee63ce0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29b62934c81c009fdf0d03a9ee63ce0b"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionOutput_image</b></td></tr>
+<tr class="separator:a29b62934c81c009fdf0d03a9ee63ce0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af229024ef8f86d81e376205c1a5a9ee5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af229024ef8f86d81e376205c1a5a9ee5"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionQuit</b></td></tr>
+<tr class="separator:af229024ef8f86d81e376205c1a5a9ee5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77d713a73993a0942c43c083168f17e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77d713a73993a0942c43c083168f17e9"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionSelection_Info_file</b></td></tr>
+<tr class="separator:a77d713a73993a0942c43c083168f17e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa71af6efef796a61c728993c3a675636"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa71af6efef796a61c728993c3a675636"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionExtent</b></td></tr>
+<tr class="separator:aa71af6efef796a61c728993c3a675636"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6600dd3bdd3d55e535659e4a4096ea48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6600dd3bdd3d55e535659e4a4096ea48"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>centralWidget</b></td></tr>
+<tr class="separator:a6600dd3bdd3d55e535659e4a4096ea48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a649287f742c9a33b8444116dccb1b72b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a649287f742c9a33b8444116dccb1b72b"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout</b></td></tr>
+<tr class="separator:a649287f742c9a33b8444116dccb1b72b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13404ee3b30e38230383dd765a5eec4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13404ee3b30e38230383dd765a5eec4a"></a>
+QTabWidget * </td><td class="memItemRight" valign="bottom"><b>tabWidget</b></td></tr>
+<tr class="separator:a13404ee3b30e38230383dd765a5eec4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97e497a37904b5538bba9c218f40cb58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97e497a37904b5538bba9c218f40cb58"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab</b></td></tr>
+<tr class="separator:a97e497a37904b5538bba9c218f40cb58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbe60c634b3214ee76ff9e1fa70c7801"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe60c634b3214ee76ff9e1fa70c7801"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_2</b></td></tr>
+<tr class="separator:afbe60c634b3214ee76ff9e1fa70c7801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbbc615e662a726cd71cabd62c7d2a70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbbc615e662a726cd71cabd62c7d2a70"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_2</b></td></tr>
+<tr class="separator:acbbc615e662a726cd71cabd62c7d2a70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8441da46ea0343bc6ad8f05e2e1c270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8441da46ea0343bc6ad8f05e2e1c270"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_3</b></td></tr>
+<tr class="separator:ab8441da46ea0343bc6ad8f05e2e1c270"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca97445f66e25e0819038ec3c7b7c129"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca97445f66e25e0819038ec3c7b7c129"></a>
+QListWidget * </td><td class="memItemRight" valign="bottom"><b>listWidget_input</b></td></tr>
+<tr class="separator:aca97445f66e25e0819038ec3c7b7c129"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0ed1aaea955dfef1d84b92e2723769d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0ed1aaea955dfef1d84b92e2723769d"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label</b></td></tr>
+<tr class="separator:af0ed1aaea955dfef1d84b92e2723769d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade2b29a951ec97479a76b77481982472"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2b29a951ec97479a76b77481982472"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_input</b></td></tr>
+<tr class="separator:ade2b29a951ec97479a76b77481982472"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0244a06f306ce55b10f9d3cc97be18e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0244a06f306ce55b10f9d3cc97be18e8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lry</b></td></tr>
+<tr class="separator:a0244a06f306ce55b10f9d3cc97be18e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b4ef3f31d735e9d9e3a78b152c7a43b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4ef3f31d735e9d9e3a78b152c7a43b"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>uly</b></td></tr>
+<tr class="separator:a7b4ef3f31d735e9d9e3a78b152c7a43b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f5576686ce98bcc41bd1b1eca07e56a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f5576686ce98bcc41bd1b1eca07e56a"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_2</b></td></tr>
+<tr class="separator:a2f5576686ce98bcc41bd1b1eca07e56a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1662d5e0a54ac7f38c5ab5d991f4ce14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1662d5e0a54ac7f38c5ab5d991f4ce14"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_2</b></td></tr>
+<tr class="separator:a1662d5e0a54ac7f38c5ab5d991f4ce14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72b0851f6a34cfe6b9875edeac284d1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72b0851f6a34cfe6b9875edeac284d1f"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lrx</b></td></tr>
+<tr class="separator:a72b0851f6a34cfe6b9875edeac284d1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05c1a490d770856a4a3af1563e2c660a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05c1a490d770856a4a3af1563e2c660a"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ulx</b></td></tr>
+<tr class="separator:a05c1a490d770856a4a3af1563e2c660a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a953dcd0e658a0903339e2ef3c94d4e7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a953dcd0e658a0903339e2ef3c94d4e7e"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_4</b></td></tr>
+<tr class="separator:a953dcd0e658a0903339e2ef3c94d4e7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03b8709208e6996236604b2cde800390"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03b8709208e6996236604b2cde800390"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>extent</b></td></tr>
+<tr class="separator:a03b8709208e6996236604b2cde800390"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a53306da61a2245541d184a47245944cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53306da61a2245541d184a47245944cd"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_extent</b></td></tr>
+<tr class="separator:a53306da61a2245541d184a47245944cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e6564e567db2242a5ff37cff57bc1d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6564e567db2242a5ff37cff57bc1d4"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_2</b></td></tr>
+<tr class="separator:a1e6564e567db2242a5ff37cff57bc1d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87e310470e3a3ad29981f1166af9be7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87e310470e3a3ad29981f1166af9be7f"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_4</b></td></tr>
+<tr class="separator:a87e310470e3a3ad29981f1166af9be7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a986c0329937b0114c287180b96a6ff6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a986c0329937b0114c287180b96a6ff6b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer_3</b></td></tr>
+<tr class="separator:a986c0329937b0114c287180b96a6ff6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3da2273c5f6f94c4d49561cc860f97b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3da2273c5f6f94c4d49561cc860f97b"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>resample</b></td></tr>
+<tr class="separator:ae3da2273c5f6f94c4d49561cc860f97b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a318a53712b4ddbe8e627a9744d3a0a00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a318a53712b4ddbe8e627a9744d3a0a00"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_18</b></td></tr>
+<tr class="separator:a318a53712b4ddbe8e627a9744d3a0a00"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad058591c79a610b3cee046f63d1778e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad058591c79a610b3cee046f63d1778e"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_17</b></td></tr>
+<tr class="separator:aad058591c79a610b3cee046f63d1778e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b80df24ad136b865c5d89a20d5bb2ec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b80df24ad136b865c5d89a20d5bb2ec"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>crule</b></td></tr>
+<tr class="separator:a6b80df24ad136b865c5d89a20d5bb2ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ca10771e840725caeb3f43ee7d7858b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ca10771e840725caeb3f43ee7d7858b"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_19</b></td></tr>
+<tr class="separator:a8ca10771e840725caeb3f43ee7d7858b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1c6584a6a7b602d2b1b5a32db95eaa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1c6584a6a7b602d2b1b5a32db95eaa7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cband</b></td></tr>
+<tr class="separator:ab1c6584a6a7b602d2b1b5a32db95eaa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad396eaa8d855b13559c50e02164b8325"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad396eaa8d855b13559c50e02164b8325"></a>
+QGroupBox * </td><td class="memItemRight" valign="bottom"><b>groupBox</b></td></tr>
+<tr class="separator:ad396eaa8d855b13559c50e02164b8325"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a183b845e444a43e0be1cd9f5be22c359"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a183b845e444a43e0be1cd9f5be22c359"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_3</b></td></tr>
+<tr class="separator:a183b845e444a43e0be1cd9f5be22c359"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5512eae4640544a462d1973743e6532b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5512eae4640544a462d1973743e6532b"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_21</b></td></tr>
+<tr class="separator:a5512eae4640544a462d1973743e6532b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf0cc3cdcf78e05d41d5d80916bbf7ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf0cc3cdcf78e05d41d5d80916bbf7ce"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>srcnodata</b></td></tr>
+<tr class="separator:abf0cc3cdcf78e05d41d5d80916bbf7ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59690f12b04136e7cb2278d9de865e73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59690f12b04136e7cb2278d9de865e73"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_23</b></td></tr>
+<tr class="separator:a59690f12b04136e7cb2278d9de865e73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5535fb6244ecc9af33991a3309a93a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5535fb6244ecc9af33991a3309a93a0"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_22</b></td></tr>
+<tr class="separator:ac5535fb6244ecc9af33991a3309a93a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cb993e55f48a7ea284055d7d26d2ca8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cb993e55f48a7ea284055d7d26d2ca8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>min</b></td></tr>
+<tr class="separator:a7cb993e55f48a7ea284055d7d26d2ca8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff20afaa8f9943bea0f26a1e5b80a065"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff20afaa8f9943bea0f26a1e5b80a065"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>max</b></td></tr>
+<tr class="separator:aff20afaa8f9943bea0f26a1e5b80a065"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2812ef8517ae9d0f250a2d39569b08a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2812ef8517ae9d0f250a2d39569b08a7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_20</b></td></tr>
+<tr class="separator:a2812ef8517ae9d0f250a2d39569b08a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcb71699e34ea39e15ab52a210d82f43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcb71699e34ea39e15ab52a210d82f43"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>bndnodata</b></td></tr>
+<tr class="separator:abcb71699e34ea39e15ab52a210d82f43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4a217e81b9707b402a58b7e55ed81e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4a217e81b9707b402a58b7e55ed81e2"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_4</b></td></tr>
+<tr class="separator:ac4a217e81b9707b402a58b7e55ed81e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab70233e701808fd06001b2c59717d63b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab70233e701808fd06001b2c59717d63b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_5</b></td></tr>
+<tr class="separator:ab70233e701808fd06001b2c59717d63b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a449fab77f12d72a810b50ec1768adcaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a449fab77f12d72a810b50ec1768adcaa"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_3</b></td></tr>
+<tr class="separator:a449fab77f12d72a810b50ec1768adcaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0802f681bf63ded0edff4bc7c1a6e9d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0802f681bf63ded0edff4bc7c1a6e9d4"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_3</b></td></tr>
+<tr class="separator:a0802f681bf63ded0edff4bc7c1a6e9d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4586abe48f0aabf940b0dc2df3772ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4586abe48f0aabf940b0dc2df3772ed"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout</b></td></tr>
+<tr class="separator:ac4586abe48f0aabf940b0dc2df3772ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2f233a14d9b1c41ec685a9fe1c606b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2f233a14d9b1c41ec685a9fe1c606b7"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_6</b></td></tr>
+<tr class="separator:ab2f233a14d9b1c41ec685a9fe1c606b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9687c8357009cfcf28517fa276ea1918"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9687c8357009cfcf28517fa276ea1918"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_7</b></td></tr>
+<tr class="separator:a9687c8357009cfcf28517fa276ea1918"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85082b01c10e391194bc6e48c0d8cb28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85082b01c10e391194bc6e48c0d8cb28"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_14</b></td></tr>
+<tr class="separator:a85082b01c10e391194bc6e48c0d8cb28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24601dbd2cc80ac985454289af5ba4f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24601dbd2cc80ac985454289af5ba4f7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>file</b></td></tr>
+<tr class="separator:a24601dbd2cc80ac985454289af5ba4f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0130582ecf8dfbf621aa87f6d0d702f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0130582ecf8dfbf621aa87f6d0d702f7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_10</b></td></tr>
+<tr class="separator:a0130582ecf8dfbf621aa87f6d0d702f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29d5ce90df70e771627c460f7618444c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29d5ce90df70e771627c460f7618444c"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>oformat</b></td></tr>
+<tr class="separator:a29d5ce90df70e771627c460f7618444c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacb80f899e57d6b0ead98c016786181f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacb80f899e57d6b0ead98c016786181f"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>interleaved</b></td></tr>
+<tr class="separator:aacb80f899e57d6b0ead98c016786181f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbe5a2168615ca342d06286db75927bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe5a2168615ca342d06286db75927bc"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_9</b></td></tr>
+<tr class="separator:abbe5a2168615ca342d06286db75927bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a783887ea0ca8c4763cebe24749b26909"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783887ea0ca8c4763cebe24749b26909"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dx</b></td></tr>
+<tr class="separator:a783887ea0ca8c4763cebe24749b26909"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae1122bf5c5f6daf310a93072a5eb72a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae1122bf5c5f6daf310a93072a5eb72a"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_8</b></td></tr>
+<tr class="separator:aae1122bf5c5f6daf310a93072a5eb72a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c75bb276de75b3e98e7db39e4a9e190"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c75bb276de75b3e98e7db39e4a9e190"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_13</b></td></tr>
+<tr class="separator:a3c75bb276de75b3e98e7db39e4a9e190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8e8e32f6a5a0ce9327728cb0e29d8c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8e8e32f6a5a0ce9327728cb0e29d8c4"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_ct</b></td></tr>
+<tr class="separator:af8e8e32f6a5a0ce9327728cb0e29d8c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98ba6b67118efbc43442a8486bc0401f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98ba6b67118efbc43442a8486bc0401f"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>compressed</b></td></tr>
+<tr class="separator:a98ba6b67118efbc43442a8486bc0401f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1df694de9f13a0ef3efae2c9aa495464"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df694de9f13a0ef3efae2c9aa495464"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_12</b></td></tr>
+<tr class="separator:a1df694de9f13a0ef3efae2c9aa495464"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22df1f839ef6e572270af38e1041b466"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22df1f839ef6e572270af38e1041b466"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ct</b></td></tr>
+<tr class="separator:a22df1f839ef6e572270af38e1041b466"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abeaf6128b140b9fb7dd5323545c39aa6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeaf6128b140b9fb7dd5323545c39aa6"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>output</b></td></tr>
+<tr class="separator:abeaf6128b140b9fb7dd5323545c39aa6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae414e3be8e98c0fb2bd68eb04ba6a557"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae414e3be8e98c0fb2bd68eb04ba6a557"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_output</b></td></tr>
+<tr class="separator:ae414e3be8e98c0fb2bd68eb04ba6a557"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac10ed68694c23da02ddc0ceacd54ef01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac10ed68694c23da02ddc0ceacd54ef01"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_6</b></td></tr>
+<tr class="separator:ac10ed68694c23da02ddc0ceacd54ef01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae09ab268d64ef88053d9274a1db7d809"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae09ab268d64ef88053d9274a1db7d809"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>a_srs</b></td></tr>
+<tr class="separator:ae09ab268d64ef88053d9274a1db7d809"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe8180cf76469366b43fadd603c1b1f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe8180cf76469366b43fadd603c1b1f7"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_15</b></td></tr>
+<tr class="separator:afe8180cf76469366b43fadd603c1b1f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8792d3c1f86d599e980b8925b70de355"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8792d3c1f86d599e980b8925b70de355"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dy</b></td></tr>
+<tr class="separator:a8792d3c1f86d599e980b8925b70de355"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af121c391d64554ab2602ae6174e03d95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af121c391d64554ab2602ae6174e03d95"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_5</b></td></tr>
+<tr class="separator:af121c391d64554ab2602ae6174e03d95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c901d77b89b7313d2b6918936635b6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c901d77b89b7313d2b6918936635b6d"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>tiled</b></td></tr>
+<tr class="separator:a8c901d77b89b7313d2b6918936635b6d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34a7316dcf81648b6bf02a45db6bfb65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34a7316dcf81648b6bf02a45db6bfb65"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>otype</b></td></tr>
+<tr class="separator:a34a7316dcf81648b6bf02a45db6bfb65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5137915fc613f86173da699e3fc07cc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5137915fc613f86173da699e3fc07cc5"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_11</b></td></tr>
+<tr class="separator:a5137915fc613f86173da699e3fc07cc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6dee70ca9d545f8ff0d05cc9dc3123c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6dee70ca9d545f8ff0d05cc9dc3123c5"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>dstnodata</b></td></tr>
+<tr class="separator:a6dee70ca9d545f8ff0d05cc9dc3123c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7090df769df333313a687a987792883c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7090df769df333313a687a987792883c"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_file</b></td></tr>
+<tr class="separator:a7090df769df333313a687a987792883c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a253fbc5b44941384321b7c58cf96cc65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253fbc5b44941384321b7c58cf96cc65"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_3</b></td></tr>
+<tr class="separator:a253fbc5b44941384321b7c58cf96cc65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56fc5cc3db81beb7a6d527557b5a197d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56fc5cc3db81beb7a6d527557b5a197d"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>tab_4</b></td></tr>
+<tr class="separator:a56fc5cc3db81beb7a6d527557b5a197d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1c14de256d44c85dff296049ed3a2c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1c14de256d44c85dff296049ed3a2c4"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_5</b></td></tr>
+<tr class="separator:aa1c14de256d44c85dff296049ed3a2c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41f23b25032f2c3cda8f6493923a262b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f23b25032f2c3cda8f6493923a262b"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_4</b></td></tr>
+<tr class="separator:a41f23b25032f2c3cda8f6493923a262b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05a2b7e86c6eb260486ded962a789cf4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05a2b7e86c6eb260486ded962a789cf4"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_24</b></td></tr>
+<tr class="separator:a05a2b7e86c6eb260486ded962a789cf4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2f8779d650040be1ffaa36d852876c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2f8779d650040be1ffaa36d852876c7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>commandLineEdit</b></td></tr>
+<tr class="separator:af2f8779d650040be1ffaa36d852876c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04b9a0d777a586619a27b9c0856f67cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04b9a0d777a586619a27b9c0856f67cd"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_25</b></td></tr>
+<tr class="separator:a04b9a0d777a586619a27b9c0856f67cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98553b2cd47e2b9d117d678600bc4881"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98553b2cd47e2b9d117d678600bc4881"></a>
+QPlainTextEdit * </td><td class="memItemRight" valign="bottom"><b>consoleEdit</b></td></tr>
+<tr class="separator:a98553b2cd47e2b9d117d678600bc4881"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7b3fe6a3f100795153cd504ce0b86bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7b3fe6a3f100795153cd504ce0b86bf"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer_2</b></td></tr>
+<tr class="separator:af7b3fe6a3f100795153cd504ce0b86bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ee21d2c2bc000e7a8ba931bacfc5a69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ee21d2c2bc000e7a8ba931bacfc5a69"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_2</b></td></tr>
+<tr class="separator:a9ee21d2c2bc000e7a8ba931bacfc5a69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8285ba7a77c4d2649c9d338bb3288401"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8285ba7a77c4d2649c9d338bb3288401"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_Run</b></td></tr>
+<tr class="separator:a8285ba7a77c4d2649c9d338bb3288401"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae189b5a48fa6e6f4b6775f1f832afe9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae189b5a48fa6e6f4b6775f1f832afe9c"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer</b></td></tr>
+<tr class="separator:ae189b5a48fa6e6f4b6775f1f832afe9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18a1a9c96f3a40914574d293b6a652a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18a1a9c96f3a40914574d293b6a652a9"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_defaults</b></td></tr>
+<tr class="separator:a18a1a9c96f3a40914574d293b6a652a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a502a50d7dc22415f511336bdfb4318b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502a50d7dc22415f511336bdfb4318b9"></a>
+QMenuBar * </td><td class="memItemRight" valign="bottom"><b>menuBar</b></td></tr>
+<tr class="separator:a502a50d7dc22415f511336bdfb4318b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1663312349b8d12c8d108637bbbc856d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1663312349b8d12c8d108637bbbc856d"></a>
+QMenu * </td><td class="memItemRight" valign="bottom"><b>menuFile</b></td></tr>
+<tr class="separator:a1663312349b8d12c8d108637bbbc856d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abca26371605d7c5235fab5188d4bdcf7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abca26371605d7c5235fab5188d4bdcf7"></a>
+QToolBar * </td><td class="memItemRight" valign="bottom"><b>mainToolBar</b></td></tr>
+<tr class="separator:abca26371605d7c5235fab5188d4bdcf7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa919f3af6f2f526a70f1fa331f63724"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa919f3af6f2f526a70f1fa331f63724"></a>
+QStatusBar * </td><td class="memItemRight" valign="bottom"><b>statusBar</b></td></tr>
+<tr class="separator:afa919f3af6f2f526a70f1fa331f63724"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31435a8f54c77c0b475ec5fad844d449"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31435a8f54c77c0b475ec5fad844d449"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionInput</b></td></tr>
+<tr class="separator:a31435a8f54c77c0b475ec5fad844d449"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a986bbe5b2e5194ca4359bcf644a385ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a986bbe5b2e5194ca4359bcf644a385ae"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionOutput</b></td></tr>
+<tr class="separator:a986bbe5b2e5194ca4359bcf644a385ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad68c49f53c306e35cdb9bf6ecd4044ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad68c49f53c306e35cdb9bf6ecd4044ac"></a>
+QListWidget * </td><td class="memItemRight" valign="bottom"><b>listWidget_band</b></td></tr>
+<tr class="separator:ad68c49f53c306e35cdb9bf6ecd4044ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72cc3989b0102c6ae970a431e271bf08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72cc3989b0102c6ae970a431e271bf08"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_16</b></td></tr>
+<tr class="separator:a72cc3989b0102c6ae970a431e271bf08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31508f09b3c486787c83b94aab2d2564"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31508f09b3c486787c83b94aab2d2564"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton</b></td></tr>
+<tr class="separator:a31508f09b3c486787c83b94aab2d2564"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab01ef3bec5f958312898455ce66c7723"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab01ef3bec5f958312898455ce66c7723"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_9</b></td></tr>
+<tr class="separator:ab01ef3bec5f958312898455ce66c7723"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c53f7f2e3106a4225d5be295e1315ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c53f7f2e3106a4225d5be295e1315ae"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>verticalSpacer</b></td></tr>
+<tr class="separator:a2c53f7f2e3106a4225d5be295e1315ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13a8029dca885a0a01ea02f528940fab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13a8029dca885a0a01ea02f528940fab"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_8</b></td></tr>
+<tr class="separator:a13a8029dca885a0a01ea02f528940fab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22505456c3a4a7c6de5270b57de2c80d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22505456c3a4a7c6de5270b57de2c80d"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>autoscale</b></td></tr>
+<tr class="separator:a22505456c3a4a7c6de5270b57de2c80d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8c611cdd69ea67faec07751c3b8b6e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8c611cdd69ea67faec07751c3b8b6e8"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>offset</b></td></tr>
+<tr class="separator:ad8c611cdd69ea67faec07751c3b8b6e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39c33b001fc29ed0099bb8914fd91082"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39c33b001fc29ed0099bb8914fd91082"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>manual</b></td></tr>
+<tr class="separator:a39c33b001fc29ed0099bb8914fd91082"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2d7c1d984e76c0e28db04d9deb6ec64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2d7c1d984e76c0e28db04d9deb6ec64"></a>
+QRadioButton * </td><td class="memItemRight" valign="bottom"><b>noscale</b></td></tr>
+<tr class="separator:ac2d7c1d984e76c0e28db04d9deb6ec64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63919cdecc2e3eb912a7ffc81652adab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63919cdecc2e3eb912a7ffc81652adab"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>scale</b></td></tr>
+<tr class="separator:a63919cdecc2e3eb912a7ffc81652adab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adab70055ed97a7fda442dd160d86a886"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adab70055ed97a7fda442dd160d86a886"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>as_from</b></td></tr>
+<tr class="separator:adab70055ed97a7fda442dd160d86a886"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20f0df22fcdfef9fe9554f1d962d7b1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20f0df22fcdfef9fe9554f1d962d7b1f"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>as_to</b></td></tr>
+<tr class="separator:a20f0df22fcdfef9fe9554f1d962d7b1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99361df7cfa0c2bcc7edc18d8465bd8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99361df7cfa0c2bcc7edc18d8465bd8b"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_11</b></td></tr>
+<tr class="separator:a99361df7cfa0c2bcc7edc18d8465bd8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab18937cd7bb632b9c8f9cd260a8294f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab18937cd7bb632b9c8f9cd260a8294f1"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_10</b></td></tr>
+<tr class="separator:ab18937cd7bb632b9c8f9cd260a8294f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5db9c132a93e3153c40d227f6edb7fbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5db9c132a93e3153c40d227f6edb7fbc"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nodata</b></td></tr>
+<tr class="separator:a5db9c132a93e3153c40d227f6edb7fbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae35e3adae2de50d8cd252c506e98ddc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae35e3adae2de50d8cd252c506e98ddc9"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_7</b></td></tr>
+<tr class="separator:ae35e3adae2de50d8cd252c506e98ddc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6fb1003e5e276a4014555669f7ae7bff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fb1003e5e276a4014555669f7ae7bff"></a>
+QButtonGroup * </td><td class="memItemRight" valign="bottom"><b>buttonGroup</b></td></tr>
+<tr class="separator:a6fb1003e5e276a4014555669f7ae7bff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa77983563a18cda5d8ba564d1600083e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa77983563a18cda5d8ba564d1600083e"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionReference</b></td></tr>
+<tr class="separator:aa77983563a18cda5d8ba564d1600083e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a512e66e9f4479ec227af409963880f1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a512e66e9f4479ec227af409963880f1d"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionMask</b></td></tr>
+<tr class="separator:a512e66e9f4479ec227af409963880f1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b18042273fd8aa43ae4af65441935e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b18042273fd8aa43ae4af65441935e0"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionColor_table</b></td></tr>
+<tr class="separator:a5b18042273fd8aa43ae4af65441935e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6356443dc067ef5164e2f4dc834e640b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6356443dc067ef5164e2f4dc834e640b"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>layoutWidget</b></td></tr>
+<tr class="separator:a6356443dc067ef5164e2f4dc834e640b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6897c356e2adde5d97027f8d26331357"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6897c356e2adde5d97027f8d26331357"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lclass</b></td></tr>
+<tr class="separator:a6897c356e2adde5d97027f8d26331357"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3f2ade02aa3aefff983b4b8db9d0e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3f2ade02aa3aefff983b4b8db9d0e4a"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>input</b></td></tr>
+<tr class="separator:af3f2ade02aa3aefff983b4b8db9d0e4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4463b780f779d1073d0509831b31803"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4463b780f779d1073d0509831b31803"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>confusion</b></td></tr>
+<tr class="separator:af4463b780f779d1073d0509831b31803"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8417f8874fd5a3caa6b0e31a66df0d19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8417f8874fd5a3caa6b0e31a66df0d19"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>mask</b></td></tr>
+<tr class="separator:a8417f8874fd5a3caa6b0e31a66df0d19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2473f8d42df45ca53d95a61ffb8885d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2473f8d42df45ca53d95a61ffb8885d"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_mask</b></td></tr>
+<tr class="separator:af2473f8d42df45ca53d95a61ffb8885d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb84fc9a53c22baccd1b7015ae639c28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb84fc9a53c22baccd1b7015ae639c28"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>msknodata</b></td></tr>
+<tr class="separator:abb84fc9a53c22baccd1b7015ae639c28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba74df373b63053ef7f9765ae814d577"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba74df373b63053ef7f9765ae814d577"></a>
+QSpacerItem * </td><td class="memItemRight" valign="bottom"><b>horizontalSpacer_15</b></td></tr>
+<tr class="separator:aba74df373b63053ef7f9765ae814d577"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fc91cdea93e734b8ff54b4f45d91591"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fc91cdea93e734b8ff54b4f45d91591"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nclass</b></td></tr>
+<tr class="separator:a5fc91cdea93e734b8ff54b4f45d91591"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a80073e5017dba745c782bfe61209a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a80073e5017dba745c782bfe61209a7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>lref</b></td></tr>
+<tr class="separator:a2a80073e5017dba745c782bfe61209a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6b649c212c78ef9bb66a108da7c50fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6b649c212c78ef9bb66a108da7c50fd"></a>
+QLabel * </td><td class="memItemRight" valign="bottom"><b>label_reference</b></td></tr>
+<tr class="separator:ae6b649c212c78ef9bb66a108da7c50fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff982475d8c004b4ca25d739438760ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff982475d8c004b4ca25d739438760ca"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:aff982475d8c004b4ca25d739438760ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8887c0c124789e7457e4f5fffef5680"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8887c0c124789e7457e4f5fffef5680"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_reference</b></td></tr>
+<tr class="separator:ab8887c0c124789e7457e4f5fffef5680"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a240c41f3553dbfbe7250c740a032da3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a240c41f3553dbfbe7250c740a032da3e"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>f</b></td></tr>
+<tr class="separator:a240c41f3553dbfbe7250c740a032da3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78b00a5bdda86ec7892a7d1e2e5ee87b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78b00a5bdda86ec7892a7d1e2e5ee87b"></a>
+QWidget * </td><td class="memItemRight" valign="bottom"><b>widget</b></td></tr>
+<tr class="separator:a78b00a5bdda86ec7892a7d1e2e5ee87b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94fb1c65fd7dacec12b5a47af58479a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94fb1c65fd7dacec12b5a47af58479a5"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>commandLinkButtonPrepareTable</b></td></tr>
+<tr class="separator:a94fb1c65fd7dacec12b5a47af58479a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61eb000c4b462e0380e46eded3a4c830"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61eb000c4b462e0380e46eded3a4c830"></a>
+QTableView * </td><td class="memItemRight" valign="bottom"><b>tableView_labels</b></td></tr>
+<tr class="separator:a61eb000c4b462e0380e46eded3a4c830"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0af2d7d014e5aaa05be04d2bd0c4d53d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0af2d7d014e5aaa05be04d2bd0c4d53d"></a>
+QVBoxLayout * </td><td class="memItemRight" valign="bottom"><b>verticalLayout_6</b></td></tr>
+<tr class="separator:a0af2d7d014e5aaa05be04d2bd0c4d53d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7104d878681f568e492c5bd0f653157"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7104d878681f568e492c5bd0f653157"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout</b></td></tr>
+<tr class="separator:ae7104d878681f568e492c5bd0f653157"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abfe8db90f18bab5814359c7f3367baa0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfe8db90f18bab5814359c7f3367baa0"></a>
+QPushButton * </td><td class="memItemRight" valign="bottom"><b>pushButton_run</b></td></tr>
+<tr class="separator:abfe8db90f18bab5814359c7f3367baa0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f4a50315ae4629ea4ae5df781018699"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f4a50315ae4629ea4ae5df781018699"></a>
+QPushButton * </td><td class="memItemRight" valign="bottom"><b>pushButton_restore</b></td></tr>
+<tr class="separator:a8f4a50315ae4629ea4ae5df781018699"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b8cf9fae10935c6c8c2ad4f9ce09780"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b8cf9fae10935c6c8c2ad4f9ce09780"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionSample</b></td></tr>
+<tr class="separator:a8b8cf9fae10935c6c8c2ad4f9ce09780"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a197ed7a89b637eed613b793a945afdc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a197ed7a89b637eed613b793a945afdc7"></a>
+QGridLayout * </td><td class="memItemRight" valign="bottom"><b>gridLayout_5</b></td></tr>
+<tr class="separator:a197ed7a89b637eed613b793a945afdc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4fc4a01984f4958d08903a46ce7509a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4fc4a01984f4958d08903a46ce7509a"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_3</b></td></tr>
+<tr class="separator:ae4fc4a01984f4958d08903a46ce7509a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbd6c33eda93409d23853400a98dfc1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbd6c33eda93409d23853400a98dfc1f"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_4</b></td></tr>
+<tr class="separator:adbd6c33eda93409d23853400a98dfc1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46aefd5319c7da5010e6a94e54b971d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46aefd5319c7da5010e6a94e54b971d7"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>sample</b></td></tr>
+<tr class="separator:a46aefd5319c7da5010e6a94e54b971d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0730ef2aea01c2cc23c1b14a46fd1f73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0730ef2aea01c2cc23c1b14a46fd1f73"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_sample</b></td></tr>
+<tr class="separator:a0730ef2aea01c2cc23c1b14a46fd1f73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaff3956ce218d4705eade6970756b0c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaff3956ce218d4705eade6970756b0c7"></a>
+QCheckBox * </td><td class="memItemRight" valign="bottom"><b>polygon</b></td></tr>
+<tr class="separator:aaff3956ce218d4705eade6970756b0c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0b057737b6ce6aafa0d6851dae71403"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0b057737b6ce6aafa0d6851dae71403"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_5</b></td></tr>
+<tr class="separator:aa0b057737b6ce6aafa0d6851dae71403"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cbbe6cb509a39748725e2fa7149621c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cbbe6cb509a39748725e2fa7149621c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>bname</b></td></tr>
+<tr class="separator:a0cbbe6cb509a39748725e2fa7149621c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae238700e73e3dd998804a028b823216d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae238700e73e3dd998804a028b823216d"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>rule</b></td></tr>
+<tr class="separator:ae238700e73e3dd998804a028b823216d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abff58f8857b2dce03c53d2e73c19fe44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abff58f8857b2dce03c53d2e73c19fe44"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_createTable</b></td></tr>
+<tr class="separator:abff58f8857b2dce03c53d2e73c19fe44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a241007acbe0ceabf194003e06b6d7dea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241007acbe0ceabf194003e06b6d7dea"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>threshold</b></td></tr>
+<tr class="separator:a241007acbe0ceabf194003e06b6d7dea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad0581e2d63087e1a0a41a4055b9bb9fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0581e2d63087e1a0a41a4055b9bb9fa"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cname</b></td></tr>
+<tr class="separator:ad0581e2d63087e1a0a41a4055b9bb9fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab49ec6265af01cb2efc6937271833edc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab49ec6265af01cb2efc6937271833edc"></a>
+QHBoxLayout * </td><td class="memItemRight" valign="bottom"><b>horizontalLayout_6</b></td></tr>
+<tr class="separator:ab49ec6265af01cb2efc6937271833edc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e5d2021459f39c979022c3b0631bf57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e5d2021459f39c979022c3b0631bf57"></a>
+QAction * </td><td class="memItemRight" valign="bottom"><b>actionTraining</b></td></tr>
+<tr class="separator:a4e5d2021459f39c979022c3b0631bf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4d1122633b0a9bef92c1c2dc5066561"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4d1122633b0a9bef92c1c2dc5066561"></a>
+QToolButton * </td><td class="memItemRight" valign="bottom"><b>toolButton_training</b></td></tr>
+<tr class="separator:aa4d1122633b0a9bef92c1c2dc5066561"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad78262d99bcc37fabdf3ddd623ab6976"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad78262d99bcc37fabdf3ddd623ab6976"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>training</b></td></tr>
+<tr class="separator:ad78262d99bcc37fabdf3ddd623ab6976"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff8ee25a1615f462b64639744df73993"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff8ee25a1615f462b64639744df73993"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>label</b></td></tr>
+<tr class="separator:aff8ee25a1615f462b64639744df73993"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a242883afffec0ee80fc73bb189e8f635"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a242883afffec0ee80fc73bb189e8f635"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>tln</b></td></tr>
+<tr class="separator:a242883afffec0ee80fc73bb189e8f635"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf69068faed214d9746111f34193b0cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf69068faed214d9746111f34193b0cc"></a>
+QCommandLinkButton * </td><td class="memItemRight" valign="bottom"><b>commandLinkButtonPrepareTable</b></td></tr>
+<tr class="separator:adf69068faed214d9746111f34193b0cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b94daa368f7d0045147e8881360eabc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b94daa368f7d0045147e8881360eabc"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>cv</b></td></tr>
+<tr class="separator:a0b94daa368f7d0045147e8881360eabc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a205cd33937d5f5499057dfb40345d620"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a205cd33937d5f5499057dfb40345d620"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>ccost</b></td></tr>
+<tr class="separator:a205cd33937d5f5499057dfb40345d620"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41242ff48a25ddf15e858868e0c2a553"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41242ff48a25ddf15e858868e0c2a553"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>svmtype</b></td></tr>
+<tr class="separator:a41242ff48a25ddf15e858868e0c2a553"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31bff91db266f21874b654b918c4cbf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31bff91db266f21874b654b918c4cbf1"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>gamma</b></td></tr>
+<tr class="separator:a31bff91db266f21874b654b918c4cbf1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e011553af28c90d93097f6ceef83a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e011553af28c90d93097f6ceef83a5c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>coef0</b></td></tr>
+<tr class="separator:a8e011553af28c90d93097f6ceef83a5c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8d217f6ef19479d3d7b873bc61d002c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8d217f6ef19479d3d7b873bc61d002c"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>nu</b></td></tr>
+<tr class="separator:ae8d217f6ef19479d3d7b873bc61d002c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe5762e2bac6134dedb576a95efa45b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe5762e2bac6134dedb576a95efa45b2"></a>
+QLineEdit * </td><td class="memItemRight" valign="bottom"><b>kd</b></td></tr>
+<tr class="separator:afe5762e2bac6134dedb576a95efa45b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeda674e59c4c35b006a519df57e58afd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeda674e59c4c35b006a519df57e58afd"></a>
+QComboBox * </td><td class="memItemRight" valign="bottom"><b>kerneltype</b></td></tr>
+<tr class="separator:aeda674e59c4c35b006a519df57e58afd"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00039">39</a> of file <a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html">ui_mainwindow.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug/<a class="el" href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html">ui_mainwindow.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classUi__MainWindow__inherit__graph.map b/doc/html/classUi__MainWindow__inherit__graph.map
new file mode 100644
index 0000000..1449060
--- /dev/null
+++ b/doc/html/classUi__MainWindow__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Ui_MainWindow" name="Ui_MainWindow">
+<area shape="rect" id="node2" href="$classUi_1_1MainWindow.html" title="Ui::MainWindow" alt="" coords="27,80,145,107"/>
+</map>
diff --git a/doc/html/classUi__MainWindow__inherit__graph.md5 b/doc/html/classUi__MainWindow__inherit__graph.md5
new file mode 100644
index 0000000..9625686
--- /dev/null
+++ b/doc/html/classUi__MainWindow__inherit__graph.md5
@@ -0,0 +1 @@
+19a10cc2bdf62b763527c8e3d8362501
\ No newline at end of file
diff --git a/doc/html/classUi__MainWindow__inherit__graph.png b/doc/html/classUi__MainWindow__inherit__graph.png
new file mode 100644
index 0000000..c69c2ff
Binary files /dev/null and b/doc/html/classUi__MainWindow__inherit__graph.png differ
diff --git a/doc/html/classVector2d-members.html b/doc/html/classVector2d-members.html
new file mode 100644
index 0000000..a4255e5
--- /dev/null
+++ b/doc/html/classVector2d-members.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Vector2d< T > Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classVector2d.html">Vector2d< T ></a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymax</b>(int &x, int &y, double maxValue) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nCols</b>() const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nRows</b>() const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator+=</b>(const Vector2d< T > &v1) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<<</b> (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const Vector2d< T > &v1) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resize</b>(int nrow) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>resize</b>(int nrow, int ncol) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale</b>(const std::vector< double > &scaleVector, const std::vector< double > &offsetVector, Vector2d< T > &scaledOutput) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b>(const T lbound, const T ubound, std::vector< double > &scaleVector, std::vector< double > &offsetVector, Vector2d< T > &scaledOutput) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>selectCol</b>(int col, std::vector< T > &output) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>selectCol</b>(int col, T *output) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>selectCol</b>(int col) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>selectCols</b>(const std::list< int > &cols, Vector2d< T > &output) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>selectCols</b>(const std::list< int > &cols) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setMask</b>(const Vector2d< T > &mask, T msknodata, T nodata=0) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sort</b>(Vector2d< T > &output) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>sum</b>(const Vector2d< T > &v1, const Vector2d< T > &v2) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sum</b>() const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>transpose</b>(Vector2d< T > &output) const (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Vector2d</b>() (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Vector2d</b>(const Vector2d< T > &v1) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Vector2d</b>(int nrow) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Vector2d</b>(int nrow, int ncol) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Vector2d</b>(int nrow, int ncol, const T &value) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Vector2d</b>(const gsl_matrix *gsl_m) (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Vector2d</b>() (defined in <a class="el" href="classVector2d.html">Vector2d< T ></a>)</td><td class="entry"><a class="el" href="classVector2d.html">Vector2d< T ></a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classVector2d.html b/doc/html/classVector2d.html
new file mode 100644
index 0000000..80f35ff
--- /dev/null
+++ b/doc/html/classVector2d.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Vector2d< T > Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="classVector2d-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Vector2d< T > Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for Vector2d< T >:</div>
+<div class="dyncontent">
+<div class="center"><img src="classVector2d__inherit__graph.png" border="0" usemap="#Vector2d_3_01T_01_4_inherit__map" alt="Inheritance graph"/></div>
+<map name="Vector2d_3_01T_01_4_inherit__map" id="Vector2d_3_01T_01_4_inherit__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,6,163,47"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for Vector2d< T >:</div>
+<div class="dyncontent">
+<div class="center"><img src="classVector2d__coll__graph.png" border="0" usemap="#Vector2d_3_01T_01_4_coll__map" alt="Collaboration graph"/></div>
+<map name="Vector2d_3_01T_01_4_coll__map" id="Vector2d_3_01T_01_4_coll__map">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,97,163,138"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad6e5da56b0d0f6276a5dd80d94df5e78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6e5da56b0d0f6276a5dd80d94df5e78"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Vector2d</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &v1)</td></tr>
+<tr class="separator:ad6e5da56b0d0f6276a5dd80d94df5e78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cdba94a4fbabfa3eb81a0e8718f8e76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cdba94a4fbabfa3eb81a0e8718f8e76"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Vector2d</b> (int nrow)</td></tr>
+<tr class="separator:a0cdba94a4fbabfa3eb81a0e8718f8e76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d3bf7a30d84595d90fc4ad95d018062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d3bf7a30d84595d90fc4ad95d018062"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Vector2d</b> (int nrow, int ncol)</td></tr>
+<tr class="separator:a0d3bf7a30d84595d90fc4ad95d018062"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15de10c83b2dc1bccdda5f418c2b9bc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15de10c83b2dc1bccdda5f418c2b9bc1"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Vector2d</b> (int nrow, int ncol, const T &value)</td></tr>
+<tr class="separator:a15de10c83b2dc1bccdda5f418c2b9bc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a904c91f4d10e09f9de6d4ac199119361"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a904c91f4d10e09f9de6d4ac199119361"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Vector2d</b> (const gsl_matrix *gsl_m)</td></tr>
+<tr class="separator:a904c91f4d10e09f9de6d4ac199119361"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9910f01df22e7695c9c2a8b4d419d1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9910f01df22e7695c9c2a8b4d419d1f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>resize</b> (int nrow)</td></tr>
+<tr class="separator:ad9910f01df22e7695c9c2a8b4d419d1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbc3907d603ca05715b82341b3391a62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbc3907d603ca05715b82341b3391a62"></a>
+void </td><td class="memItemRight" valign="bottom"><b>resize</b> (int nrow, int ncol)</td></tr>
+<tr class="separator:acbc3907d603ca05715b82341b3391a62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8a54eb836e0558e2d90fe5bdb0a88ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8a54eb836e0558e2d90fe5bdb0a88ee"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nRows</b> () const </td></tr>
+<tr class="separator:ad8a54eb836e0558e2d90fe5bdb0a88ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9feda9afa01880fcdae44add8c65e4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9feda9afa01880fcdae44add8c65e4f"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nCols</b> () const </td></tr>
+<tr class="separator:ae9feda9afa01880fcdae44add8c65e4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59ca2a7a9a5055e67e34686d6ec30bfd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59ca2a7a9a5055e67e34686d6ec30bfd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>selectCol</b> (int col, std::vector< T > &output) const </td></tr>
+<tr class="separator:a59ca2a7a9a5055e67e34686d6ec30bfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae408e53af5308ab5dc38d6b879b8b02a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae408e53af5308ab5dc38d6b879b8b02a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>selectCol</b> (int col, T *output) const </td></tr>
+<tr class="separator:ae408e53af5308ab5dc38d6b879b8b02a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a540de622535543a86a500e3be6116ac3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a540de622535543a86a500e3be6116ac3"></a>
+std::vector< T > </td><td class="memItemRight" valign="bottom"><b>selectCol</b> (int col)</td></tr>
+<tr class="separator:a540de622535543a86a500e3be6116ac3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00236d64802ae9fc21a28b2c84b1cdca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00236d64802ae9fc21a28b2c84b1cdca"></a>
+void </td><td class="memItemRight" valign="bottom"><b>selectCols</b> (const std::list< int > &cols, <a class="el" href="classVector2d.html">Vector2d</a>< T > &output) const </td></tr>
+<tr class="separator:a00236d64802ae9fc21a28b2c84b1cdca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc7ce5a8ccfe0d59a3205944d49fcf26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc7ce5a8ccfe0d59a3205944d49fcf26"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setMask</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &mask, T msknodata, T nodata=0)</td></tr>
+<tr class="separator:adc7ce5a8ccfe0d59a3205944d49fcf26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67d0eec4207a21790b1e6cf7502599fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67d0eec4207a21790b1e6cf7502599fc"></a>
+void </td><td class="memItemRight" valign="bottom"><b>transpose</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &output) const </td></tr>
+<tr class="separator:a67d0eec4207a21790b1e6cf7502599fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a849dfaa84d10f86a310cbcf0b26041d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a849dfaa84d10f86a310cbcf0b26041d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>selectCols</b> (const std::list< int > &cols)</td></tr>
+<tr class="separator:a849dfaa84d10f86a310cbcf0b26041d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b596b1edcb7b67fe2f0a6ce6a040f48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b596b1edcb7b67fe2f0a6ce6a040f48"></a>
+void </td><td class="memItemRight" valign="bottom"><b>sort</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &output)</td></tr>
+<tr class="separator:a5b596b1edcb7b67fe2f0a6ce6a040f48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a079bf15b7edc0be1f77248fe7725ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a079bf15b7edc0be1f77248fe7725ed"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale</b> (const std::vector< double > &scaleVector, const std::vector< double > &offsetVector, <a class="el" href="classVector2d.html">Vector2d</a>< T > &scaledOutput)</td></tr>
+<tr class="separator:a6a079bf15b7edc0be1f77248fe7725ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a32e7da74628919b9b915ef84a1a92d0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32e7da74628919b9b915ef84a1a92d0e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>scale</b> (const T lbound, const T ubound, std::vector< double > &scaleVector, std::vector< double > &offsetVector, <a class="el" href="classVector2d.html">Vector2d</a>< T > &scaledOutput)</td></tr>
+<tr class="separator:a32e7da74628919b9b915ef84a1a92d0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59d5245259004aed62837955f95d07f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d5245259004aed62837955f95d07f7"></a>
+<a class="el" href="classVector2d.html">Vector2d</a>< T > </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &v1)</td></tr>
+<tr class="separator:a59d5245259004aed62837955f95d07f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0f72cd2adef62afd964ea7215bc9a1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0f72cd2adef62afd964ea7215bc9a1b"></a>
+<a class="el" href="classVector2d.html">Vector2d</a>< T > </td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &v1)</td></tr>
+<tr class="separator:ac0f72cd2adef62afd964ea7215bc9a1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab97fc80f2c6059113de3faa050881648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab97fc80f2c6059113de3faa050881648"></a>
+<a class="el" href="classVector2d.html">Vector2d</a>< T > </td><td class="memItemRight" valign="bottom"><b>sum</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &v1, const <a class="el" href="classVector2d.html">Vector2d</a>< T > &v2) const </td></tr>
+<tr class="separator:ab97fc80f2c6059113de3faa050881648"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac470ad3c9faba413fb5af772a232842f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac470ad3c9faba413fb5af772a232842f"></a>
+T </td><td class="memItemRight" valign="bottom"><b>mymax</b> (int &x, int &y, double maxValue) const </td></tr>
+<tr class="separator:ac470ad3c9faba413fb5af772a232842f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05010d4cf35a5f073a95f10e9752ff54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05010d4cf35a5f073a95f10e9752ff54"></a>
+T </td><td class="memItemRight" valign="bottom"><b>sum</b> () const </td></tr>
+<tr class="separator:a05010d4cf35a5f073a95f10e9752ff54"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:affc960302c465d2a943ff84dab704dd7"><td class="memTemplParams" colspan="2"><a class="anchor" id="affc960302c465d2a943ff84dab704dd7"></a>
+template<class T1 > </td></tr>
+<tr class="memitem:affc960302c465d2a943ff84dab704dd7"><td class="memTemplItemLeft" align="right" valign="top">std::ostream & </td><td class="memTemplItemRight" valign="bottom"><b>operator<<</b> (std::ostream &os, const <a class="el" href="classVector2d.html">Vector2d</a>< T1 > &v)</td></tr>
+<tr class="separator:affc960302c465d2a943ff84dab704dd7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<class T><br/>
+class Vector2d< T ></h3>
+
+
+<p>Definition at line <a class="el" href="Vector2d_8h_source.html#l00031">31</a> of file <a class="el" href="Vector2d_8h_source.html">Vector2d.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="Vector2d_8h_source.html">Vector2d.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classVector2d__coll__graph.map b/doc/html/classVector2d__coll__graph.map
new file mode 100644
index 0000000..96c460b
--- /dev/null
+++ b/doc/html/classVector2d__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="Vector2d< T >" name="Vector2d< T >">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,97,163,138"/>
+</map>
diff --git a/doc/html/classVector2d__coll__graph.md5 b/doc/html/classVector2d__coll__graph.md5
new file mode 100644
index 0000000..18094d7
--- /dev/null
+++ b/doc/html/classVector2d__coll__graph.md5
@@ -0,0 +1 @@
+c9cd762b7b49852773a75f82f00f6e5e
\ No newline at end of file
diff --git a/doc/html/classVector2d__coll__graph.png b/doc/html/classVector2d__coll__graph.png
new file mode 100644
index 0000000..d4e26c0
Binary files /dev/null and b/doc/html/classVector2d__coll__graph.png differ
diff --git a/doc/html/classVector2d__inherit__graph.map b/doc/html/classVector2d__inherit__graph.map
new file mode 100644
index 0000000..cb1f793
--- /dev/null
+++ b/doc/html/classVector2d__inherit__graph.map
@@ -0,0 +1,3 @@
+<map id="Vector2d< T >" name="Vector2d< T >">
+<area shape="rect" id="node2" title="STL class. " alt="" coords="5,6,163,47"/>
+</map>
diff --git a/doc/html/classVector2d__inherit__graph.md5 b/doc/html/classVector2d__inherit__graph.md5
new file mode 100644
index 0000000..5cf468f
--- /dev/null
+++ b/doc/html/classVector2d__inherit__graph.md5
@@ -0,0 +1 @@
+b03ef4d1bc2ca4abd7e897b9222b2b71
\ No newline at end of file
diff --git a/doc/html/classVector2d__inherit__graph.png b/doc/html/classVector2d__inherit__graph.png
new file mode 100644
index 0000000..ddeeb49
Binary files /dev/null and b/doc/html/classVector2d__inherit__graph.png differ
diff --git a/doc/html/classconfusionmatrix_1_1ConfusionMatrix-members.html b/doc/html/classconfusionmatrix_1_1ConfusionMatrix-members.html
new file mode 100644
index 0000000..3bf78f8
--- /dev/null
+++ b/doc/html/classconfusionmatrix_1_1ConfusionMatrix-members.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>confusionmatrix</b></li><li class="navelem"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">confusionmatrix::ConfusionMatrix Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearResults</b>() (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConfusionMatrix</b>() (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConfusionMatrix</b>(short nclass) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConfusionMatrix</b>(const std::vector< std::string > &classNames) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConfusionMatrix</b>(const ConfusionMatrix &cm) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getClass</b>(int iclass) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getClassIndex</b>(std::string className) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getClassNames</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFormat</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFormat</b>(const std::string theFormat) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>incrementResult</b>(const std::string &theRef, const std::string &theClass, double theIncrement) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>kappa</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nClasses</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nClassified</b>(const std::string &theRef) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nReference</b>(const std::string &theRef) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nReference</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>oa</b>(double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>oa_pct</b>(double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator*</b>(double weight) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator*=</b>(double weight) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator+</b>(const ConfusionMatrix &cm) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator+=</b>(const ConfusionMatrix &cm) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<<</b> (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const ConfusionMatrix &cm) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pa</b>(const std::string &theClass, double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pa_pct</b>(const std::string &theClass, double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushBackClassName</b>(const std::string &className, bool doSort=false) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>reportSE95</b>(bool doReport) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resize</b>(short nclass) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setClassNames</b>(const std::vector< std::string > &classNames, bool doSort=false) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setFormat</b>(const CM_FORMAT &theFormat) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setFormat</b>(const std::string theFormat) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setResult</b>(const std::string &theRef, const std::string &theClass, double theResult) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setResults</b>(const Vector2d< double > &theResults) (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>sortClassNames</b>() (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ua</b>(const std::string &theClass, double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ua_pct</b>(const std::string &theClass, double *se95=NULL) const (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~ConfusionMatrix</b>() (defined in <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a>)</td><td class="entry"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classconfusionmatrix_1_1ConfusionMatrix.html b/doc/html/classconfusionmatrix_1_1ConfusionMatrix.html
new file mode 100644
index 0000000..7932abd
--- /dev/null
+++ b/doc/html/classconfusionmatrix_1_1ConfusionMatrix.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: confusionmatrix::ConfusionMatrix Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>confusionmatrix</b></li><li class="navelem"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="classconfusionmatrix_1_1ConfusionMatrix-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">confusionmatrix::ConfusionMatrix Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab1269c3f819f9836571608b4bbfe24e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1269c3f819f9836571608b4bbfe24e7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ConfusionMatrix</b> (short nclass)</td></tr>
+<tr class="separator:ab1269c3f819f9836571608b4bbfe24e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3efe9834a2bd53adce8c209f5f30e30b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3efe9834a2bd53adce8c209f5f30e30b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ConfusionMatrix</b> (const std::vector< std::string > &classNames)</td></tr>
+<tr class="separator:a3efe9834a2bd53adce8c209f5f30e30b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2cfa17975269f77b157caf725cf74622"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cfa17975269f77b157caf725cf74622"></a>
+ </td><td class="memItemRight" valign="bottom"><b>ConfusionMatrix</b> (const <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</td></tr>
+<tr class="separator:a2cfa17975269f77b157caf725cf74622"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83c0c6ee85b956b0766e4a3d2f7d824c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83c0c6ee85b956b0766e4a3d2f7d824c"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</td></tr>
+<tr class="separator:a83c0c6ee85b956b0766e4a3d2f7d824c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adfbe39631d71d739e376f3af88ab6451"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfbe39631d71d739e376f3af88ab6451"></a>
+short </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:adfbe39631d71d739e376f3af88ab6451"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a017a0e146054d0e5aba639405ec31af6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a017a0e146054d0e5aba639405ec31af6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>resize</b> (short nclass)</td></tr>
+<tr class="separator:a017a0e146054d0e5aba639405ec31af6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67c7762cefc98ddb5f5e103e3470362e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67c7762cefc98ddb5f5e103e3470362e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setClassNames</b> (const std::vector< std::string > &classNames, bool doSort=false)</td></tr>
+<tr class="separator:a67c7762cefc98ddb5f5e103e3470362e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3ce72179b48938d4d8525ed77747121"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3ce72179b48938d4d8525ed77747121"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushBackClassName</b> (const std::string &className, bool doSort=false)</td></tr>
+<tr class="separator:aa3ce72179b48938d4d8525ed77747121"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d0712ecab35ae233d8a1905523d5dac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d0712ecab35ae233d8a1905523d5dac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setResults</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< double > &theResults)</td></tr>
+<tr class="separator:a4d0712ecab35ae233d8a1905523d5dac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d4fb5dd418c8f4c3b32a6f39763692e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d4fb5dd418c8f4c3b32a6f39763692e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setResult</b> (const std::string &theRef, const std::string &theClass, double theResult)</td></tr>
+<tr class="separator:a0d4fb5dd418c8f4c3b32a6f39763692e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba257f91546617ab5e796ed79c7d6e15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba257f91546617ab5e796ed79c7d6e15"></a>
+void </td><td class="memItemRight" valign="bottom"><b>incrementResult</b> (const std::string &theRef, const std::string &theClass, double theIncrement)</td></tr>
+<tr class="separator:aba257f91546617ab5e796ed79c7d6e15"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37a58de6bf3add5149bcb593c7ab6191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37a58de6bf3add5149bcb593c7ab6191"></a>
+void </td><td class="memItemRight" valign="bottom"><b>clearResults</b> ()</td></tr>
+<tr class="separator:a37a58de6bf3add5149bcb593c7ab6191"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f4d55c2e20fff10fcad9206f6728894"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f4d55c2e20fff10fcad9206f6728894"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nReference</b> (const std::string &theRef) const </td></tr>
+<tr class="separator:a6f4d55c2e20fff10fcad9206f6728894"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa04a169253e3d3993f29216bbe7a858b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa04a169253e3d3993f29216bbe7a858b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nReference</b> () const </td></tr>
+<tr class="separator:aa04a169253e3d3993f29216bbe7a858b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23976c9da223df88b0918c166311f9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23976c9da223df88b0918c166311f9e1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nClassified</b> (const std::string &theRef) const </td></tr>
+<tr class="separator:a23976c9da223df88b0918c166311f9e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abba4db46ffeddcb44859442e1fdea97b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abba4db46ffeddcb44859442e1fdea97b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nClasses</b> () const </td></tr>
+<tr class="separator:abba4db46ffeddcb44859442e1fdea97b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3cb8d987ffa0bf95f0f394de45493cd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3cb8d987ffa0bf95f0f394de45493cd6"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>getClass</b> (int iclass) const </td></tr>
+<tr class="separator:a3cb8d987ffa0bf95f0f394de45493cd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7bcf5117a063ba5aebc755562d55176a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bcf5117a063ba5aebc755562d55176a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>getClassIndex</b> (std::string className) const </td></tr>
+<tr class="separator:a7bcf5117a063ba5aebc755562d55176a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85578ae0e4fda0998b254cc181a4d917"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85578ae0e4fda0998b254cc181a4d917"></a>
+std::vector< std::string > </td><td class="memItemRight" valign="bottom"><b>getClassNames</b> () const </td></tr>
+<tr class="separator:a85578ae0e4fda0998b254cc181a4d917"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a32831df41495f36f52e44a23d1867bc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32831df41495f36f52e44a23d1867bc5"></a>
+double </td><td class="memItemRight" valign="bottom"><b>pa</b> (const std::string &theClass, double *se95=NULL) const </td></tr>
+<tr class="separator:a32831df41495f36f52e44a23d1867bc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d1f330f74938292d4f9f3faa46b7a7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d1f330f74938292d4f9f3faa46b7a7f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>ua</b> (const std::string &theClass, double *se95=NULL) const </td></tr>
+<tr class="separator:a2d1f330f74938292d4f9f3faa46b7a7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a760c21f66b0f06dac49c1f4eb4b474af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a760c21f66b0f06dac49c1f4eb4b474af"></a>
+double </td><td class="memItemRight" valign="bottom"><b>oa</b> (double *se95=NULL) const </td></tr>
+<tr class="separator:a760c21f66b0f06dac49c1f4eb4b474af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a791e2a197d06b151ae3427c99cd49037"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a791e2a197d06b151ae3427c99cd49037"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pa_pct</b> (const std::string &theClass, double *se95=NULL) const </td></tr>
+<tr class="separator:a791e2a197d06b151ae3427c99cd49037"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96d467b1726f6c63928bf29b0ee3d872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96d467b1726f6c63928bf29b0ee3d872"></a>
+int </td><td class="memItemRight" valign="bottom"><b>ua_pct</b> (const std::string &theClass, double *se95=NULL) const </td></tr>
+<tr class="separator:a96d467b1726f6c63928bf29b0ee3d872"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a150790f717201afc3fa3680b6550eabb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a150790f717201afc3fa3680b6550eabb"></a>
+int </td><td class="memItemRight" valign="bottom"><b>oa_pct</b> (double *se95=NULL) const </td></tr>
+<tr class="separator:a150790f717201afc3fa3680b6550eabb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a118e79c376947955367958c95eec4a60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a118e79c376947955367958c95eec4a60"></a>
+double </td><td class="memItemRight" valign="bottom"><b>kappa</b> () const </td></tr>
+<tr class="separator:a118e79c376947955367958c95eec4a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0227c96d8877211f19355a2c71b10103"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0227c96d8877211f19355a2c71b10103"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> & </td><td class="memItemRight" valign="bottom"><b>operator*=</b> (double weight)</td></tr>
+<tr class="separator:a0227c96d8877211f19355a2c71b10103"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a035fa3debf9d5c61a28d1a0466ce587a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a035fa3debf9d5c61a28d1a0466ce587a"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> </td><td class="memItemRight" valign="bottom"><b>operator*</b> (double weight)</td></tr>
+<tr class="separator:a035fa3debf9d5c61a28d1a0466ce587a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8fbb06ed89d53a2e353bf0f928e4fcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8fbb06ed89d53a2e353bf0f928e4fcf"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> & </td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</td></tr>
+<tr class="separator:aa8fbb06ed89d53a2e353bf0f928e4fcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4be5b222027a9957c970a3d5b1acbed6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4be5b222027a9957c970a3d5b1acbed6"></a>
+<a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> </td><td class="memItemRight" valign="bottom"><b>operator+</b> (const <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</td></tr>
+<tr class="separator:a4be5b222027a9957c970a3d5b1acbed6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a520d6ac9453f8a36c2d6723db4c2de1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a520d6ac9453f8a36c2d6723db4c2de1a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>sortClassNames</b> ()</td></tr>
+<tr class="separator:a520d6ac9453f8a36c2d6723db4c2de1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22462ce80ebde79a9f60df29e9efb0ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22462ce80ebde79a9f60df29e9efb0ac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reportSE95</b> (bool doReport)</td></tr>
+<tr class="separator:a22462ce80ebde79a9f60df29e9efb0ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3859439b13fdb2cb3a0043d75201dd81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3859439b13fdb2cb3a0043d75201dd81"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFormat</b> (const CM_FORMAT &theFormat)</td></tr>
+<tr class="separator:a3859439b13fdb2cb3a0043d75201dd81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adebdf79b2bf111f966b0246c8edae801"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adebdf79b2bf111f966b0246c8edae801"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setFormat</b> (const std::string theFormat)</td></tr>
+<tr class="separator:adebdf79b2bf111f966b0246c8edae801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21a6a7b2c2a63906c2978c8f3093983d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21a6a7b2c2a63906c2978c8f3093983d"></a>
+CM_FORMAT </td><td class="memItemRight" valign="bottom"><b>getFormat</b> () const </td></tr>
+<tr class="separator:a21a6a7b2c2a63906c2978c8f3093983d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a66a860ee1452f2e9eca498213ec963da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66a860ee1452f2e9eca498213ec963da"></a>
+static const CM_FORMAT </td><td class="memItemRight" valign="bottom"><b>getFormat</b> (const std::string theFormat)</td></tr>
+<tr class="separator:a66a860ee1452f2e9eca498213ec963da"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ab52faa28a7502d56df6481344ee7a263"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab52faa28a7502d56df6481344ee7a263"></a>
+std::ostream & </td><td class="memItemRight" valign="bottom"><b>operator<<</b> (std::ostream &os, const <a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> &cm)</td></tr>
+<tr class="separator:ab52faa28a7502d56df6481344ee7a263"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ConfusionMatrix_8h_source.html#l00032">32</a> of file <a class="el" href="ConfusionMatrix_8h_source.html">ConfusionMatrix.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="ConfusionMatrix_8h_source.html">ConfusionMatrix.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="ConfusionMatrix_8cc_source.html">ConfusionMatrix.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classes.html b/doc/html/classes.html
new file mode 100644
index 0000000..368836b
--- /dev/null
+++ b/doc/html/classes.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li class="current"><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_K">K</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> |& [...]
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> B </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classFileReaderAscii.html">FileReaderAscii</a> </td><td valign="top"><a class="el" href="classMainWindow.html">MainWindow</a> </td><td rowspan="2" valign="bottom"><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> U </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">pkfilter_spectral</a> (qgis.pkfilter_spectral) </td></tr>
+<tr><td valign="top"><a class="el" href="classFileReaderLas.html">FileReaderLas</a> </td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> O </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">pkfilterdem</a> (qgis.pkfilterdem) </td></tr>
+<tr><td valign="top"><a class="el" href="classBadConversion.html">BadConversion</a> </td><td valign="top"><a class="el" href="classfilter_1_1Filter.html">Filter</a> (filter) </td><td valign="top"><a class="el" href="classUi__MainWindow.html">Ui_MainWindow</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">pkgetmask</a> (qgis.pkgetmask) </td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> C </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classfilter2d_1_1Filter2d.html">Filter2d</a> (filter2d) </td><td valign="top"><a class="el" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a> </td><td rowspan="2" valign="bottom"><a name="letter_V"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> V </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">pklas2img</a> (qgis.pklas2img) </td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> I </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classOptFactory.html">OptFactory</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">pkreclass</a> (qgis.pkreclass) </td></tr>
+<tr><td valign="top"><a class="el" href="classCache.html">Cache</a> </td><td valign="top"><a class="el" href="classOptionpk.html">Optionpk</a> </td><td valign="top"><a class="el" href="classVector2d.html">Vector2d</a> </td><td valign="top"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">pksetmask</a> (qgis.pksetmask) </td></tr>
+<tr><td valign="top"><a class="el" href="classCompare__IndexValue.html">Compare_IndexValue</a> </td><td valign="top"><a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> </td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> d </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">pksvm</a> (qgis.pksvm) </td></tr>
+<tr><td valign="top"><a class="el" href="classCompare__PosValue.html">Compare_PosValue</a> </td><td valign="top"><a class="el" href="classImgReaderOgr.html">ImgReaderOgr</a> </td><td valign="top"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">pktoolsAlgorithm</a> (qgis.pktoolsAlgorithm) </td></tr>
+<tr><td valign="top"><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html">ConfusionMatrix</a> (confusionmatrix) </td><td valign="top"><a class="el" href="classimgregression_1_1ImgRegression.html">ImgRegression</a> (imgregression) </td><td valign="top"><a class="el" href="structPosValue.html">PosValue</a> </td><td valign="top"><a class="el" href="structdecision__function.html">decision_function</a> </td><td v [...]
+<tr><td valign="top"><a class="el" href="classCostFactory.html">CostFactory</a> </td><td valign="top"><a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> </td><td valign="top"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">ProcessingPktoolsPlugin</a> (qgis.ProcessingPktoolsPlugin) </td><td rowspan="2" valign="bottom"><a name="letter_n"></a><table border="0" cellspacing="0" cellpadding [...]
+</td><td valign="top"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">pktoolsUtils</a> (qgis.pktoolsUtils) </td></tr>
+<tr><td valign="top"><a class="el" href="classCostFactoryANN.html">CostFactoryANN</a> </td><td valign="top"><a class="el" href="classImgWriterOgr.html">ImgWriterOgr</a> </td><td rowspan="2" valign="bottom"><a name="letter_Q"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> Q </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> s </div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="classCostFactorySVM.html">CostFactorySVM</a> </td><td valign="top"><a class="el" href="classIncrease__IndexValue.html">Increase_IndexValue</a> </td><td valign="top"><a class="el" href="classFANN_1_1neural__net.html">neural_net</a> (FANN) </td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> D </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classIncrease__PosValue.html">Increase_PosValue</a> </td><td valign="top"><a class="el" href="classQMatrix.html">QMatrix</a> </td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> p </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structsvm__model.html">svm_model</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structIndexValue.html">IndexValue</a> </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structsvm__node.html">svm_node</a> </td></tr>
+<tr><td valign="top"><a class="el" href="classDataModel.html">DataModel</a> </td><td rowspan="2" valign="bottom"><a name="letter_K"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> K </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">pkcomposite</a> (qgis.pkcomposite) </td><td valign="top"><a class="el" href="structsvm__parameter.html">svm_parameter</a> </td></tr>
+<tr><td valign="top"><a class="el" href="classDecrease__IndexValue.html">Decrease_IndexValue</a> </td><td valign="top"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">pkcrop</a> (qgis.pkcrop) </td><td valign="top"><a class="el" href="structsvm__problem.html">svm_problem</a> </td></tr>
+<tr><td valign="top"><a class="el" href="classDecrease__PosValue.html">Decrease_PosValue</a> </td><td valign="top"><a class="el" href="classKernel.html">Kernel</a> </td><td valign="top"><a class="el" href="classSolver.html">Solver</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">pkdiff_accuracy</a> (qgis.pkdiff_accuracy) </td><td rowspan="2" valign="bottom"><a name="le [...]
+</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> E </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> L </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classSolver__NU.html">Solver_NU</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">pkextract</a> (qgis.pkextract) </td></tr>
+<tr><td valign="top"><a class="el" href="classstatfactory_1_1StatFactory.html">StatFactory</a> (statfactory) </td><td valign="top"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">pkextract_grid</a> (qgis.pkextract_grid) </td><td valign="top"><a class="el" href="classFANN_1_1training__data.html">training_data</a> (FANN) </td></tr>
+<tr><td valign="top"><a class="el" href="classEgcs.html">Egcs</a> </td><td valign="top"><a class="el" href="classLastReturnFilter.html">LastReturnFilter</a> </td><td valign="top"><a class="el" href="classSVC__Q.html">SVC_Q</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">pkextract_random</a> (qgis.pkextract_random) </td><td></td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> F </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> M </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classSVR__Q.html">SVR_Q</a> </td><td valign="top"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">pkfilter_spatial</a> (qgis.pkfilter_spatial) </td><td></td></tr>
+<tr><td></td><td></td><td></td></tr>
+<tr><td valign="top"><a class="el" href="classFeatureSelector.html">FeatureSelector</a> </td><td valign="top"><a class="el" href="classUi_1_1MainWindow.html">MainWindow</a> (Ui) </td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_K">K</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> |& [...]
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classfilter2d_1_1Filter2d-members.html b/doc/html/classfilter2d_1_1Filter2d-members.html
new file mode 100644
index 0000000..3761daf
--- /dev/null
+++ b/doc/html/classfilter2d_1_1Filter2d-members.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>filter2d</b></li><li class="navelem"><a class="el" href="classfilter2d_1_1Filter2d.html">Filter2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">filter2d::Filter2d Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>doit</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dim, short down=1, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>doit</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dimX, int dimY, short down=1, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>doit</b>(const Vector2d< T1 > &inputVector, Vector2d< T2 > &outputVector, const std::string &method, int dimX, int dimY, short down=1, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dsm2dtm_nesw</b>(const Vector2d< T > &inputDSM, Vector2d< T > &outputMask, double hThreshold, int nlimit, int dim=3) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dsm2dtm_nwse</b>(const Vector2d< T > &inputDSM, Vector2d< T > &outputMask, double hThreshold, int nlimit, int dim=3) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dsm2dtm_senw</b>(const Vector2d< T > &inputDSM, Vector2d< T > &outputMask, double hThreshold, int nlimit, int dim=3) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dsm2dtm_swne</b>(const Vector2d< T > &inputDSM, Vector2d< T > &outputMask, double hThreshold, int nlimit, int dim=3) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwt_texture</b>(const std::string &inputFilename, const std::string &outputFilename, int dim, int scale, int down=1, int iband=0, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtCut</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family, double cut, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtCut</b>(Vector2d< T > &data, const std::string &wavelet_type, int family, double cut) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtForward</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtForward</b>(Vector2d< T > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtInverse</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtInverse</b>(Vector2d< T > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const ImgReaderGdal &input, ImgWriterGdal &output, bool absolute=false, bool normalize=false, bool noData=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(const Vector2d< T1 > &inputVector, Vector2d< T2 > &outputVector) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Filter2d</b>(void) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Filter2d</b>(const Vector2d< double > &taps) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFilterType</b>(const std::string filterType) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getResampleType</b>(const std::string resampleType) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>linearFeature</b>(const Vector2d< float > &input, std::vector< Vector2d< float > > &output, float angle=361, float angleStep=1, float maxDistance=0, float eps=0, bool l1=true, bool a1=true, bool l2=true, bool a2=true, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>linearFeature</b>(const ImgReaderGdal &input, ImgWriterGdal &output, float angle=361, float angleStep=1, float maxDistance=0, float eps=0, bool l1=true, bool a1=true, bool l2=true, bool a2=true, int band=0, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>majorVoting</b>(const std::string &inputFilename, const std::string &outputFilename, int dim=0, const std::vector< int > &prior=std::vector< int >()) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>median</b>(const std::string &inputFilename, const std::string &outputFilename, int dim, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>morphology</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dimX, int dimY, const std::vector< double > &angle, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>morphology</b>(const Vector2d< T > &input, Vector2d< T > &output, const std::string &method, int dimX, int dimY, bool disc=false, double hThreshold=0) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mrf</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dimX, int dimY, double beta, bool eightConnectivity=true, short down=1, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mrf</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dimX, int dimY, Vector2d< double > beta, bool eightConnectivity=true, short down=1, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushClass</b>(short theClass=1) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushNoDataValue</b>(double noDataValue=0) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushThreshold</b>(double theThreshold) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setClasses</b>(const std::vector< short > &theClasses) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTaps</b>(const Vector2d< double > &taps) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setThresholds</b>(const std::vector< double > &theThresholds) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>shadowDsm</b>(const Vector2d< T > &input, Vector2d< T > &output, double sza, double saa, double pixelSize, short shadowFlag=1) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>shadowDsm</b>(const ImgReaderGdal &input, ImgWriterGdal &output, double sza, double saa, double pixelSize, short shadowFlag=1) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>shift</b>(const ImgReaderGdal &input, ImgWriterGdal &output, double offsetX=0, double offsetY=0, double randomSigma=0, RESAMPLE resample=BILINEAR, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>shift</b>(const Vector2d< T > &input, Vector2d< T > &output, double offsetX=0, double offsetY=0, double randomSigma=0, RESAMPLE resample=NEAR, bool verbose=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dim) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smooth</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dimX, int dimY) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(const Vector2d< T1 > &inputVector, Vector2d< T2 > &outputVector, int dim) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smooth</b>(const Vector2d< T1 > &inputVector, Vector2d< T2 > &outputVector, int dimX, int dimY) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smoothNoData</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dim) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smoothNoData</b>(const ImgReaderGdal &input, ImgWriterGdal &output, int dimX, int dimY) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>var</b>(const std::string &inputFilename, const std::string &outputFilename, int dim, bool disc=false) (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Filter2d</b>() (defined in <a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a>)</td><td class="entry"><a class="el" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classfilter2d_1_1Filter2d.html b/doc/html/classfilter2d_1_1Filter2d.html
new file mode 100644
index 0000000..e6e057c
--- /dev/null
+++ b/doc/html/classfilter2d_1_1Filter2d.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: filter2d::Filter2d Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>filter2d</b></li><li class="navelem"><a class="el" href="classfilter2d_1_1Filter2d.html">Filter2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classfilter2d_1_1Filter2d-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">filter2d::Filter2d Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a131543045a8e5f3a72f6e0480403d950"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a131543045a8e5f3a72f6e0480403d950"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Filter2d</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< double > &taps)</td></tr>
+<tr class="separator:a131543045a8e5f3a72f6e0480403d950"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bd02704fc97e0b84aa21628d34d2e5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bd02704fc97e0b84aa21628d34d2e5c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setTaps</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< double > &taps)</td></tr>
+<tr class="separator:a1bd02704fc97e0b84aa21628d34d2e5c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacdfd1192acfb68db8e12abea3a0f1db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacdfd1192acfb68db8e12abea3a0f1db"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushClass</b> (short theClass=1)</td></tr>
+<tr class="separator:aacdfd1192acfb68db8e12abea3a0f1db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aadb1732c6679c0fd9aa25ddcef0bb619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadb1732c6679c0fd9aa25ddcef0bb619"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushNoDataValue</b> (double noDataValue=0)</td></tr>
+<tr class="separator:aadb1732c6679c0fd9aa25ddcef0bb619"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6992a84ba7786a6a935d294371f56e98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6992a84ba7786a6a935d294371f56e98"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushThreshold</b> (double theThreshold)</td></tr>
+<tr class="separator:a6992a84ba7786a6a935d294371f56e98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3883fc01cadbb4fd1068a0b5610d2d58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3883fc01cadbb4fd1068a0b5610d2d58"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setThresholds</b> (const std::vector< double > &theThresholds)</td></tr>
+<tr class="separator:a3883fc01cadbb4fd1068a0b5610d2d58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abab716bcd2007c97ef656b5bc37e5f5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abab716bcd2007c97ef656b5bc37e5f5b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setClasses</b> (const std::vector< short > &theClasses)</td></tr>
+<tr class="separator:abab716bcd2007c97ef656b5bc37e5f5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f23d9e3d7a832551aa085c9910510c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f23d9e3d7a832551aa085c9910510c1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, bool absolute=false, bool normalize=false, bool noData=false)</td></tr>
+<tr class="separator:a0f23d9e3d7a832551aa085c9910510c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57c077cc29781b92c00ac6b2b512d1e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57c077cc29781b92c00ac6b2b512d1e8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dim)</td></tr>
+<tr class="separator:a57c077cc29781b92c00ac6b2b512d1e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7658957ea23dc150addf3370e132ea1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7658957ea23dc150addf3370e132ea1c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dimX, int dimY)</td></tr>
+<tr class="separator:a7658957ea23dc150addf3370e132ea1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ec36f06ee746dd6d590ba51815eac39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ec36f06ee746dd6d590ba51815eac39"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smoothNoData</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dim)</td></tr>
+<tr class="separator:a4ec36f06ee746dd6d590ba51815eac39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ef1f173bfec32a2ebccab2555e90f34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ef1f173bfec32a2ebccab2555e90f34"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smoothNoData</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dimX, int dimY)</td></tr>
+<tr class="separator:a2ef1f173bfec32a2ebccab2555e90f34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acce166cc43e50b26a84ace40bc0c30a8"><td class="memTemplParams" colspan="2"><a class="anchor" id="acce166cc43e50b26a84ace40bc0c30a8"></a>
+template<class T1 , class T2 > </td></tr>
+<tr class="memitem:acce166cc43e50b26a84ace40bc0c30a8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T1 > &inputVector, <a class="el" href="classVector2d.html">Vector2d</a>< T2 > &outputVector)</td></tr>
+<tr class="separator:acce166cc43e50b26a84ace40bc0c30a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1db9422ce9bbe73da4c54535e2b7c787"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1db9422ce9bbe73da4c54535e2b7c787"></a>
+template<class T1 , class T2 > </td></tr>
+<tr class="memitem:a1db9422ce9bbe73da4c54535e2b7c787"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T1 > &inputVector, <a class="el" href="classVector2d.html">Vector2d</a>< T2 > &outputVector, int dim)</td></tr>
+<tr class="separator:a1db9422ce9bbe73da4c54535e2b7c787"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a600cb9605638319790d4ff0c8e4664d5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a600cb9605638319790d4ff0c8e4664d5"></a>
+template<class T1 , class T2 > </td></tr>
+<tr class="memitem:a600cb9605638319790d4ff0c8e4664d5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T1 > &inputVector, <a class="el" href="classVector2d.html">Vector2d</a>< T2 > &outputVector, int dimX, int dimY)</td></tr>
+<tr class="separator:a600cb9605638319790d4ff0c8e4664d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63915d876aa412888bdad9d981db5f37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63915d876aa412888bdad9d981db5f37"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtForward</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:a63915d876aa412888bdad9d981db5f37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a56f55ffdf966c8275b7f381a842769"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a56f55ffdf966c8275b7f381a842769"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtInverse</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:a6a56f55ffdf966c8275b7f381a842769"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cdcf5a4455afc0a482e549150a51f6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cdcf5a4455afc0a482e549150a51f6a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCut</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family, double cut, bool verbose=false)</td></tr>
+<tr class="separator:a0cdcf5a4455afc0a482e549150a51f6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afcb0f7a46a01d905b6c1f0ffda9204e2"><td class="memTemplParams" colspan="2"><a class="anchor" id="afcb0f7a46a01d905b6c1f0ffda9204e2"></a>
+template<class T > </td></tr>
+<tr class="memitem:afcb0f7a46a01d905b6c1f0ffda9204e2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>dwtForward</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:afcb0f7a46a01d905b6c1f0ffda9204e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46fdbf3fce9bf8c599fd58d1a7c4ff09"><td class="memTemplParams" colspan="2"><a class="anchor" id="a46fdbf3fce9bf8c599fd58d1a7c4ff09"></a>
+template<class T > </td></tr>
+<tr class="memitem:a46fdbf3fce9bf8c599fd58d1a7c4ff09"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>dwtInverse</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:a46fdbf3fce9bf8c599fd58d1a7c4ff09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36331862a4422386ec256a57412d3188"><td class="memTemplParams" colspan="2"><a class="anchor" id="a36331862a4422386ec256a57412d3188"></a>
+template<class T > </td></tr>
+<tr class="memitem:a36331862a4422386ec256a57412d3188"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>dwtCut</b> (<a class="el" href="classVector2d.html">Vector2d</a>< T > &data, const std::string &wavelet_type, int family, double cut)</td></tr>
+<tr class="separator:a36331862a4422386ec256a57412d3188"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6189d4397a473bfb95d020e3c96eed23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6189d4397a473bfb95d020e3c96eed23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>majorVoting</b> (const std::string &inputFilename, const std::string &outputFilename, int dim=0, const std::vector< int > &prior=std::vector< int >())</td></tr>
+<tr class="separator:a6189d4397a473bfb95d020e3c96eed23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a124e2fd7a6b4e44cd9a72fa320aea65b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a124e2fd7a6b4e44cd9a72fa320aea65b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>doit</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dim, short down=1, bool disc=false)</td></tr>
+<tr class="separator:a124e2fd7a6b4e44cd9a72fa320aea65b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa31d589a11b7fddfd5abe2ba8fe5abfd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa31d589a11b7fddfd5abe2ba8fe5abfd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>doit</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dimX, int dimY, short down=1, bool disc=false)</td></tr>
+<tr class="separator:aa31d589a11b7fddfd5abe2ba8fe5abfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad54b30ffc295392b23a074e81958d157"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad54b30ffc295392b23a074e81958d157"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrf</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dimX, int dimY, double beta, bool eightConnectivity=true, short down=1, bool verbose=false)</td></tr>
+<tr class="separator:ad54b30ffc295392b23a074e81958d157"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17ad7b69b6cdac05bf33a0dc21482a48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17ad7b69b6cdac05bf33a0dc21482a48"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrf</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, int dimX, int dimY, <a class="el" href="classVector2d.html">Vector2d</a>< double > beta, bool eightConnectivity=true, short down=1, bool verbose=false)</td></tr>
+<tr class="separator:a17ad7b69b6cdac05bf33a0dc21482a48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac71f07d4a37cb61cf567d7550ed535e7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac71f07d4a37cb61cf567d7550ed535e7"></a>
+template<class T1 , class T2 > </td></tr>
+<tr class="memitem:ac71f07d4a37cb61cf567d7550ed535e7"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>doit</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T1 > &inputVector, <a class="el" href="classVector2d.html">Vector2d</a>< T2 > &outputVector, const std::string &method, int dimX, int dimY, short down=1, bool disc=false)</td></tr>
+<tr class="separator:ac71f07d4a37cb61cf567d7550ed535e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd834d3c429d670a2557f7e8664c221e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd834d3c429d670a2557f7e8664c221e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>median</b> (const std::string &inputFilename, const std::string &outputFilename, int dim, bool disc=false)</td></tr>
+<tr class="separator:abd834d3c429d670a2557f7e8664c221e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a79fb6c9ed5aaf0f5e78ed0ac3a49eab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79fb6c9ed5aaf0f5e78ed0ac3a49eab6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>var</b> (const std::string &inputFilename, const std::string &outputFilename, int dim, bool disc=false)</td></tr>
+<tr class="separator:a79fb6c9ed5aaf0f5e78ed0ac3a49eab6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a257f0c4f047c12566d2b4f2918ebed21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a257f0c4f047c12566d2b4f2918ebed21"></a>
+void </td><td class="memItemRight" valign="bottom"><b>morphology</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dimX, int dimY, const std::vector< double > &angle, bool disc=false)</td></tr>
+<tr class="separator:a257f0c4f047c12566d2b4f2918ebed21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d0ab0db5e3f05409697dd3742b3975f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9d0ab0db5e3f05409697dd3742b3975f"></a>
+template<class T > </td></tr>
+<tr class="memitem:a9d0ab0db5e3f05409697dd3742b3975f"><td class="memTemplItemLeft" align="right" valign="top">unsigned long int </td><td class="memTemplItemRight" valign="bottom"><b>morphology</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, <a class="el" href="classVector2d.html">Vector2d</a>< T > &output, const std::string &method, int dimX, int dimY, bool disc=false, double hThreshold=0)</td></tr>
+<tr class="separator:a9d0ab0db5e3f05409697dd3742b3975f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18bd72e87cb7887a4079662536c6f3d8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a18bd72e87cb7887a4079662536c6f3d8"></a>
+template<class T > </td></tr>
+<tr class="memitem:a18bd72e87cb7887a4079662536c6f3d8"><td class="memTemplItemLeft" align="right" valign="top">unsigned long int </td><td class="memTemplItemRight" valign="bottom"><b>dsm2dtm_nwse</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &inputDSM, <a class="el" href="classVector2d.html">Vector2d</a>< T > &outputMask, double hThreshold, int nlimit, int dim=3)</td></tr>
+<tr class="separator:a18bd72e87cb7887a4079662536c6f3d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57b05be4d0dc51b4cbe3064d47019abd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a57b05be4d0dc51b4cbe3064d47019abd"></a>
+template<class T > </td></tr>
+<tr class="memitem:a57b05be4d0dc51b4cbe3064d47019abd"><td class="memTemplItemLeft" align="right" valign="top">unsigned long int </td><td class="memTemplItemRight" valign="bottom"><b>dsm2dtm_nesw</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &inputDSM, <a class="el" href="classVector2d.html">Vector2d</a>< T > &outputMask, double hThreshold, int nlimit, int dim=3)</td></tr>
+<tr class="separator:a57b05be4d0dc51b4cbe3064d47019abd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a555f00bd4eedfa6696b5ec752eebe433"><td class="memTemplParams" colspan="2"><a class="anchor" id="a555f00bd4eedfa6696b5ec752eebe433"></a>
+template<class T > </td></tr>
+<tr class="memitem:a555f00bd4eedfa6696b5ec752eebe433"><td class="memTemplItemLeft" align="right" valign="top">unsigned long int </td><td class="memTemplItemRight" valign="bottom"><b>dsm2dtm_senw</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &inputDSM, <a class="el" href="classVector2d.html">Vector2d</a>< T > &outputMask, double hThreshold, int nlimit, int dim=3)</td></tr>
+<tr class="separator:a555f00bd4eedfa6696b5ec752eebe433"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b164b47ea23deaf48528dcfa0a42570"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4b164b47ea23deaf48528dcfa0a42570"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4b164b47ea23deaf48528dcfa0a42570"><td class="memTemplItemLeft" align="right" valign="top">unsigned long int </td><td class="memTemplItemRight" valign="bottom"><b>dsm2dtm_swne</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &inputDSM, <a class="el" href="classVector2d.html">Vector2d</a>< T > &outputMask, double hThreshold, int nlimit, int dim=3)</td></tr>
+<tr class="separator:a4b164b47ea23deaf48528dcfa0a42570"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7bd4a40ecc62e0a31eb467c888ffe495"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7bd4a40ecc62e0a31eb467c888ffe495"></a>
+template<class T > </td></tr>
+<tr class="memitem:a7bd4a40ecc62e0a31eb467c888ffe495"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>shadowDsm</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, <a class="el" href="classVector2d.html">Vector2d</a>< T > &output, double sza, double saa, double pixelSize, short shadowFlag=1)</td></tr>
+<tr class="separator:a7bd4a40ecc62e0a31eb467c888ffe495"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae6491a2c1f18a67d1e0851fe5e72cb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae6491a2c1f18a67d1e0851fe5e72cb2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>shadowDsm</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, double sza, double saa, double pixelSize, short shadowFlag=1)</td></tr>
+<tr class="separator:aae6491a2c1f18a67d1e0851fe5e72cb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bd4aefaeae0d473b6e50a5bd568637e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bd4aefaeae0d473b6e50a5bd568637e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwt_texture</b> (const std::string &inputFilename, const std::string &outputFilename, int dim, int scale, int down=1, int iband=0, bool verbose=false)</td></tr>
+<tr class="separator:a0bd4aefaeae0d473b6e50a5bd568637e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b8c3874f45db5276c25390f8e193172"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b8c3874f45db5276c25390f8e193172"></a>
+void </td><td class="memItemRight" valign="bottom"><b>shift</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, double offsetX=0, double offsetY=0, double randomSigma=0, RESAMPLE resample=BILINEAR, bool verbose=false)</td></tr>
+<tr class="separator:a0b8c3874f45db5276c25390f8e193172"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad63893f95c7b693cc659eb36804f27ab"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad63893f95c7b693cc659eb36804f27ab"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad63893f95c7b693cc659eb36804f27ab"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>shift</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, <a class="el" href="classVector2d.html">Vector2d</a>< T > &output, double offsetX=0, double offsetY=0, double randomSigma=0, RESAMPLE resample=NEAR, bool verbose=false)</td></tr>
+<tr class="separator:ad63893f95c7b693cc659eb36804f27ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a86622fc2dbe182c6635196abaad9dedb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86622fc2dbe182c6635196abaad9dedb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>linearFeature</b> (const <a class="el" href="classVector2d.html">Vector2d</a>< float > &input, std::vector< <a class="el" href="classVector2d.html">Vector2d</a>< float > > &output, float angle=361, float angleStep=1, float maxDistance=0, float eps=0, bool l1=true, bool a1=true, bool l2=true, bool a2=true, bool verbose=false)</td></tr>
+<tr class="separator:a86622fc2dbe182c6635196abaad9dedb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8b5dad618281f0bef94a54ef49b9b33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8b5dad618281f0bef94a54ef49b9b33"></a>
+void </td><td class="memItemRight" valign="bottom"><b>linearFeature</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, float angle=361, float angleStep=1, float maxDistance=0, float eps=0, bool l1=true, bool a1=true, bool l2=true, bool a2=true, int band=0, bool verbose=false)</td></tr>
+<tr class="separator:ae8b5dad618281f0bef94a54ef49b9b33"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a32e0edc078edb8393d2610bf8f23b015"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32e0edc078edb8393d2610bf8f23b015"></a>
+static FILTER_TYPE </td><td class="memItemRight" valign="bottom"><b>getFilterType</b> (const std::string filterType)</td></tr>
+<tr class="separator:a32e0edc078edb8393d2610bf8f23b015"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cdef475f8c0c0db520fc01f40da8376"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cdef475f8c0c0db520fc01f40da8376"></a>
+static const RESAMPLE </td><td class="memItemRight" valign="bottom"><b>getResampleType</b> (const std::string resampleType)</td></tr>
+<tr class="separator:a9cdef475f8c0c0db520fc01f40da8376"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="Filter2d_8h_source.html#l00065">65</a> of file <a class="el" href="Filter2d_8h_source.html">Filter2d.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Filter2d_8h_source.html">Filter2d.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Filter2d_8cc_source.html">Filter2d.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classfilter_1_1Filter-members.html b/doc/html/classfilter_1_1Filter-members.html
new file mode 100644
index 0000000..2f615bd
--- /dev/null
+++ b/doc/html/classfilter_1_1Filter-members.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>filter</b></li><li class="navelem"><a class="el" href="classfilter_1_1Filter.html">Filter</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">filter::Filter Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>applyFwhm</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, std::vector< T > &output, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfi [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>applyFwhm</b>(const std::vector< double > &wavelengthIn, const Vector2d< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, Vector2d< T > &output, int down=1, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_ [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>applyFwhm</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, std::vector< T > &output, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfi [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>applyFwhm</b>(const std::vector< double > &wavelengthIn, const Vector2d< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, Vector2d< T > &output, int down=1, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_ [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>applySrf</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const Vector2d< double > &srf, const std::string &interpolationType, T &output, double delta=1.0, bool normalize=false, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>< [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>applySrf</b>(const std::vector< double > &wavelengthIn, const Vector2d< T > &input, const Vector2d< double > &srf, const std::string &interpolationType, std::vector< T > &output, double delta=1.0, bool normalize=false, int down=1, bool transposeInput=false, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="cla [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>applySrf</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const Vector2d< double > &srf, const std::string &interpolationType, T &output, double delta=1.0, bool normalize=false, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>< [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>applySrf</b>(const std::vector< double > &wavelengthIn, const Vector2d< T > &input, const Vector2d< double > &srf, const std::string &interpolationType, std::vector< T > &output, double delta=1.0, bool normalize=false, int down=1, bool transposeInput=false, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="cla [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtCut</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family, double cut) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtCut</b>(std::vector< double > &data, const std::string &wavelet_type, int family, double cut) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtCut</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family, double cut) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtCut</b>(std::vector< double > &data, const std::string &wavelet_type, int family, double cut) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtCutFrom</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family, int band) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtCutFrom</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family, int band) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtForward</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtForward</b>(std::vector< double > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtForward</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtForward</b>(std::vector< double > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtInverse</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtInverse</b>(std::vector< double > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dwtInverse</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dwtInverse</b>(std::vector< double > &data, const std::string &wavelet_type, int family) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const std::vector< T > &input, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(T *input, int inputSize, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(const ImgReaderGdal &input, ImgWriterGdal &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(const std::vector< T > &input, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(T *input, int inputSize, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(const ImgReaderGdal &input, ImgWriterGdal &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>filter</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b>(T *input, int inputSize, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Filter</b>(void) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Filter</b>(const std::vector< double > &taps) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Filter</b>(void) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Filter</b>(const std::vector< double > &taps) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getCentreWavelength</b>(const std::vector< double > &wavelengthIn, const Vector2d< double > &srf, const std::string &interpolationType, double delta=1.0, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCentreWavelength</b>(const std::vector< double > &wavelengthIn, const Vector2d< double > &srf, const std::string &interpolationType, double delta=1.0, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getFilterType</b>(const std::string filterType) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFilterType</b>(const std::string filterType) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getPadding</b>(const std::string &padString) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getSavGolayCoefficients</b>(std::vector< double > &c, int np, int nl, int nr, int ld, int m) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getWaveletType</b>(const std::string waveletType) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getWaveletType</b>(const std::string waveletType) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lubksb</b>(std::vector< double > &a, std::vector< int > &indx, std::vector< double > &b) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ludcmp</b>(std::vector< double > &a, std::vector< int > &indx, double &d) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>morphology</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dim, short verbose=0) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>morphology</b>(const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim, bool verbose=false) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>morphology</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method, int dim, short verbose=0) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushClass</b>(short theClass=1) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushClass</b>(short theClass=1) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushMask</b>(short theMask=0) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushMask</b>(short theMask=0) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushNoDataValue</b>(double noDataValue=0) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pushThreshold</b>(double theThreshold) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setPadding</b>(const std::string &padString) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTaps</b>(const std::vector< double > &taps, bool normalize=true) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTaps</b>(const std::vector< double > &taps, bool normalize=true) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setThresholds</b>(const std::vector< double > &theThresholds) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(const std::vector< T > &input, std::vector< T > &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smooth</b>(T *input, int inputSize, std::vector< T > &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(const ImgReaderGdal &input, ImgWriterGdal &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smooth</b>(const std::vector< T > &input, std::vector< T > &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(T *input, int inputSize, std::vector< T > &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smooth</b>(const ImgReaderGdal &input, ImgWriterGdal &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smooth</b>(T *input, int inputSize, std::vector< T > &output, short dim) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>smoothNoData</b>(const std::vector< T > &input, const std::string &interpolationType, std::vector< T > &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>smoothNoData</b>(const ImgReaderGdal &input, const std::string &interpolationType, ImgWriterGdal &output) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>stat</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>stat</b>(const ImgReaderGdal &input, ImgWriterGdal &output, const std::string &method) (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~Filter</b>() (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Filter</b>() (defined in <a class="el" href="classfilter_1_1Filter.html">filter::Filter</a>)</td><td class="entry"><a class="el" href="classfilter_1_1Filter.html">filter::Filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classfilter_1_1Filter.html b/doc/html/classfilter_1_1Filter.html
new file mode 100644
index 0000000..54a024b
--- /dev/null
+++ b/doc/html/classfilter_1_1Filter.html
@@ -0,0 +1,323 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: filter::Filter Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>filter</b></li><li class="navelem"><a class="el" href="classfilter_1_1Filter.html">Filter</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classfilter_1_1Filter-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">filter::Filter Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4ff1ddbd0439ccddb0eaafa7e9275666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ff1ddbd0439ccddb0eaafa7e9275666"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Filter</b> (const std::vector< double > &taps)</td></tr>
+<tr class="separator:a4ff1ddbd0439ccddb0eaafa7e9275666"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac26c9bfefedc4834b57e9ab1aec87224"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac26c9bfefedc4834b57e9ab1aec87224"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setPadding</b> (const std::string &padString)</td></tr>
+<tr class="separator:ac26c9bfefedc4834b57e9ab1aec87224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac89eab9edeff79efea2bed6bc19a7a92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac89eab9edeff79efea2bed6bc19a7a92"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setTaps</b> (const std::vector< double > &taps, bool normalize=true)</td></tr>
+<tr class="separator:ac89eab9edeff79efea2bed6bc19a7a92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36465972da723f10600080de7ac8d82a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36465972da723f10600080de7ac8d82a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushClass</b> (short theClass=1)</td></tr>
+<tr class="separator:a36465972da723f10600080de7ac8d82a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8023d7e37589845ded33a9ce3cd65dab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8023d7e37589845ded33a9ce3cd65dab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushMask</b> (short theMask=0)</td></tr>
+<tr class="separator:a8023d7e37589845ded33a9ce3cd65dab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a254aac2b8b994ac02c2022a281731a84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a254aac2b8b994ac02c2022a281731a84"></a>
+int </td><td class="memItemRight" valign="bottom"><b>pushNoDataValue</b> (double noDataValue=0)</td></tr>
+<tr class="separator:a254aac2b8b994ac02c2022a281731a84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a542707e526b3fc1d1a447a160f84790b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a542707e526b3fc1d1a447a160f84790b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushThreshold</b> (double theThreshold)</td></tr>
+<tr class="separator:a542707e526b3fc1d1a447a160f84790b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8f31c1160b17fdfae26178b7018a6ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8f31c1160b17fdfae26178b7018a6ea"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setThresholds</b> (const std::vector< double > &theThresholds)</td></tr>
+<tr class="separator:af8f31c1160b17fdfae26178b7018a6ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3be50ce8beda454c14172206a5df234b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3be50ce8beda454c14172206a5df234b"></a>
+template<class T > </td></tr>
+<tr class="memitem:a3be50ce8beda454c14172206a5df234b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (const std::vector< T > &input, std::vector< T > &output)</td></tr>
+<tr class="separator:a3be50ce8beda454c14172206a5df234b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d0a97415ba579992c258315a7ecdcf3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5d0a97415ba579992c258315a7ecdcf3"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5d0a97415ba579992c258315a7ecdcf3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim)</td></tr>
+<tr class="separator:a5d0a97415ba579992c258315a7ecdcf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memTemplParams" colspan="2"><a class="anchor" id="afa3f2577e46fec0944faf21c8e6ecf20"></a>
+template<class T > </td></tr>
+<tr class="memitem:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (const std::vector< T > &input, std::vector< T > &output, short dim)</td></tr>
+<tr class="separator:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e7c78dfb6724470721018c45b938e32"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1e7c78dfb6724470721018c45b938e32"></a>
+template<class T > </td></tr>
+<tr class="memitem:a1e7c78dfb6724470721018c45b938e32"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smoothNoData</b> (const std::vector< T > &input, const std::string &interpolationType, std::vector< T > &output)</td></tr>
+<tr class="separator:a1e7c78dfb6724470721018c45b938e32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad3b873072da53931df24e107904c7d65"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (T *input, int inputSize, std::vector< T > &output)</td></tr>
+<tr class="separator:ad3b873072da53931df24e107904c7d65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac9da637b07e80bc5c02d17a352c50fdf"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (T *input, int inputSize, std::vector< T > &output, short dim)</td></tr>
+<tr class="separator:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83362ed47ef8df0ffb600310d82ddbd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83362ed47ef8df0ffb600310d82ddbd4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>morphology</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dim, short verbose=0)</td></tr>
+<tr class="separator:a83362ed47ef8df0ffb600310d82ddbd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99f57bcbe78d6b90e80f2b64407a0cbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99f57bcbe78d6b90e80f2b64407a0cbb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output)</td></tr>
+<tr class="separator:a99f57bcbe78d6b90e80f2b64407a0cbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0e2990875162e2baba5986f351f9b0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0e2990875162e2baba5986f351f9b0f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>stat</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method)</td></tr>
+<tr class="separator:ae0e2990875162e2baba5986f351f9b0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a050448e66c190a2f56c62686fb0a5215"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a050448e66c190a2f56c62686fb0a5215"></a>
+void </td><td class="memItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dim)</td></tr>
+<tr class="separator:a050448e66c190a2f56c62686fb0a5215"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a552f978ba6be6aaf3fd17572e9bf7f0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a552f978ba6be6aaf3fd17572e9bf7f0e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getSavGolayCoefficients</b> (std::vector< double > &c, int np, int nl, int nr, int ld, int m)</td></tr>
+<tr class="separator:a552f978ba6be6aaf3fd17572e9bf7f0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1fcb5a15b23f4b750701329c5a392d5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1fcb5a15b23f4b750701329c5a392d5a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>ludcmp</b> (std::vector< double > &a, std::vector< int > &indx, double &d)</td></tr>
+<tr class="separator:a1fcb5a15b23f4b750701329c5a392d5a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac42760b057c2febec0242cc48afcef90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac42760b057c2febec0242cc48afcef90"></a>
+void </td><td class="memItemRight" valign="bottom"><b>lubksb</b> (std::vector< double > &a, std::vector< int > &indx, std::vector< double > &b)</td></tr>
+<tr class="separator:ac42760b057c2febec0242cc48afcef90"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af91824b0dbd1497eaebed5cd8280bf56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91824b0dbd1497eaebed5cd8280bf56"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, short dim)</td></tr>
+<tr class="separator:af91824b0dbd1497eaebed5cd8280bf56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4894c0252dacd8ff9cb5ec6a907a84a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4894c0252dacd8ff9cb5ec6a907a84a3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smoothNoData</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, const std::string &interpolationType, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output)</td></tr>
+<tr class="separator:a4894c0252dacd8ff9cb5ec6a907a84a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a234ae27bd82765cd617dc2c421647176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a234ae27bd82765cd617dc2c421647176"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getCentreWavelength</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, double delta=1.0, bool verbose=false)</td></tr>
+<tr class="separator:a234ae27bd82765cd617dc2c421647176"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5a4dad3e37d690cff2f03ad3c82a2cff"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>applySrf</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, T &output, double delta=1.0, bool normalize=false, bool verbose=false)</td></tr>
+<tr class="separator:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a381288d83dd61975c8e8451f2346a1aa"><td class="memTemplParams" colspan="2"><a class="anchor" id="a381288d83dd61975c8e8451f2346a1aa"></a>
+template<class T > </td></tr>
+<tr class="memitem:a381288d83dd61975c8e8451f2346a1aa"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>applySrf</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, std::vector< T > &output, doub [...]
+<tr class="separator:a381288d83dd61975c8e8451f2346a1aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2b80b309d377cbea2858f4f27ef1413"><td class="memTemplParams" colspan="2"><a class="anchor" id="af2b80b309d377cbea2858f4f27ef1413"></a>
+template<class T > </td></tr>
+<tr class="memitem:af2b80b309d377cbea2858f4f27ef1413"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>applyFwhm</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, std::vector< T > &output, bool verbose=false)</td></tr>
+<tr class="separator:af2b80b309d377cbea2858f4f27ef1413"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memTemplParams" colspan="2"><a class="anchor" id="a41e7b4a064898d0f8165ca8ef8893a14"></a>
+template<class T > </td></tr>
+<tr class="memitem:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>applyFwhm</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, <a class="el" href="classVe [...]
+<tr class="separator:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3eed9fc0556de577a98913884b20d519"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3eed9fc0556de577a98913884b20d519"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtForward</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:a3eed9fc0556de577a98913884b20d519"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4a228c3c4563c189adba5ce2786b91a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4a228c3c4563c189adba5ce2786b91a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtInverse</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:aa4a228c3c4563c189adba5ce2786b91a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6f8c5812de0ddd67cdd11709e35efac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6f8c5812de0ddd67cdd11709e35efac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCut</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family, double cut)</td></tr>
+<tr class="separator:af6f8c5812de0ddd67cdd11709e35efac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab81f3b58fd69563ed3e95ee8291d3bc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab81f3b58fd69563ed3e95ee8291d3bc1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtForward</b> (std::vector< double > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:ab81f3b58fd69563ed3e95ee8291d3bc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0c8204c19c5c0a42c75d850e73210a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0c8204c19c5c0a42c75d850e73210a7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtInverse</b> (std::vector< double > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:af0c8204c19c5c0a42c75d850e73210a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f5c8741d10eb20e7aac88843aa3511b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f5c8741d10eb20e7aac88843aa3511b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCut</b> (std::vector< double > &data, const std::string &wavelet_type, int family, double cut)</td></tr>
+<tr class="separator:a5f5c8741d10eb20e7aac88843aa3511b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e61e59c7e5af8296d621366d1963559"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e61e59c7e5af8296d621366d1963559"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCutFrom</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family, int band)</td></tr>
+<tr class="separator:a1e61e59c7e5af8296d621366d1963559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff1ddbd0439ccddb0eaafa7e9275666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ff1ddbd0439ccddb0eaafa7e9275666"></a>
+ </td><td class="memItemRight" valign="bottom"><b>Filter</b> (const std::vector< double > &taps)</td></tr>
+<tr class="separator:a4ff1ddbd0439ccddb0eaafa7e9275666"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac89eab9edeff79efea2bed6bc19a7a92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac89eab9edeff79efea2bed6bc19a7a92"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setTaps</b> (const std::vector< double > &taps, bool normalize=true)</td></tr>
+<tr class="separator:ac89eab9edeff79efea2bed6bc19a7a92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36465972da723f10600080de7ac8d82a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36465972da723f10600080de7ac8d82a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushClass</b> (short theClass=1)</td></tr>
+<tr class="separator:a36465972da723f10600080de7ac8d82a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8023d7e37589845ded33a9ce3cd65dab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8023d7e37589845ded33a9ce3cd65dab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>pushMask</b> (short theMask=0)</td></tr>
+<tr class="separator:a8023d7e37589845ded33a9ce3cd65dab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3be50ce8beda454c14172206a5df234b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3be50ce8beda454c14172206a5df234b"></a>
+template<class T > </td></tr>
+<tr class="memitem:a3be50ce8beda454c14172206a5df234b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (const std::vector< T > &input, std::vector< T > &output)</td></tr>
+<tr class="separator:a3be50ce8beda454c14172206a5df234b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d0a97415ba579992c258315a7ecdcf3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5d0a97415ba579992c258315a7ecdcf3"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5d0a97415ba579992c258315a7ecdcf3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim)</td></tr>
+<tr class="separator:a5d0a97415ba579992c258315a7ecdcf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memTemplParams" colspan="2"><a class="anchor" id="afa3f2577e46fec0944faf21c8e6ecf20"></a>
+template<class T > </td></tr>
+<tr class="memitem:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (const std::vector< T > &input, std::vector< T > &output, short dim)</td></tr>
+<tr class="separator:afa3f2577e46fec0944faf21c8e6ecf20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad3b873072da53931df24e107904c7d65"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (T *input, int inputSize, std::vector< T > &output)</td></tr>
+<tr class="separator:ad3b873072da53931df24e107904c7d65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac9da637b07e80bc5c02d17a352c50fdf"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (T *input, int inputSize, std::vector< T > &output, short dim)</td></tr>
+<tr class="separator:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e6b1990bb265680b5ab8729e0d4ce65"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4e6b1990bb265680b5ab8729e0d4ce65"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4e6b1990bb265680b5ab8729e0d4ce65"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>morphology</b> (const std::vector< T > &input, std::vector< T > &output, const std::string &method, int dim, bool verbose=false)</td></tr>
+<tr class="separator:a4e6b1990bb265680b5ab8729e0d4ce65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83362ed47ef8df0ffb600310d82ddbd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83362ed47ef8df0ffb600310d82ddbd4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>morphology</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dim, short verbose=0)</td></tr>
+<tr class="separator:a83362ed47ef8df0ffb600310d82ddbd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99f57bcbe78d6b90e80f2b64407a0cbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99f57bcbe78d6b90e80f2b64407a0cbb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output)</td></tr>
+<tr class="separator:a99f57bcbe78d6b90e80f2b64407a0cbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0e2990875162e2baba5986f351f9b0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0e2990875162e2baba5986f351f9b0f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>stat</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method)</td></tr>
+<tr class="separator:ae0e2990875162e2baba5986f351f9b0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a050448e66c190a2f56c62686fb0a5215"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a050448e66c190a2f56c62686fb0a5215"></a>
+void </td><td class="memItemRight" valign="bottom"><b>filter</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &method, int dim)</td></tr>
+<tr class="separator:a050448e66c190a2f56c62686fb0a5215"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af91824b0dbd1497eaebed5cd8280bf56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91824b0dbd1497eaebed5cd8280bf56"></a>
+void </td><td class="memItemRight" valign="bottom"><b>smooth</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, short dim)</td></tr>
+<tr class="separator:af91824b0dbd1497eaebed5cd8280bf56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a234ae27bd82765cd617dc2c421647176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a234ae27bd82765cd617dc2c421647176"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getCentreWavelength</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, double delta=1.0, bool verbose=false)</td></tr>
+<tr class="separator:a234ae27bd82765cd617dc2c421647176"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5a4dad3e37d690cff2f03ad3c82a2cff"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>applySrf</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, T &output, double delta=1.0, bool normalize=false, bool verbose=false)</td></tr>
+<tr class="separator:a5a4dad3e37d690cff2f03ad3c82a2cff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a381288d83dd61975c8e8451f2346a1aa"><td class="memTemplParams" colspan="2"><a class="anchor" id="a381288d83dd61975c8e8451f2346a1aa"></a>
+template<class T > </td></tr>
+<tr class="memitem:a381288d83dd61975c8e8451f2346a1aa"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>applySrf</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, const <a class="el" href="classVector2d.html">Vector2d</a>< double > &srf, const std::string &interpolationType, std::vector< T > &output, doub [...]
+<tr class="separator:a381288d83dd61975c8e8451f2346a1aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2b80b309d377cbea2858f4f27ef1413"><td class="memTemplParams" colspan="2"><a class="anchor" id="af2b80b309d377cbea2858f4f27ef1413"></a>
+template<class T > </td></tr>
+<tr class="memitem:af2b80b309d377cbea2858f4f27ef1413"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>applyFwhm</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, std::vector< T > &output, bool verbose=false)</td></tr>
+<tr class="separator:af2b80b309d377cbea2858f4f27ef1413"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memTemplParams" colspan="2"><a class="anchor" id="a41e7b4a064898d0f8165ca8ef8893a14"></a>
+template<class T > </td></tr>
+<tr class="memitem:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>applyFwhm</b> (const std::vector< double > &wavelengthIn, const <a class="el" href="classVector2d.html">Vector2d</a>< T > &input, const std::vector< double > &wavelengthOut, const std::vector< double > &fwhm, const std::string &interpolationType, <a class="el" href="classVe [...]
+<tr class="separator:a41e7b4a064898d0f8165ca8ef8893a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3eed9fc0556de577a98913884b20d519"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3eed9fc0556de577a98913884b20d519"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtForward</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:a3eed9fc0556de577a98913884b20d519"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4a228c3c4563c189adba5ce2786b91a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4a228c3c4563c189adba5ce2786b91a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtInverse</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:aa4a228c3c4563c189adba5ce2786b91a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6f8c5812de0ddd67cdd11709e35efac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6f8c5812de0ddd67cdd11709e35efac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCut</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family, double cut)</td></tr>
+<tr class="separator:af6f8c5812de0ddd67cdd11709e35efac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab81f3b58fd69563ed3e95ee8291d3bc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab81f3b58fd69563ed3e95ee8291d3bc1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtForward</b> (std::vector< double > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:ab81f3b58fd69563ed3e95ee8291d3bc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0c8204c19c5c0a42c75d850e73210a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0c8204c19c5c0a42c75d850e73210a7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtInverse</b> (std::vector< double > &data, const std::string &wavelet_type, int family)</td></tr>
+<tr class="separator:af0c8204c19c5c0a42c75d850e73210a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f5c8741d10eb20e7aac88843aa3511b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f5c8741d10eb20e7aac88843aa3511b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCut</b> (std::vector< double > &data, const std::string &wavelet_type, int family, double cut)</td></tr>
+<tr class="separator:a5f5c8741d10eb20e7aac88843aa3511b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e61e59c7e5af8296d621366d1963559"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e61e59c7e5af8296d621366d1963559"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dwtCutFrom</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &input, <a class="el" href="classImgWriterGdal.html">ImgWriterGdal</a> &output, const std::string &wavelet_type, int family, int band)</td></tr>
+<tr class="separator:a1e61e59c7e5af8296d621366d1963559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac9da637b07e80bc5c02d17a352c50fdf"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>smooth</b> (T *input, int inputSize, std::vector< T > &output, short dim)</td></tr>
+<tr class="separator:ac9da637b07e80bc5c02d17a352c50fdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad3b873072da53931df24e107904c7d65"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad3b873072da53931df24e107904c7d65"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>filter</b> (T *input, int inputSize, std::vector< T > &output)</td></tr>
+<tr class="separator:ad3b873072da53931df24e107904c7d65"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a27a8c0eab2fdd27817b4a9a9269f4412"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27a8c0eab2fdd27817b4a9a9269f4412"></a>
+static const gsl_wavelet_type * </td><td class="memItemRight" valign="bottom"><b>getWaveletType</b> (const std::string waveletType)</td></tr>
+<tr class="separator:a27a8c0eab2fdd27817b4a9a9269f4412"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a66f8033bde2fcdb990f8841ce6566942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66f8033bde2fcdb990f8841ce6566942"></a>
+static FILTER_TYPE </td><td class="memItemRight" valign="bottom"><b>getFilterType</b> (const std::string filterType)</td></tr>
+<tr class="separator:a66f8033bde2fcdb990f8841ce6566942"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80237cb7e384c821caabf5ee918c0586"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80237cb7e384c821caabf5ee918c0586"></a>
+static PADDING </td><td class="memItemRight" valign="bottom"><b>getPadding</b> (const std::string &padString)</td></tr>
+<tr class="separator:a80237cb7e384c821caabf5ee918c0586"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27a8c0eab2fdd27817b4a9a9269f4412"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27a8c0eab2fdd27817b4a9a9269f4412"></a>
+static const gsl_wavelet_type * </td><td class="memItemRight" valign="bottom"><b>getWaveletType</b> (const std::string waveletType)</td></tr>
+<tr class="separator:a27a8c0eab2fdd27817b4a9a9269f4412"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a66f8033bde2fcdb990f8841ce6566942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66f8033bde2fcdb990f8841ce6566942"></a>
+static FILTER_TYPE </td><td class="memItemRight" valign="bottom"><b>getFilterType</b> (const std::string filterType)</td></tr>
+<tr class="separator:a66f8033bde2fcdb990f8841ce6566942"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="Filter_8h_source.html#l00040">40</a> of file <a class="el" href="Filter_8h_source.html">Filter.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Filter_8h_source.html">Filter.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Filter__old_8h_source.html">Filter_old.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="Filter_8cc_source.html">Filter.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classimgregression_1_1ImgRegression-members.html b/doc/html/classimgregression_1_1ImgRegression-members.html
new file mode 100644
index 0000000..04ab9ae
--- /dev/null
+++ b/doc/html/classimgregression_1_1ImgRegression-members.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>imgregression</b></li><li class="navelem"><a class="el" href="classimgregression_1_1ImgRegression.html">ImgRegression</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">imgregression::ImgRegression Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getR2</b>(const ImgReaderGdal &imgReader1, const ImgReaderGdal &imgReader2, double &c0, double &c1, unsigned short b1=0, unsigned short b2=0, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getR2</b>(const ImgReaderGdal &imgReader, unsigned short b1, unsigned short b2, double &c0, double &c1, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getRMSE</b>(const ImgReaderGdal &imgReader1, const ImgReaderGdal &imgReader2, double &c0, double &c1, unsigned short b1=0, unsigned short b2=0, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getRMSE</b>(const ImgReaderGdal &imgReader, unsigned short b1, unsigned short b2, double &c0, double &c1, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ImgRegression</b>(void) (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pgetR2</b>(const ImgReaderGdal &imgReader1, const ImgReaderGdal &imgReader2, double &c0, double &c1, unsigned short band1, unsigned short band2, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pgetR2</b>(const ImgReaderGdal &imgReader, unsigned short band1, unsigned short band2, double &c0, double &c1, short verbose=0) const (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDown</b>(int theDown) (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setThreshold</b>(double theThreshold) (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~ImgRegression</b>(void) (defined in <a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a>)</td><td class="entry"><a class="el" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classimgregression_1_1ImgRegression.html b/doc/html/classimgregression_1_1ImgRegression.html
new file mode 100644
index 0000000..7a4af93
--- /dev/null
+++ b/doc/html/classimgregression_1_1ImgRegression.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: imgregression::ImgRegression Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>imgregression</b></li><li class="navelem"><a class="el" href="classimgregression_1_1ImgRegression.html">ImgRegression</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classimgregression_1_1ImgRegression-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">imgregression::ImgRegression Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5b7755ffdd8217bbccf98d4c829cbe08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b7755ffdd8217bbccf98d4c829cbe08"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getRMSE</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader1, const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader2, double &c0, double &c1, unsigned short b1=0, unsigned short b2=0, short verbose=0) const </td></tr>
+<tr class="separator:a5b7755ffdd8217bbccf98d4c829cbe08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51edee4b32e24a78f6fc97cfae41baea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51edee4b32e24a78f6fc97cfae41baea"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getRMSE</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader, unsigned short b1, unsigned short b2, double &c0, double &c1, short verbose=0) const </td></tr>
+<tr class="separator:a51edee4b32e24a78f6fc97cfae41baea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88bab191720e1f8a47de6ce7378f0e50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88bab191720e1f8a47de6ce7378f0e50"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getR2</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader1, const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader2, double &c0, double &c1, unsigned short b1=0, unsigned short b2=0, short verbose=0) const </td></tr>
+<tr class="separator:a88bab191720e1f8a47de6ce7378f0e50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37affb0f4c5ebf29efc81c62625cb8f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37affb0f4c5ebf29efc81c62625cb8f1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>pgetR2</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader1, const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader2, double &c0, double &c1, unsigned short band1, unsigned short band2, short verbose=0) const </td></tr>
+<tr class="separator:a37affb0f4c5ebf29efc81c62625cb8f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5580afcfa0174a2a8bd2376feb5ca2df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5580afcfa0174a2a8bd2376feb5ca2df"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getR2</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader, unsigned short b1, unsigned short b2, double &c0, double &c1, short verbose=0) const </td></tr>
+<tr class="separator:a5580afcfa0174a2a8bd2376feb5ca2df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55c901f741cef61808f8b77509085e76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55c901f741cef61808f8b77509085e76"></a>
+double </td><td class="memItemRight" valign="bottom"><b>pgetR2</b> (const <a class="el" href="classImgReaderGdal.html">ImgReaderGdal</a> &imgReader, unsigned short band1, unsigned short band2, double &c0, double &c1, short verbose=0) const </td></tr>
+<tr class="separator:a55c901f741cef61808f8b77509085e76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea02679e46f1a31c1628361f6e884d9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea02679e46f1a31c1628361f6e884d9d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setThreshold</b> (double theThreshold)</td></tr>
+<tr class="separator:aea02679e46f1a31c1628361f6e884d9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1a38b1f361de8d0ca3c1a4f35ae8d0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1a38b1f361de8d0ca3c1a4f35ae8d0c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setDown</b> (int theDown)</td></tr>
+<tr class="separator:ac1a38b1f361de8d0ca3c1a4f35ae8d0c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ImgRegression_8h_source.html#l00030">30</a> of file <a class="el" href="ImgRegression_8h_source.html">ImgRegression.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="ImgRegression_8h_source.html">ImgRegression.h</a></li>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="ImgRegression_8cc_source.html">ImgRegression.cc</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin-members.html b/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin-members.html
new file mode 100644
index 0000000..0d8935a
--- /dev/null
+++ b/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>ProcessingPktoolsPlugin</b></li><li class="navelem"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">ProcessingPktoolsPlugin</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b> (defined in <a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a>)</td><td class="entry"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>initGui</b> (defined in <a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a>)</td><td class="entry"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>provider</b> (defined in <a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a>)</td><td class="entry"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>unload</b> (defined in <a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a>)</td><td class="entry"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html b/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html
new file mode 100644
index 0000000..472837d
--- /dev/null
+++ b/doc/html/classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>ProcessingPktoolsPlugin</b></li><li class="navelem"><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html">ProcessingPktoolsPlugin</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa9bf8b288f8d812e20cd014aab978326"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9bf8b288f8d812e20cd014aab978326"></a>
+def </td><td class="memItemRight" valign="bottom"><b>__init__</b></td></tr>
+<tr class="separator:aa9bf8b288f8d812e20cd014aab978326"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62ca078ba93ec8854530cae4fdb50f44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62ca078ba93ec8854530cae4fdb50f44"></a>
+def </td><td class="memItemRight" valign="bottom"><b>initGui</b></td></tr>
+<tr class="separator:a62ca078ba93ec8854530cae4fdb50f44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96ab61e337c527a56abeaa6a96b790b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96ab61e337c527a56abeaa6a96b790b6"></a>
+def </td><td class="memItemRight" valign="bottom"><b>unload</b></td></tr>
+<tr class="separator:a96ab61e337c527a56abeaa6a96b790b6"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a5de532d34abad9efe561b48f8e7fdf32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5de532d34abad9efe561b48f8e7fdf32"></a>
+ </td><td class="memItemRight" valign="bottom"><b>provider</b></td></tr>
+<tr class="separator:a5de532d34abad9efe561b48f8e7fdf32"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="ProcessingPktoolsPlugin_8py_source.html#l00040">40</a> of file <a class="el" href="ProcessingPktoolsPlugin_8py_source.html">ProcessingPktoolsPlugin.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="ProcessingPktoolsPlugin_8py_source.html">ProcessingPktoolsPlugin.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite-members.html b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite-members.html
new file mode 100644
index 0000000..b49da16
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite-members.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkcomposite</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">pkcomposite</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkcomposite.pkcomposite Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BNDNODATA</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CB</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRULE</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRULE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DSTNODATA</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DX</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DY</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MAXGUI</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MINGUI</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PROJWIN</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RESAMPLE</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RESAMPLE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SRCNODATA</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite.html b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite.html
new file mode 100644
index 0000000..c979989
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkcomposite.pkcomposite Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkcomposite</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">pkcomposite</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkcomposite_1_1pkcomposite-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkcomposite.pkcomposite Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkcomposite.pkcomposite:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.png" border="0" usemap="#qgis_8pkcomposite_8pkcomposite_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkcomposite.pkcomposite:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.png" border="0" usemap="#qgis_8pkcomposite_8pkcomposite_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a50e046d7f4d00ac95080ec2b2f281bb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50e046d7f4d00ac95080ec2b2f281bb6"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a50e046d7f4d00ac95080ec2b2f281bb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cf2090d81d678e95ef15cb8fbea18fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cf2090d81d678e95ef15cb8fbea18fe"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a1cf2090d81d678e95ef15cb8fbea18fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2ffb4dcf36bc5cc006a5b78b1f4c4f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2ffb4dcf36bc5cc006a5b78b1f4c4f7"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:ae2ffb4dcf36bc5cc006a5b78b1f4c4f7"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:af9ff4b9a274bc1edb87048da555c78c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9ff4b9a274bc1edb87048da555c78c5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:af9ff4b9a274bc1edb87048da555c78c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93043eb33d26bf02e375323ca06ece59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93043eb33d26bf02e375323ca06ece59"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a93043eb33d26bf02e375323ca06ece59"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aebe799f44d6edf989b3d82412c02809a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebe799f44d6edf989b3d82412c02809a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:aebe799f44d6edf989b3d82412c02809a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74b1ad0686d3e17322917be01eff6ac1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74b1ad0686d3e17322917be01eff6ac1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a74b1ad0686d3e17322917be01eff6ac1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17e19984fe0607f36ee4cee78b9e5d06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17e19984fe0607f36ee4cee78b9e5d06"></a>
+list </td><td class="memItemRight" valign="bottom"><b>CRULE_OPTIONS</b> = ["overwrite", "maxndvi", "maxband", "minband", "validband", "mean", "mode", "median", "sum", "minallbands", "maxallbands","stdev"]</td></tr>
+<tr class="separator:a17e19984fe0607f36ee4cee78b9e5d06"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa82de884f201e7c964fd97e55faa3df3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa82de884f201e7c964fd97e55faa3df3"></a>
+string </td><td class="memItemRight" valign="bottom"><b>CRULE</b> = "CRULE"</td></tr>
+<tr class="separator:aa82de884f201e7c964fd97e55faa3df3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae54bec0854b09e103e5dbe2146589997"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae54bec0854b09e103e5dbe2146589997"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DX</b> = "DX"</td></tr>
+<tr class="separator:ae54bec0854b09e103e5dbe2146589997"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b797d46ca05fd41a88d0400351bd828"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b797d46ca05fd41a88d0400351bd828"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DY</b> = "DY"</td></tr>
+<tr class="separator:a9b797d46ca05fd41a88d0400351bd828"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad003c6db03be187acded3c0890568c61"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad003c6db03be187acded3c0890568c61"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PROJWIN</b> = 'PROJWIN'</td></tr>
+<tr class="separator:ad003c6db03be187acded3c0890568c61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75b586bb10dce1cb66553e222d3a214c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75b586bb10dce1cb66553e222d3a214c"></a>
+string </td><td class="memItemRight" valign="bottom"><b>CB</b> = "CB"</td></tr>
+<tr class="separator:a75b586bb10dce1cb66553e222d3a214c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c056445acdf3afd1cd26acd12c3c8f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c056445acdf3afd1cd26acd12c3c8f0"></a>
+string </td><td class="memItemRight" valign="bottom"><b>SRCNODATA</b> = "SRCNODATA"</td></tr>
+<tr class="separator:a3c056445acdf3afd1cd26acd12c3c8f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65825f1ecd8b707d842cdc9b6bef2722"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65825f1ecd8b707d842cdc9b6bef2722"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BNDNODATA</b> = "BNDNODATA"</td></tr>
+<tr class="separator:a65825f1ecd8b707d842cdc9b6bef2722"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a243d2bbaac6c49959b2117a4042fa219"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a243d2bbaac6c49959b2117a4042fa219"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DSTNODATA</b> = "DSTNODATA"</td></tr>
+<tr class="separator:a243d2bbaac6c49959b2117a4042fa219"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e62273f4e72fcf528d3c2a2bf2f407d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e62273f4e72fcf528d3c2a2bf2f407d"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MINGUI</b> = "MINGUI"</td></tr>
+<tr class="separator:a3e62273f4e72fcf528d3c2a2bf2f407d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3bc122ffa6ff04ac4da3c486387bf7cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bc122ffa6ff04ac4da3c486387bf7cc"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MAXGUI</b> = "MAXGUI"</td></tr>
+<tr class="separator:a3bc122ffa6ff04ac4da3c486387bf7cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08c3a8025fa0f42847033e6c7bfd6585"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08c3a8025fa0f42847033e6c7bfd6585"></a>
+list </td><td class="memItemRight" valign="bottom"><b>RESAMPLE_OPTIONS</b> = ['near', 'bilinear']</td></tr>
+<tr class="separator:a08c3a8025fa0f42847033e6c7bfd6585"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54b2d965b3a847cc1975fd62c9c4dce1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54b2d965b3a847cc1975fd62c9c4dce1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RESAMPLE</b> = "RESAMPLE"</td></tr>
+<tr class="separator:a54b2d965b3a847cc1975fd62c9c4dce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa65064fbe6e45aff10bd5e803026d12a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa65064fbe6e45aff10bd5e803026d12a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:aa65064fbe6e45aff10bd5e803026d12a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a71098b4079244d80eb821653a6e32f00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71098b4079244d80eb821653a6e32f00"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:a71098b4079244d80eb821653a6e32f00"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a6835752fccf49eb80614d762310c49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a6835752fccf49eb80614d762310c49"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a2a6835752fccf49eb80614d762310c49"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkcomposite_8py_source.html#l00038">38</a> of file <a class="el" href="pkcomposite_8py_source.html">pkcomposite.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkcomposite_8py_source.html">pkcomposite.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.map b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.map
new file mode 100644
index 0000000..21d2dcf
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkcomposite.pkcomposite" name="qgis.pkcomposite.pkcomposite">
+</map>
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.md5 b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.md5
new file mode 100644
index 0000000..68db713
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.md5
@@ -0,0 +1 @@
+425d972d11444a735f88cea7a9295e8a
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.png b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.png
new file mode 100644
index 0000000..e550e99
Binary files /dev/null and b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.map b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.map
new file mode 100644
index 0000000..21d2dcf
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkcomposite.pkcomposite" name="qgis.pkcomposite.pkcomposite">
+</map>
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.md5 b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.md5
new file mode 100644
index 0000000..68db713
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.md5
@@ -0,0 +1 @@
+425d972d11444a735f88cea7a9295e8a
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.png b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.png
new file mode 100644
index 0000000..e550e99
Binary files /dev/null and b/doc/html/classqgis_1_1pkcomposite_1_1pkcomposite__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop-members.html b/doc/html/classqgis_1_1pkcrop_1_1pkcrop-members.html
new file mode 100644
index 0000000..7a7746a
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop-members.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkcrop</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">pkcrop</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkcrop.pkcrop Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BAND</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DX</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DY</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PROJWIN</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RESAMPLE</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RESAMPLE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop.html b/doc/html/classqgis_1_1pkcrop_1_1pkcrop.html
new file mode 100644
index 0000000..ad87d5d
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkcrop.pkcrop Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkcrop</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html">pkcrop</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkcrop_1_1pkcrop-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkcrop.pkcrop Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkcrop.pkcrop:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.png" border="0" usemap="#qgis_8pkcrop_8pkcrop_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkcrop.pkcrop:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkcrop_1_1pkcrop__coll__graph.png" border="0" usemap="#qgis_8pkcrop_8pkcrop_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0a169418d9b1c0e55c1c09c711b920b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a169418d9b1c0e55c1c09c711b920b1"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a0a169418d9b1c0e55c1c09c711b920b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3737ba86bc1676fd8276c43b1bf8a12b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3737ba86bc1676fd8276c43b1bf8a12b"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a3737ba86bc1676fd8276c43b1bf8a12b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad91ffec9ffdd327ac66d08506ea8fca5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad91ffec9ffdd327ac66d08506ea8fca5"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:ad91ffec9ffdd327ac66d08506ea8fca5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a21c98defb19a723cbdbcae90e5c414b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21c98defb19a723cbdbcae90e5c414b9"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a21c98defb19a723cbdbcae90e5c414b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15a208344b67a578ed7592105617762f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15a208344b67a578ed7592105617762f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a15a208344b67a578ed7592105617762f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a660abf1b5edd9b7c39f49a48748e73b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a660abf1b5edd9b7c39f49a48748e73b5"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a660abf1b5edd9b7c39f49a48748e73b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afab963f14ed687777ea04b6b03a44708"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afab963f14ed687777ea04b6b03a44708"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:afab963f14ed687777ea04b6b03a44708"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa64c23657fe96444fe2d03717be4b5c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa64c23657fe96444fe2d03717be4b5c5"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DX</b> = "DX"</td></tr>
+<tr class="separator:aa64c23657fe96444fe2d03717be4b5c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5779beb227252f20da289d505f4deee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5779beb227252f20da289d505f4deee"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DY</b> = "DY"</td></tr>
+<tr class="separator:ac5779beb227252f20da289d505f4deee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f6f27285700550bb52391c36d130328"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f6f27285700550bb52391c36d130328"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PROJWIN</b> = 'PROJWIN'</td></tr>
+<tr class="separator:a6f6f27285700550bb52391c36d130328"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5993a8cc5d573cf0bc3a0d97a1811cd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5993a8cc5d573cf0bc3a0d97a1811cd7"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BAND</b> = "BAND"</td></tr>
+<tr class="separator:a5993a8cc5d573cf0bc3a0d97a1811cd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d01bfa7ad85384abf071d59c0f5f69e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d01bfa7ad85384abf071d59c0f5f69e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a9d01bfa7ad85384abf071d59c0f5f69e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ca284fa3cb6e48275aa399f6547d4f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ca284fa3cb6e48275aa399f6547d4f2"></a>
+list </td><td class="memItemRight" valign="bottom"><b>RESAMPLE_OPTIONS</b> = ['near', 'bilinear']</td></tr>
+<tr class="separator:a4ca284fa3cb6e48275aa399f6547d4f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000a9bda4206edf6ef542590140e43e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a000a9bda4206edf6ef542590140e43e8"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RESAMPLE</b> = "RESAMPLE"</td></tr>
+<tr class="separator:a000a9bda4206edf6ef542590140e43e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67d94ff9e997ceda91ff39334e1e668a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67d94ff9e997ceda91ff39334e1e668a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a67d94ff9e997ceda91ff39334e1e668a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa901690d584f08efbc4a4225985fde89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa901690d584f08efbc4a4225985fde89"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:aa901690d584f08efbc4a4225985fde89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c99a0e343473c7cfc94623c115590db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c99a0e343473c7cfc94623c115590db"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a7c99a0e343473c7cfc94623c115590db"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkcrop_8py_source.html#l00038">38</a> of file <a class="el" href="pkcrop_8py_source.html">pkcrop.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkcrop_8py_source.html">pkcrop.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.map b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.map
new file mode 100644
index 0000000..6fad624
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkcrop.pkcrop" name="qgis.pkcrop.pkcrop">
+</map>
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.md5 b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.md5
new file mode 100644
index 0000000..59a9c94
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.md5
@@ -0,0 +1 @@
+96897278b3ac460a3a4a246c00581d44
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.png b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.png
new file mode 100644
index 0000000..4cd3744
Binary files /dev/null and b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.map b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.map
new file mode 100644
index 0000000..6fad624
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkcrop.pkcrop" name="qgis.pkcrop.pkcrop">
+</map>
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.md5 b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.md5
new file mode 100644
index 0000000..59a9c94
--- /dev/null
+++ b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.md5
@@ -0,0 +1 @@
+96897278b3ac460a3a4a246c00581d44
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.png b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.png
new file mode 100644
index 0000000..4cd3744
Binary files /dev/null and b/doc/html/classqgis_1_1pkcrop_1_1pkcrop__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy-members.html b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy-members.html
new file mode 100644
index 0000000..bd95ddf
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy-members.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkdiff_accuracy</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">pkdiff_accuracy</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkdiff_accuracy.pkdiff_accuracy Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CMFORMAT</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CMFORMAT_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CMOUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FORMAT</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ITERATE</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LABELCLASS</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LABELREF</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>REFERENCE</b> (defined in <a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html
new file mode 100644
index 0000000..6dcc7cb
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkdiff_accuracy.pkdiff_accuracy Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkdiff_accuracy</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">pkdiff_accuracy</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkdiff_accuracy.pkdiff_accuracy Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkdiff_accuracy.pkdiff_accuracy:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.png" border="0" usemap="#qgis_8pkdiff__accuracy_8pkdiff__accuracy_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkdiff_accuracy.pkdiff_accuracy:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.png" border="0" usemap="#qgis_8pkdiff__accuracy_8pkdiff__accuracy_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a176e2f67f3be853c9197d99f4cd16a1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a176e2f67f3be853c9197d99f4cd16a1c"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a176e2f67f3be853c9197d99f4cd16a1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a616318b2e7f62de1a61615b3192af1bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a616318b2e7f62de1a61615b3192af1bc"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a616318b2e7f62de1a61615b3192af1bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cf4fcd1ae42c2380732c1d6b88cbe21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cf4fcd1ae42c2380732c1d6b88cbe21"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a4cf4fcd1ae42c2380732c1d6b88cbe21"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aa1a0571329dbfd38e21385392bab8de1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1a0571329dbfd38e21385392bab8de1"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:aa1a0571329dbfd38e21385392bab8de1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a724b6dc67c93a4392de92dcfca91f701"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a724b6dc67c93a4392de92dcfca91f701"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a724b6dc67c93a4392de92dcfca91f701"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6cabc221036f66d975847866eaf14dd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cabc221036f66d975847866eaf14dd9"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a6cabc221036f66d975847866eaf14dd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdaa56e3a00e8ad32fffd8600b998b92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdaa56e3a00e8ad32fffd8600b998b92"></a>
+string </td><td class="memItemRight" valign="bottom"><b>REFERENCE</b> = "REFERENCE"</td></tr>
+<tr class="separator:afdaa56e3a00e8ad32fffd8600b998b92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a294e32e185d1f58bbde4ae40f62c55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a294e32e185d1f58bbde4ae40f62c55"></a>
+string </td><td class="memItemRight" valign="bottom"><b>ITERATE</b> = "ITERATE"</td></tr>
+<tr class="separator:a2a294e32e185d1f58bbde4ae40f62c55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99f5e02f16130f80143086252a38ee93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99f5e02f16130f80143086252a38ee93"></a>
+string </td><td class="memItemRight" valign="bottom"><b>LABELREF</b> = "LABELREF"</td></tr>
+<tr class="separator:a99f5e02f16130f80143086252a38ee93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a02de7992fb58aea0f628f8f3c1c937ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02de7992fb58aea0f628f8f3c1c937ac"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a02de7992fb58aea0f628f8f3c1c937ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22d37343b09f74019a836f1489d24c02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22d37343b09f74019a836f1489d24c02"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a22d37343b09f74019a836f1489d24c02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a792f4cf29ee2f6034149c0233b32f4ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a792f4cf29ee2f6034149c0233b32f4ff"></a>
+string </td><td class="memItemRight" valign="bottom"><b>CMOUTPUT</b> = "CMOUTPUT"</td></tr>
+<tr class="separator:a792f4cf29ee2f6034149c0233b32f4ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ed757ec7259c4b56bee1acc8bbe1a61"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ed757ec7259c4b56bee1acc8bbe1a61"></a>
+list </td><td class="memItemRight" valign="bottom"><b>CMFORMAT_OPTIONS</b> = ["ascii", "latex"]</td></tr>
+<tr class="separator:a2ed757ec7259c4b56bee1acc8bbe1a61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21c954c78e110bb1c93de64075afe182"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21c954c78e110bb1c93de64075afe182"></a>
+string </td><td class="memItemRight" valign="bottom"><b>CMFORMAT</b> = "CMFORMAT"</td></tr>
+<tr class="separator:a21c954c78e110bb1c93de64075afe182"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab922ac43189488cb53e46bccd0d02b6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab922ac43189488cb53e46bccd0d02b6a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FORMAT</b> = "FORMAT"</td></tr>
+<tr class="separator:ab922ac43189488cb53e46bccd0d02b6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7580c2442f384fcc956e14d936a3a305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7580c2442f384fcc956e14d936a3a305"></a>
+string </td><td class="memItemRight" valign="bottom"><b>LABELCLASS</b> = "LABELCLASS"</td></tr>
+<tr class="separator:a7580c2442f384fcc956e14d936a3a305"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83684b7d1751c3e507df1b2a61c06e7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83684b7d1751c3e507df1b2a61c06e7d"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a83684b7d1751c3e507df1b2a61c06e7d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkdiff__accuracy_8py_source.html#l00093">93</a> of file <a class="el" href="pkdiff__accuracy_8py_source.html">pkdiff_accuracy.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkdiff__accuracy_8py_source.html">pkdiff_accuracy.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.map b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.map
new file mode 100644
index 0000000..9f350cc
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkdiff_accuracy.pkdiff_accuracy" name="qgis.pkdiff_accuracy.pkdiff_accuracy">
+</map>
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.md5 b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.md5
new file mode 100644
index 0000000..b309139
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.md5
@@ -0,0 +1 @@
+ef701b67026c6319312d673a8645c11c
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.png b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.png
new file mode 100644
index 0000000..ec34fe7
Binary files /dev/null and b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.map b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.map
new file mode 100644
index 0000000..9f350cc
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkdiff_accuracy.pkdiff_accuracy" name="qgis.pkdiff_accuracy.pkdiff_accuracy">
+</map>
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.md5 b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.md5
new file mode 100644
index 0000000..b309139
--- /dev/null
+++ b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.md5
@@ -0,0 +1 @@
+ef701b67026c6319312d673a8645c11c
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.png b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.png
new file mode 100644
index 0000000..ec34fe7
Binary files /dev/null and b/doc/html/classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract-members.html b/doc/html/classqgis_1_1pkextract_1_1pkextract-members.html
new file mode 100644
index 0000000..36644fd
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract-members.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">pkextract</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkextract.pkextract Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BNDNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>BUFFER</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FORMAT</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ITERATE</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>POLYGON</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RULE</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RULE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SAMPLE</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SRCNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract.html b/doc/html/classqgis_1_1pkextract_1_1pkextract.html
new file mode 100644
index 0000000..83e83b2
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkextract.pkextract Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html">pkextract</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkextract_1_1pkextract-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkextract.pkextract Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkextract.pkextract:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract_1_1pkextract__inherit__graph.png" border="0" usemap="#qgis_8pkextract_8pkextract_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkextract.pkextract:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract_1_1pkextract__coll__graph.png" border="0" usemap="#qgis_8pkextract_8pkextract_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af5bc2523851ece32499990c6b9bd64f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5bc2523851ece32499990c6b9bd64f7"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:af5bc2523851ece32499990c6b9bd64f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afcbad22aed08a530d92a7eec5cf8040d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcbad22aed08a530d92a7eec5cf8040d"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:afcbad22aed08a530d92a7eec5cf8040d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2037cc4b42106e0bb97fcbb5d9eda7f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2037cc4b42106e0bb97fcbb5d9eda7f7"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a2037cc4b42106e0bb97fcbb5d9eda7f7"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a682fac32a3bbc98fe364fc9d2a46a9ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a682fac32a3bbc98fe364fc9d2a46a9ed"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a682fac32a3bbc98fe364fc9d2a46a9ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9995a84ad157685b2d27025cdad22b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9995a84ad157685b2d27025cdad22b0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:ab9995a84ad157685b2d27025cdad22b0"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a95e1c0317ddcaeda681980e70494a638"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95e1c0317ddcaeda681980e70494a638"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a95e1c0317ddcaeda681980e70494a638"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a152b797f760ae98e27adbad95c3a8729"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152b797f760ae98e27adbad95c3a8729"></a>
+string </td><td class="memItemRight" valign="bottom"><b>SAMPLE</b> = "SAMPLE"</td></tr>
+<tr class="separator:a152b797f760ae98e27adbad95c3a8729"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a00b2c269b8968376d90b0bf893df9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a00b2c269b8968376d90b0bf893df9f"></a>
+string </td><td class="memItemRight" valign="bottom"><b>ITERATE</b> = "ITERATE"</td></tr>
+<tr class="separator:a7a00b2c269b8968376d90b0bf893df9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aebb093e7f23d360f6657f8833f5c73f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebb093e7f23d360f6657f8833f5c73f3"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:aebb093e7f23d360f6657f8833f5c73f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78b93513da9f4173cd4218204a77d20a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78b93513da9f4173cd4218204a77d20a"></a>
+list </td><td class="memItemRight" valign="bottom"><b>RULE_OPTIONS</b> = ['centroid', 'point', 'mean', 'proportion', 'min', 'max', 'mode', 'sum', 'median', 'stdev', 'percentile']</td></tr>
+<tr class="separator:a78b93513da9f4173cd4218204a77d20a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af877cda3a19feb1f37d368d54680fd59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af877cda3a19feb1f37d368d54680fd59"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RULE</b> = "RULE"</td></tr>
+<tr class="separator:af877cda3a19feb1f37d368d54680fd59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac120a3debadb9cbd38552fcdefba2fb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac120a3debadb9cbd38552fcdefba2fb0"></a>
+string </td><td class="memItemRight" valign="bottom"><b>POLYGON</b> = "POLYGON"</td></tr>
+<tr class="separator:ac120a3debadb9cbd38552fcdefba2fb0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0052109b006ae33bb2014a05ffd9226f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0052109b006ae33bb2014a05ffd9226f"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BUFFER</b> = "BUFFER"</td></tr>
+<tr class="separator:a0052109b006ae33bb2014a05ffd9226f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4431ebf4ce448655fcc25366f15abd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4431ebf4ce448655fcc25366f15abd3"></a>
+string </td><td class="memItemRight" valign="bottom"><b>SRCNODATA</b> = "SRCNODATA"</td></tr>
+<tr class="separator:ab4431ebf4ce448655fcc25366f15abd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cb12c6b9a06225999395afa50b17987"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cb12c6b9a06225999395afa50b17987"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BNDNODATA</b> = "BNDNODATA"</td></tr>
+<tr class="separator:a1cb12c6b9a06225999395afa50b17987"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a741cc5d777e44ecde629f16a2499ae6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a741cc5d777e44ecde629f16a2499ae6c"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a741cc5d777e44ecde629f16a2499ae6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec905ae5cbf25bc9d1a4a592bff30311"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec905ae5cbf25bc9d1a4a592bff30311"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FORMAT</b> = "FORMAT"</td></tr>
+<tr class="separator:aec905ae5cbf25bc9d1a4a592bff30311"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkextract_8py_source.html#l00087">87</a> of file <a class="el" href="pkextract_8py_source.html">pkextract.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkextract_8py_source.html">pkextract.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.map b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.map
new file mode 100644
index 0000000..48a5d78
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract.pkextract" name="qgis.pkextract.pkextract">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.md5 b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.md5
new file mode 100644
index 0000000..90307c6
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.md5
@@ -0,0 +1 @@
+a6cee43ad8ab79b55c7d052fe8a940e4
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.png b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.png
new file mode 100644
index 0000000..bda8417
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract_1_1pkextract__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.map b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.map
new file mode 100644
index 0000000..48a5d78
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract.pkextract" name="qgis.pkextract.pkextract">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.md5 b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.md5
new file mode 100644
index 0000000..90307c6
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.md5
@@ -0,0 +1 @@
+a6cee43ad8ab79b55c7d052fe8a940e4
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.png b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.png
new file mode 100644
index 0000000..bda8417
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract_1_1pkextract__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid-members.html b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid-members.html
new file mode 100644
index 0000000..75fa1c3
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract_grid</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">pkextract_grid</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkextract_grid.pkextract_grid Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BNDNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>BUFFER</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FORMAT</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GRID</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>POLYGON</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RULE</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RULE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SRCNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid.html b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid.html
new file mode 100644
index 0000000..aa6acf6
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkextract_grid.pkextract_grid Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract_grid</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">pkextract_grid</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkextract__grid_1_1pkextract__grid-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkextract_grid.pkextract_grid Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkextract_grid.pkextract_grid:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.png" border="0" usemap="#qgis_8pkextract__grid_8pkextract__grid_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkextract_grid.pkextract_grid:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.png" border="0" usemap="#qgis_8pkextract__grid_8pkextract__grid_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa939f27236fbd7a0919bcb66b214b8c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa939f27236fbd7a0919bcb66b214b8c9"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:aa939f27236fbd7a0919bcb66b214b8c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e6b65b8611efef8459dfd6fe7637bab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6b65b8611efef8459dfd6fe7637bab"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a1e6b65b8611efef8459dfd6fe7637bab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a188bdc261506880ef885176843eb4437"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a188bdc261506880ef885176843eb4437"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a188bdc261506880ef885176843eb4437"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aa9a3742d6a3703e840c7bc463740fb46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9a3742d6a3703e840c7bc463740fb46"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:aa9a3742d6a3703e840c7bc463740fb46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a481d147d56925a1ab75e18b1c8f145fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a481d147d56925a1ab75e18b1c8f145fc"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a481d147d56925a1ab75e18b1c8f145fc"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ad359b649a15e3dbd0795278b984c6b23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad359b649a15e3dbd0795278b984c6b23"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:ad359b649a15e3dbd0795278b984c6b23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59fa1c64049fbed2cc81548cf5d0e3a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59fa1c64049fbed2cc81548cf5d0e3a8"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a59fa1c64049fbed2cc81548cf5d0e3a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff9ec53af87f8f28b82ea13707ed31a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff9ec53af87f8f28b82ea13707ed31a3"></a>
+list </td><td class="memItemRight" valign="bottom"><b>RULE_OPTIONS</b> = ['centroid', 'point', 'mean', 'proportion', 'custom', 'min', 'max', 'mode', 'sum', 'median', 'stdev', 'percentile']</td></tr>
+<tr class="separator:aff9ec53af87f8f28b82ea13707ed31a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b1c35d0229515eb8a9a4f74fbb27df2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b1c35d0229515eb8a9a4f74fbb27df2"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RULE</b> = "RULE"</td></tr>
+<tr class="separator:a8b1c35d0229515eb8a9a4f74fbb27df2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adaea5d0be7bd0435fdd3f6a42dc4c80f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaea5d0be7bd0435fdd3f6a42dc4c80f"></a>
+string </td><td class="memItemRight" valign="bottom"><b>POLYGON</b> = "POLYGON"</td></tr>
+<tr class="separator:adaea5d0be7bd0435fdd3f6a42dc4c80f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c07170b9f1999083d925f16c78e5ab1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c07170b9f1999083d925f16c78e5ab1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BUFFER</b> = "BUFFER"</td></tr>
+<tr class="separator:a1c07170b9f1999083d925f16c78e5ab1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a914f319e7a3734966056b0e396e4b0a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a914f319e7a3734966056b0e396e4b0a1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>GRID</b> = "GRID"</td></tr>
+<tr class="separator:a914f319e7a3734966056b0e396e4b0a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b5e358b248cb62615584a90d651fea1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b5e358b248cb62615584a90d651fea1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>SRCNODATA</b> = "SRCNODATA"</td></tr>
+<tr class="separator:a2b5e358b248cb62615584a90d651fea1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a458c8ea888792f63f8000afe8b6a5c6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a458c8ea888792f63f8000afe8b6a5c6e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BNDNODATA</b> = "BNDNODATA"</td></tr>
+<tr class="separator:a458c8ea888792f63f8000afe8b6a5c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a058e183281127755bd1d851b3788138c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a058e183281127755bd1d851b3788138c"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a058e183281127755bd1d851b3788138c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f170fcdea30859ad29048d61e90ce8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f170fcdea30859ad29048d61e90ce8b"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FORMAT</b> = "FORMAT"</td></tr>
+<tr class="separator:a4f170fcdea30859ad29048d61e90ce8b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkextract__grid_8py_source.html#l00087">87</a> of file <a class="el" href="pkextract__grid_8py_source.html">pkextract_grid.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkextract__grid_8py_source.html">pkextract_grid.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.map b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.map
new file mode 100644
index 0000000..3cd95da
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract_grid.pkextract_grid" name="qgis.pkextract_grid.pkextract_grid">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.md5 b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.md5
new file mode 100644
index 0000000..89e2358
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.md5
@@ -0,0 +1 @@
+5329576720c306ce1e73ae3720c000ef
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.png b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.png
new file mode 100644
index 0000000..76623bf
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.map b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.map
new file mode 100644
index 0000000..3cd95da
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract_grid.pkextract_grid" name="qgis.pkextract_grid.pkextract_grid">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.md5 b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.md5
new file mode 100644
index 0000000..89e2358
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.md5
@@ -0,0 +1 @@
+5329576720c306ce1e73ae3720c000ef
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.png b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.png
new file mode 100644
index 0000000..76623bf
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract__grid_1_1pkextract__grid__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random-members.html b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random-members.html
new file mode 100644
index 0000000..28f7526
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract_random</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">pkextract_random</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkextract_random.pkextract_random Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BNDNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>BUFFER</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FORMAT</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>POLYGON</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RANDOM</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RULE</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RULE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SRCNODATA</b> (defined in <a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random.html b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random.html
new file mode 100644
index 0000000..04a06d1
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkextract_random.pkextract_random Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkextract_random</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">pkextract_random</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkextract__random_1_1pkextract__random-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkextract_random.pkextract_random Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkextract_random.pkextract_random:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.png" border="0" usemap="#qgis_8pkextract__random_8pkextract__random_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkextract_random.pkextract_random:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.png" border="0" usemap="#qgis_8pkextract__random_8pkextract__random_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a12d5f2e69fb4d44ceaa3446295ae8c99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a12d5f2e69fb4d44ceaa3446295ae8c99"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a12d5f2e69fb4d44ceaa3446295ae8c99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a133963a211abc5c6413ea49184ffb1e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a133963a211abc5c6413ea49184ffb1e3"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a133963a211abc5c6413ea49184ffb1e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a381c05d2100529f51e11ab026270aecc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a381c05d2100529f51e11ab026270aecc"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a381c05d2100529f51e11ab026270aecc"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a82b3377677efcc9221be352e4048cafd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82b3377677efcc9221be352e4048cafd"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a82b3377677efcc9221be352e4048cafd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca5c7763815ce8ed031311ba3a789ca1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca5c7763815ce8ed031311ba3a789ca1"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:aca5c7763815ce8ed031311ba3a789ca1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aa12d40db6d4c1db34cb7c9f577f7c005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa12d40db6d4c1db34cb7c9f577f7c005"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:aa12d40db6d4c1db34cb7c9f577f7c005"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a085ee08ae2a482d8cbaff595892c54a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a085ee08ae2a482d8cbaff595892c54a8"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a085ee08ae2a482d8cbaff595892c54a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85a1e7cb635dcbd857a527768834e990"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85a1e7cb635dcbd857a527768834e990"></a>
+list </td><td class="memItemRight" valign="bottom"><b>RULE_OPTIONS</b> = ['centroid', 'point', 'mean', 'proportion', 'custom', 'min', 'max', 'mode', 'sum', 'median', 'stdev', 'percentile']</td></tr>
+<tr class="separator:a85a1e7cb635dcbd857a527768834e990"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afedf8577b67d791e03897075d8aa27ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afedf8577b67d791e03897075d8aa27ac"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RULE</b> = "RULE"</td></tr>
+<tr class="separator:afedf8577b67d791e03897075d8aa27ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36283f7921c233717d3f14c8db5c1f0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36283f7921c233717d3f14c8db5c1f0b"></a>
+string </td><td class="memItemRight" valign="bottom"><b>POLYGON</b> = "POLYGON"</td></tr>
+<tr class="separator:a36283f7921c233717d3f14c8db5c1f0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd4d3fcc09b1d4e24614be0afaefbf3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4d3fcc09b1d4e24614be0afaefbf3e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BUFFER</b> = "BUFFER"</td></tr>
+<tr class="separator:acd4d3fcc09b1d4e24614be0afaefbf3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcaa31fc02c279d8bbdb849104d939e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcaa31fc02c279d8bbdb849104d939e1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RANDOM</b> = "RANDOM"</td></tr>
+<tr class="separator:adcaa31fc02c279d8bbdb849104d939e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13dc6553f4a7a228ae4b94e810694889"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13dc6553f4a7a228ae4b94e810694889"></a>
+string </td><td class="memItemRight" valign="bottom"><b>SRCNODATA</b> = "SRCNODATA"</td></tr>
+<tr class="separator:a13dc6553f4a7a228ae4b94e810694889"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa443b2341e1b83d1c1cf56f95cdb36a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa443b2341e1b83d1c1cf56f95cdb36a0"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BNDNODATA</b> = "BNDNODATA"</td></tr>
+<tr class="separator:aa443b2341e1b83d1c1cf56f95cdb36a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfa85cb06c31b3bf3a7b543e3185368e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfa85cb06c31b3bf3a7b543e3185368e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:acfa85cb06c31b3bf3a7b543e3185368e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa9917fab3df26d469766bfa0ba603ee4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9917fab3df26d469766bfa0ba603ee4"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FORMAT</b> = "FORMAT"</td></tr>
+<tr class="separator:aa9917fab3df26d469766bfa0ba603ee4"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkextract__random_8py_source.html#l00087">87</a> of file <a class="el" href="pkextract__random_8py_source.html">pkextract_random.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkextract__random_8py_source.html">pkextract_random.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.map b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.map
new file mode 100644
index 0000000..8848b67
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract_random.pkextract_random" name="qgis.pkextract_random.pkextract_random">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.md5 b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.md5
new file mode 100644
index 0000000..1299426
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.md5
@@ -0,0 +1 @@
+e5c6a34fa04564968b7ad2a2a06e5c99
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.png b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.png
new file mode 100644
index 0000000..98425e1
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.map b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.map
new file mode 100644
index 0000000..8848b67
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkextract_random.pkextract_random" name="qgis.pkextract_random.pkextract_random">
+</map>
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.md5 b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.md5
new file mode 100644
index 0000000..1299426
--- /dev/null
+++ b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.md5
@@ -0,0 +1 @@
+e5c6a34fa04564968b7ad2a2a06e5c99
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.png b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.png
new file mode 100644
index 0000000..98425e1
Binary files /dev/null and b/doc/html/classqgis_1_1pkextract__random_1_1pkextract__random__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial-members.html b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial-members.html
new file mode 100644
index 0000000..d72d82a
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilter_spatial</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">pkfilter_spatial</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkfilter_spatial.pkfilter_spatial Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DIM</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>METHOD</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>METHOD_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PADDING</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PADDING_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html
new file mode 100644
index 0000000..3bdce2f
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkfilter_spatial.pkfilter_spatial Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilter_spatial</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">pkfilter_spatial</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkfilter_spatial.pkfilter_spatial Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkfilter_spatial.pkfilter_spatial:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.png" border="0" usemap="#qgis_8pkfilter__spatial_8pkfilter__spatial_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkfilter_spatial.pkfilter_spatial:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.png" border="0" usemap="#qgis_8pkfilter__spatial_8pkfilter__spatial_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8517fc04fd5f13c52e174efc16736f83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8517fc04fd5f13c52e174efc16736f83"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a8517fc04fd5f13c52e174efc16736f83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28a9650dcd013cb49b033a7cef101d43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28a9650dcd013cb49b033a7cef101d43"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a28a9650dcd013cb49b033a7cef101d43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a916cd41987cb92d488afcdfe6b42b5f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a916cd41987cb92d488afcdfe6b42b5f1"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a916cd41987cb92d488afcdfe6b42b5f1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:abb1b57dd0e00851665ec24a1df526ab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb1b57dd0e00851665ec24a1df526ab6"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:abb1b57dd0e00851665ec24a1df526ab6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab468aa6da0990f5884debd8bfbe27e21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab468aa6da0990f5884debd8bfbe27e21"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:ab468aa6da0990f5884debd8bfbe27e21"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aab43173cb62c16cccd2311cc2351ea72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab43173cb62c16cccd2311cc2351ea72"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:aab43173cb62c16cccd2311cc2351ea72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17420bcb37a89c2b89f4531ab6180de0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17420bcb37a89c2b89f4531ab6180de0"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a17420bcb37a89c2b89f4531ab6180de0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2ee51651a6a19a6922db57a4d72d549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2ee51651a6a19a6922db57a4d72d549"></a>
+list </td><td class="memItemRight" valign="bottom"><b>METHOD_OPTIONS</b> = ["none", "median", "var", "min", "max", "sum", "mean", "dilate", "erode", "close", "open", "homog ", "heterog ", "sobelx ", "sobely ", "sobelxy ", "sobelyx" , "smooth", "countid", "smoothnodata values", "thr [...]
+<tr class="separator:af2ee51651a6a19a6922db57a4d72d549"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17c23d864a0778596b436f6fdb864de5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17c23d864a0778596b436f6fdb864de5"></a>
+string </td><td class="memItemRight" valign="bottom"><b>METHOD</b> = "METHOD"</td></tr>
+<tr class="separator:a17c23d864a0778596b436f6fdb864de5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac31abd8117f135e1e7f43bcbdd8456c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac31abd8117f135e1e7f43bcbdd8456c9"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DIM</b> = "DIM"</td></tr>
+<tr class="separator:ac31abd8117f135e1e7f43bcbdd8456c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a241b1a8c1933b44e84da25c708a93e61"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241b1a8c1933b44e84da25c708a93e61"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a241b1a8c1933b44e84da25c708a93e61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a199b3a2d3018c67ea5046c7c38a9e974"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a199b3a2d3018c67ea5046c7c38a9e974"></a>
+list </td><td class="memItemRight" valign="bottom"><b>PADDING_OPTIONS</b> = ["symmetric", "replicate", "circular", "zero"]</td></tr>
+<tr class="separator:a199b3a2d3018c67ea5046c7c38a9e974"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a359fadbd1e77c36bfa229b1708b364a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a359fadbd1e77c36bfa229b1708b364a0"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PADDING</b> = "PADDING"</td></tr>
+<tr class="separator:a359fadbd1e77c36bfa229b1708b364a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a556dd033f6fbe62238ea73f26f142752"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a556dd033f6fbe62238ea73f26f142752"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a556dd033f6fbe62238ea73f26f142752"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9bc83f6c62747fafd30efecb13c5d62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9bc83f6c62747fafd30efecb13c5d62"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:ac9bc83f6c62747fafd30efecb13c5d62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1a3a4d8cc8523b66376f621feed86909"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a3a4d8cc8523b66376f621feed86909"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a1a3a4d8cc8523b66376f621feed86909"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkfilter__spatial_8py_source.html#l00038">38</a> of file <a class="el" href="pkfilter__spatial_8py_source.html">pkfilter_spatial.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkfilter__spatial_8py_source.html">pkfilter_spatial.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.map b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.map
new file mode 100644
index 0000000..f499189
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilter_spatial.pkfilter_spatial" name="qgis.pkfilter_spatial.pkfilter_spatial">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.md5 b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.md5
new file mode 100644
index 0000000..604caaa
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.md5
@@ -0,0 +1 @@
+bfd647e27b6d070eafc25fff7acac190
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.png b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.png
new file mode 100644
index 0000000..f4b8b25
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.map b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.map
new file mode 100644
index 0000000..f499189
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilter_spatial.pkfilter_spatial" name="qgis.pkfilter_spatial.pkfilter_spatial">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.md5 b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.md5
new file mode 100644
index 0000000..604caaa
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.md5
@@ -0,0 +1 @@
+bfd647e27b6d070eafc25fff7acac190
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.png b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.png
new file mode 100644
index 0000000..f4b8b25
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral-members.html b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral-members.html
new file mode 100644
index 0000000..0479574
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilter_spectral</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">pkfilter_spectral</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkfilter_spectral.pkfilter_spectral Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DZ</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>METHOD</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>METHOD_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PADDING</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PADDING_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html
new file mode 100644
index 0000000..2682955
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkfilter_spectral.pkfilter_spectral Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilter_spectral</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">pkfilter_spectral</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkfilter_spectral.pkfilter_spectral Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkfilter_spectral.pkfilter_spectral:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.png" border="0" usemap="#qgis_8pkfilter__spectral_8pkfilter__spectral_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkfilter_spectral.pkfilter_spectral:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.png" border="0" usemap="#qgis_8pkfilter__spectral_8pkfilter__spectral_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a67ee5ff2f1cb29dd15291e3ac0e5331c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67ee5ff2f1cb29dd15291e3ac0e5331c"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a67ee5ff2f1cb29dd15291e3ac0e5331c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af55a16e489b299317f90f5d15493efe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af55a16e489b299317f90f5d15493efe8"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:af55a16e489b299317f90f5d15493efe8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f7fba7c11f7644e71e8c41ae72fa06d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f7fba7c11f7644e71e8c41ae72fa06d"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a0f7fba7c11f7644e71e8c41ae72fa06d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a85b2c92f62e8260f9f51d8d8f10ff44a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85b2c92f62e8260f9f51d8d8f10ff44a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a85b2c92f62e8260f9f51d8d8f10ff44a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad21f52f89d4b6cbe06e4bf830a8f5678"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad21f52f89d4b6cbe06e4bf830a8f5678"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:ad21f52f89d4b6cbe06e4bf830a8f5678"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a20a6cee11be7abd9325358a564819d26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20a6cee11be7abd9325358a564819d26"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a20a6cee11be7abd9325358a564819d26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0be5ed45033cae15184219a6485a396b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0be5ed45033cae15184219a6485a396b"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a0be5ed45033cae15184219a6485a396b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88267ee3b205fbfc5e6823c693eb4e14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88267ee3b205fbfc5e6823c693eb4e14"></a>
+list </td><td class="memItemRight" valign="bottom"><b>METHOD_OPTIONS</b> = ["none", "median", "var", "min", "max", "sum", "mean", "dilate", "erode", "close", "open", "smooth", "density", "smoothnodata values", "threshold local filtering", "stdev", "dwt", "dwti", "dwt_cut", "dwt_cut_from" [...]
+<tr class="separator:a88267ee3b205fbfc5e6823c693eb4e14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15c6950b12c57ff838be9ba415e28c8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15c6950b12c57ff838be9ba415e28c8e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>METHOD</b> = "METHOD"</td></tr>
+<tr class="separator:a15c6950b12c57ff838be9ba415e28c8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeff20f41be397170c8e351d0aa74bc79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeff20f41be397170c8e351d0aa74bc79"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DZ</b> = "DZ"</td></tr>
+<tr class="separator:aeff20f41be397170c8e351d0aa74bc79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68d3c2ee722166fa9d8ddf3151fd8e55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68d3c2ee722166fa9d8ddf3151fd8e55"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a68d3c2ee722166fa9d8ddf3151fd8e55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a706e766bf47d4fab85e95879c6d657a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a706e766bf47d4fab85e95879c6d657a4"></a>
+list </td><td class="memItemRight" valign="bottom"><b>PADDING_OPTIONS</b> = ["symmetric", "replicate", "circular", "zero"]</td></tr>
+<tr class="separator:a706e766bf47d4fab85e95879c6d657a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9fcf789fcc3b4871f5419bbce84511a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9fcf789fcc3b4871f5419bbce84511a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PADDING</b> = "PADDING"</td></tr>
+<tr class="separator:ae9fcf789fcc3b4871f5419bbce84511a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8240d9589b85c133897e73224e6bcb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8240d9589b85c133897e73224e6bcb2"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:ab8240d9589b85c133897e73224e6bcb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43e8b1dc19ef86bee9a3c933f9f83529"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43e8b1dc19ef86bee9a3c933f9f83529"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:a43e8b1dc19ef86bee9a3c933f9f83529"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a916a5975c9e4fc03fdf55a8a02dcb91e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a916a5975c9e4fc03fdf55a8a02dcb91e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a916a5975c9e4fc03fdf55a8a02dcb91e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkfilter__spectral_8py_source.html#l00038">38</a> of file <a class="el" href="pkfilter__spectral_8py_source.html">pkfilter_spectral.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkfilter__spectral_8py_source.html">pkfilter_spectral.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.map b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.map
new file mode 100644
index 0000000..4d18a7a
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilter_spectral.pkfilter_spectral" name="qgis.pkfilter_spectral.pkfilter_spectral">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.md5 b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.md5
new file mode 100644
index 0000000..6216cd2
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.md5
@@ -0,0 +1 @@
+2a8400e38d6b76c1310fa9719dbc19a3
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.png b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.png
new file mode 100644
index 0000000..afd58d0
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.map b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.map
new file mode 100644
index 0000000..4d18a7a
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilter_spectral.pkfilter_spectral" name="qgis.pkfilter_spectral.pkfilter_spectral">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.md5 b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.md5
new file mode 100644
index 0000000..6216cd2
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.md5
@@ -0,0 +1 @@
+2a8400e38d6b76c1310fa9719dbc19a3
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.png b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.png
new file mode 100644
index 0000000..afd58d0
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem-members.html b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem-members.html
new file mode 100644
index 0000000..1fe1f7f
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem-members.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilterdem</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">pkfilterdem</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkfilterdem.pkfilterdem Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DIM</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FILTER</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FILTER_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem.html b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem.html
new file mode 100644
index 0000000..ce98f69
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkfilterdem.pkfilterdem Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkfilterdem</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">pkfilterdem</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkfilterdem_1_1pkfilterdem-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkfilterdem.pkfilterdem Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkfilterdem.pkfilterdem:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.png" border="0" usemap="#qgis_8pkfilterdem_8pkfilterdem_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkfilterdem.pkfilterdem:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.png" border="0" usemap="#qgis_8pkfilterdem_8pkfilterdem_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0f4ab9a21d0270b9215bdeadd24be172"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f4ab9a21d0270b9215bdeadd24be172"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a0f4ab9a21d0270b9215bdeadd24be172"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a063c9e4fe1b7958eabc4bfaf5175de14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a063c9e4fe1b7958eabc4bfaf5175de14"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a063c9e4fe1b7958eabc4bfaf5175de14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad836b1fe6c57ec07645d3a6db9c18bf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad836b1fe6c57ec07645d3a6db9c18bf0"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:ad836b1fe6c57ec07645d3a6db9c18bf0"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a6cda59e12b5d35384148d3a9e50a380c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cda59e12b5d35384148d3a9e50a380c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a6cda59e12b5d35384148d3a9e50a380c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a362a12d7bac87e1ef6bd3b0921893e4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a362a12d7bac87e1ef6bd3b0921893e4b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a362a12d7bac87e1ef6bd3b0921893e4b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ac63e9625819c3df9a3f210a44577de8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac63e9625819c3df9a3f210a44577de8d"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:ac63e9625819c3df9a3f210a44577de8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1b0b8b6543976e0436e35269673d135"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1b0b8b6543976e0436e35269673d135"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:af1b0b8b6543976e0436e35269673d135"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36f24e3cf45c53076e40bf050690c9e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f24e3cf45c53076e40bf050690c9e4"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DIM</b> = "DIM"</td></tr>
+<tr class="separator:a36f24e3cf45c53076e40bf050690c9e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93d222282debe7b1e835fe457e42668e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93d222282debe7b1e835fe457e42668e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a93d222282debe7b1e835fe457e42668e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a609a8357c611c1b7291714359d293205"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a609a8357c611c1b7291714359d293205"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['Float32','Byte','Int16','UInt16','UInt32','Int32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:a609a8357c611c1b7291714359d293205"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa684f5dff3236fff634fd644507ead3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa684f5dff3236fff634fd644507ead3f"></a>
+list </td><td class="memItemRight" valign="bottom"><b>FILTER_OPTIONS</b> = ["promorph"]</td></tr>
+<tr class="separator:aa684f5dff3236fff634fd644507ead3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a231a73cc70938e1e8c0fbfe2ad354666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a231a73cc70938e1e8c0fbfe2ad354666"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FILTER</b> = "FILTER"</td></tr>
+<tr class="separator:a231a73cc70938e1e8c0fbfe2ad354666"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d539783f415aef729ad8eec26d1befc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d539783f415aef729ad8eec26d1befc"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a8d539783f415aef729ad8eec26d1befc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkfilterdem_8py_source.html#l00039">39</a> of file <a class="el" href="pkfilterdem_8py_source.html">pkfilterdem.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkfilterdem_8py_source.html">pkfilterdem.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.map b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.map
new file mode 100644
index 0000000..bd0108c
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilterdem.pkfilterdem" name="qgis.pkfilterdem.pkfilterdem">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.md5 b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.md5
new file mode 100644
index 0000000..272b3fe
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.md5
@@ -0,0 +1 @@
+6848dbb8564bac7bb85324114cc2e769
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.png b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.png
new file mode 100644
index 0000000..70e9346
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.map b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.map
new file mode 100644
index 0000000..bd0108c
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkfilterdem.pkfilterdem" name="qgis.pkfilterdem.pkfilterdem">
+</map>
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.md5 b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.md5
new file mode 100644
index 0000000..272b3fe
--- /dev/null
+++ b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.md5
@@ -0,0 +1 @@
+6848dbb8564bac7bb85324114cc2e769
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.png b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.png
new file mode 100644
index 0000000..70e9346
Binary files /dev/null and b/doc/html/classqgis_1_1pkfilterdem_1_1pkfilterdem__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask-members.html b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask-members.html
new file mode 100644
index 0000000..de6cd2d
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask-members.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkgetmask</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">pkgetmask</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkgetmask.pkgetmask Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BAND</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DATA</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MAX</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MIN</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OPERATOR</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OPERATOR_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask.html b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask.html
new file mode 100644
index 0000000..fe8ce80
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkgetmask.pkgetmask Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkgetmask</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">pkgetmask</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkgetmask_1_1pkgetmask-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkgetmask.pkgetmask Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkgetmask.pkgetmask:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.png" border="0" usemap="#qgis_8pkgetmask_8pkgetmask_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkgetmask.pkgetmask:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.png" border="0" usemap="#qgis_8pkgetmask_8pkgetmask_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ae9c628f2f53021c654f6cf1a597b3c54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9c628f2f53021c654f6cf1a597b3c54"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:ae9c628f2f53021c654f6cf1a597b3c54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d990f23726755e8310f9c6ba3be21a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d990f23726755e8310f9c6ba3be21a6"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a4d990f23726755e8310f9c6ba3be21a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6db8620a4e55fda9dfbda6e86b052666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6db8620a4e55fda9dfbda6e86b052666"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a6db8620a4e55fda9dfbda6e86b052666"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:ab9a736f64545f8ac36bbf1eae8576cd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9a736f64545f8ac36bbf1eae8576cd5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:ab9a736f64545f8ac36bbf1eae8576cd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0e0d197447b16bee323b2e9fdaa876b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0e0d197447b16bee323b2e9fdaa876b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:aa0e0d197447b16bee323b2e9fdaa876b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a1990e1aab12f8a84394b7c44c9c78efd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1990e1aab12f8a84394b7c44c9c78efd"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a1990e1aab12f8a84394b7c44c9c78efd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad45ff2519baa645c8bf75e063fc2939d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad45ff2519baa645c8bf75e063fc2939d"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BAND</b> = "BAND"</td></tr>
+<tr class="separator:ad45ff2519baa645c8bf75e063fc2939d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a86f16ca18fe18083446f0a2fdab1c989"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86f16ca18fe18083446f0a2fdab1c989"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MIN</b> = "MIN"</td></tr>
+<tr class="separator:a86f16ca18fe18083446f0a2fdab1c989"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74d4d91d62405ae1cb788e0fc52b64c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74d4d91d62405ae1cb788e0fc52b64c6"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MAX</b> = "MAX"</td></tr>
+<tr class="separator:a74d4d91d62405ae1cb788e0fc52b64c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a418e9d844d597fb600d16afc0b7e70cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a418e9d844d597fb600d16afc0b7e70cd"></a>
+list </td><td class="memItemRight" valign="bottom"><b>OPERATOR_OPTIONS</b> = ["OR", "AND"]</td></tr>
+<tr class="separator:a418e9d844d597fb600d16afc0b7e70cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a1d0302fefa56238c42d3ea6f747941"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a1d0302fefa56238c42d3ea6f747941"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OPERATOR</b> = "OPERATOR"</td></tr>
+<tr class="separator:a2a1d0302fefa56238c42d3ea6f747941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a579e059d072a57554c9a61180a9fd08c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a579e059d072a57554c9a61180a9fd08c"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DATA</b> = "DATA"</td></tr>
+<tr class="separator:a579e059d072a57554c9a61180a9fd08c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab851d0b2d6acf47df89a9d89373f804b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab851d0b2d6acf47df89a9d89373f804b"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:ab851d0b2d6acf47df89a9d89373f804b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5eedd82f4dda4923e8560ff43b657f73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5eedd82f4dda4923e8560ff43b657f73"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a5eedd82f4dda4923e8560ff43b657f73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a091f5ee5165bde746ed9841909d06d5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a091f5ee5165bde746ed9841909d06d5c"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a091f5ee5165bde746ed9841909d06d5c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f1272eeb8cf07f429440cdf387c2d17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f1272eeb8cf07f429440cdf387c2d17"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:a7f1272eeb8cf07f429440cdf387c2d17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c46da38f871a5211efe90216afff4ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c46da38f871a5211efe90216afff4ef"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a7c46da38f871a5211efe90216afff4ef"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkgetmask_8py_source.html#l00038">38</a> of file <a class="el" href="pkgetmask_8py_source.html">pkgetmask.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkgetmask_8py_source.html">pkgetmask.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.map b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.map
new file mode 100644
index 0000000..59b1816
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkgetmask.pkgetmask" name="qgis.pkgetmask.pkgetmask">
+</map>
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.md5 b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.md5
new file mode 100644
index 0000000..6f3ee59
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.md5
@@ -0,0 +1 @@
+9473b48fc4d0e2ccad567f96a6c088dc
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.png b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.png
new file mode 100644
index 0000000..86c161e
Binary files /dev/null and b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.map b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.map
new file mode 100644
index 0000000..59b1816
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkgetmask.pkgetmask" name="qgis.pkgetmask.pkgetmask">
+</map>
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.md5 b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.md5
new file mode 100644
index 0000000..6f3ee59
--- /dev/null
+++ b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.md5
@@ -0,0 +1 @@
+9473b48fc4d0e2ccad567f96a6c088dc
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.png b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.png
new file mode 100644
index 0000000..86c161e
Binary files /dev/null and b/doc/html/classqgis_1_1pkgetmask_1_1pkgetmask__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img-members.html b/doc/html/classqgis_1_1pklas2img_1_1pklas2img-members.html
new file mode 100644
index 0000000..bc22529
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pklas2img</b></li><li class="navelem"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">pklas2img</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pklas2img.pklas2img Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ATTRIBUTE</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ATTRIBUTE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>COMPOSITE</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>COMPOSITE_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DX</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DY</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FILTER</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FILTER_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PERCENTILE</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img.html b/doc/html/classqgis_1_1pklas2img_1_1pklas2img.html
new file mode 100644
index 0000000..841b8f2
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pklas2img.pklas2img Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pklas2img</b></li><li class="navelem"><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html">pklas2img</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pklas2img_1_1pklas2img-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pklas2img.pklas2img Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pklas2img.pklas2img:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.png" border="0" usemap="#qgis_8pklas2img_8pklas2img_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pklas2img.pklas2img:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pklas2img_1_1pklas2img__coll__graph.png" border="0" usemap="#qgis_8pklas2img_8pklas2img_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a32b88cd9bfc7602df94418d953cc44a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32b88cd9bfc7602df94418d953cc44a7"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a32b88cd9bfc7602df94418d953cc44a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d29035252b68c6d64910c363743357c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d29035252b68c6d64910c363743357c"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a9d29035252b68c6d64910c363743357c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adae08f5a8a287a1584d18aed0a0d994d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adae08f5a8a287a1584d18aed0a0d994d"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:adae08f5a8a287a1584d18aed0a0d994d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aa41f6aa59efd28521fd49a8f2740917d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa41f6aa59efd28521fd49a8f2740917d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:aa41f6aa59efd28521fd49a8f2740917d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5504eac2d342bdae408e9ce3d51a6a6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5504eac2d342bdae408e9ce3d51a6a6a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a5504eac2d342bdae408e9ce3d51a6a6a"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a7b57ce9958d387ac60e2564b468c9121"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b57ce9958d387ac60e2564b468c9121"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a7b57ce9958d387ac60e2564b468c9121"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b94eb994fa787dc2a90c4df618b7192"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b94eb994fa787dc2a90c4df618b7192"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a6b94eb994fa787dc2a90c4df618b7192"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0409e973a7b8cdf6057c607a998354a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0409e973a7b8cdf6057c607a998354a5"></a>
+list </td><td class="memItemRight" valign="bottom"><b>ATTRIBUTE_OPTIONS</b> = ["z","intensity", "return", "nreturn"]</td></tr>
+<tr class="separator:a0409e973a7b8cdf6057c607a998354a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad00b69bd446875f229cadeb69ac6a8f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00b69bd446875f229cadeb69ac6a8f7"></a>
+list </td><td class="memItemRight" valign="bottom"><b>COMPOSITE_OPTIONS</b> = ["last", "min", "max", "median", "mean", "sum", "first", "profile" "percentile", "height", "values", "percentile", "number"]</td></tr>
+<tr class="separator:ad00b69bd446875f229cadeb69ac6a8f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7ef9219de8e84423760309190deb56e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7ef9219de8e84423760309190deb56e"></a>
+list </td><td class="memItemRight" valign="bottom"><b>FILTER_OPTIONS</b> = ["all","first","last","single","multiple"]</td></tr>
+<tr class="separator:ac7ef9219de8e84423760309190deb56e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a130c1acc3e9b615079634fd9685b8dec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a130c1acc3e9b615079634fd9685b8dec"></a>
+string </td><td class="memItemRight" valign="bottom"><b>ATTRIBUTE</b> = "ATTRIBUTE"</td></tr>
+<tr class="separator:a130c1acc3e9b615079634fd9685b8dec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0c885711f536f96a5c63d535f1bb878"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0c885711f536f96a5c63d535f1bb878"></a>
+string </td><td class="memItemRight" valign="bottom"><b>COMPOSITE</b> = "COMPOSITE"</td></tr>
+<tr class="separator:ae0c885711f536f96a5c63d535f1bb878"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63d7f043f1912491e2e34857ac4b498a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63d7f043f1912491e2e34857ac4b498a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>FILTER</b> = "FILTER"</td></tr>
+<tr class="separator:a63d7f043f1912491e2e34857ac4b498a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a320a11359d403b61b67cdf113770723e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a320a11359d403b61b67cdf113770723e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PERCENTILE</b> = "PERCENTILE"</td></tr>
+<tr class="separator:a320a11359d403b61b67cdf113770723e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6aa0d7c47f3a6c8b9eb4375049e69824"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6aa0d7c47f3a6c8b9eb4375049e69824"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DX</b> = "DX"</td></tr>
+<tr class="separator:a6aa0d7c47f3a6c8b9eb4375049e69824"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a165ee10778d2f0bdbe5abfae21f36d8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a165ee10778d2f0bdbe5abfae21f36d8f"></a>
+string </td><td class="memItemRight" valign="bottom"><b>DY</b> = "DY"</td></tr>
+<tr class="separator:a165ee10778d2f0bdbe5abfae21f36d8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cbf569ff7b068dade13fb6dc0ede553"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cbf569ff7b068dade13fb6dc0ede553"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a9cbf569ff7b068dade13fb6dc0ede553"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60a126c8d52d3911d75f9e67231e3730"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60a126c8d52d3911d75f9e67231e3730"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a60a126c8d52d3911d75f9e67231e3730"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2c9b209aebe166c5202551470dcf7f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2c9b209aebe166c5202551470dcf7f0"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['Float32','Byte','Int16','UInt16','UInt32','Int32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:ab2c9b209aebe166c5202551470dcf7f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cf9933f7aca1f1ace4957cbde0f958e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cf9933f7aca1f1ace4957cbde0f958e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a8cf9933f7aca1f1ace4957cbde0f958e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pklas2img_8py_source.html#l00039">39</a> of file <a class="el" href="pklas2img_8py_source.html">pklas2img.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pklas2img_8py_source.html">pklas2img.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.map b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.map
new file mode 100644
index 0000000..cf047a3
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pklas2img.pklas2img" name="qgis.pklas2img.pklas2img">
+</map>
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.md5 b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.md5
new file mode 100644
index 0000000..e6c946a
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.md5
@@ -0,0 +1 @@
+3d928e691b28993511fa3bf891620dcc
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.png b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.png
new file mode 100644
index 0000000..d7b1148
Binary files /dev/null and b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.map b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.map
new file mode 100644
index 0000000..cf047a3
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pklas2img.pklas2img" name="qgis.pklas2img.pklas2img">
+</map>
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.md5 b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.md5
new file mode 100644
index 0000000..e6c946a
--- /dev/null
+++ b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.md5
@@ -0,0 +1 @@
+3d928e691b28993511fa3bf891620dcc
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.png b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.png
new file mode 100644
index 0000000..d7b1148
Binary files /dev/null and b/doc/html/classqgis_1_1pklas2img_1_1pklas2img__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass-members.html b/doc/html/classqgis_1_1pkreclass_1_1pkreclass-members.html
new file mode 100644
index 0000000..2f87a07
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkreclass</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">pkreclass</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pkreclass.pkreclass Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BAND</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CLASS</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MASK</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MSKNODATA</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RECLASS</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass.html b/doc/html/classqgis_1_1pkreclass_1_1pkreclass.html
new file mode 100644
index 0000000..8dcdf80
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pkreclass.pkreclass Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pkreclass</b></li><li class="navelem"><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html">pkreclass</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pkreclass_1_1pkreclass-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pkreclass.pkreclass Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pkreclass.pkreclass:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.png" border="0" usemap="#qgis_8pkreclass_8pkreclass_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pkreclass.pkreclass:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pkreclass_1_1pkreclass__coll__graph.png" border="0" usemap="#qgis_8pkreclass_8pkreclass_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1e3b6410096d899e755b4c3b8ceb2b63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e3b6410096d899e755b4c3b8ceb2b63"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a1e3b6410096d899e755b4c3b8ceb2b63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa10069a49d180825b9d299868cdee9b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa10069a49d180825b9d299868cdee9b5"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:aa10069a49d180825b9d299868cdee9b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab28b6ffbe5ed1d67d6f569af5af158ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab28b6ffbe5ed1d67d6f569af5af158ca"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:ab28b6ffbe5ed1d67d6f569af5af158ca"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a2d3e9d7948ff61e49ecaa646ace3b51c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d3e9d7948ff61e49ecaa646ace3b51c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:a2d3e9d7948ff61e49ecaa646ace3b51c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5474989e8a32b4f84da61b1030d928d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5474989e8a32b4f84da61b1030d928d4"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a5474989e8a32b4f84da61b1030d928d4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aac30b4b09ec8af2b365ffc60dd969fa4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac30b4b09ec8af2b365ffc60dd969fa4"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:aac30b4b09ec8af2b365ffc60dd969fa4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac06924e2f6d01acffb97d97f5ed30550"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac06924e2f6d01acffb97d97f5ed30550"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:ac06924e2f6d01acffb97d97f5ed30550"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6eee06a836cf0cda3bb7d4e471dd0ff8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eee06a836cf0cda3bb7d4e471dd0ff8"></a>
+string </td><td class="memItemRight" valign="bottom"><b>CLASS</b> = "CLASS"</td></tr>
+<tr class="separator:a6eee06a836cf0cda3bb7d4e471dd0ff8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a670784309f5dde13aa8d7c8956b85501"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a670784309f5dde13aa8d7c8956b85501"></a>
+string </td><td class="memItemRight" valign="bottom"><b>BAND</b> = "BAND"</td></tr>
+<tr class="separator:a670784309f5dde13aa8d7c8956b85501"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab677fcc1481ee0f4804a64ba5a9ccf41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab677fcc1481ee0f4804a64ba5a9ccf41"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RECLASS</b> = "RECLASS"</td></tr>
+<tr class="separator:ab677fcc1481ee0f4804a64ba5a9ccf41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d00f95e83e048f830d3541e0006412a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d00f95e83e048f830d3541e0006412a"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MASK</b> = "MASK"</td></tr>
+<tr class="separator:a8d00f95e83e048f830d3541e0006412a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9cb8a5b163ad79ff18263dac1c27ea9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9cb8a5b163ad79ff18263dac1c27ea9"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MSKNODATA</b> = "MSKNODATA"</td></tr>
+<tr class="separator:ad9cb8a5b163ad79ff18263dac1c27ea9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a377d3003bdce66a2ef2083bcd439950f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a377d3003bdce66a2ef2083bcd439950f"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a377d3003bdce66a2ef2083bcd439950f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b77eea90f50504357742100c95ac454"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b77eea90f50504357742100c95ac454"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a7b77eea90f50504357742100c95ac454"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8727418e991db1564e423d9ebeb2c89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8727418e991db1564e423d9ebeb2c89"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:af8727418e991db1564e423d9ebeb2c89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10e1786759936dd074581841f73c2505"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10e1786759936dd074581841f73c2505"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:a10e1786759936dd074581841f73c2505"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pkreclass_8py_source.html#l00038">38</a> of file <a class="el" href="pkreclass_8py_source.html">pkreclass.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pkreclass_8py_source.html">pkreclass.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.map b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.map
new file mode 100644
index 0000000..d9022ef
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkreclass.pkreclass" name="qgis.pkreclass.pkreclass">
+</map>
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.md5 b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.md5
new file mode 100644
index 0000000..6e72abe
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.md5
@@ -0,0 +1 @@
+00293936f75bf36c5fc69d4acd9d76a7
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.png b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.png
new file mode 100644
index 0000000..6e99d45
Binary files /dev/null and b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.map b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.map
new file mode 100644
index 0000000..d9022ef
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pkreclass.pkreclass" name="qgis.pkreclass.pkreclass">
+</map>
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.md5 b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.md5
new file mode 100644
index 0000000..6e72abe
--- /dev/null
+++ b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.md5
@@ -0,0 +1 @@
+00293936f75bf36c5fc69d4acd9d76a7
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.png b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.png
new file mode 100644
index 0000000..6e99d45
Binary files /dev/null and b/doc/html/classqgis_1_1pkreclass_1_1pkreclass__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask-members.html b/doc/html/classqgis_1_1pksetmask_1_1pksetmask-members.html
new file mode 100644
index 0000000..e18d11b
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pksetmask</b></li><li class="navelem"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">pksetmask</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pksetmask.pksetmask Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MASK</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MSKBAND</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MSKNODATA</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>NODATA</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OPERATOR</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OPERATOR_OPTIONS</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RTYPE</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>TYPE</b> (defined in <a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask.html b/doc/html/classqgis_1_1pksetmask_1_1pksetmask.html
new file mode 100644
index 0000000..1f35eb3
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pksetmask.pksetmask Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pksetmask</b></li><li class="navelem"><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html">pksetmask</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pksetmask_1_1pksetmask-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pksetmask.pksetmask Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pksetmask.pksetmask:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.png" border="0" usemap="#qgis_8pksetmask_8pksetmask_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pksetmask.pksetmask:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pksetmask_1_1pksetmask__coll__graph.png" border="0" usemap="#qgis_8pksetmask_8pksetmask_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a539b2bbbabaa1ea1ac1dcdcc60a87669"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a539b2bbbabaa1ea1ac1dcdcc60a87669"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:a539b2bbbabaa1ea1ac1dcdcc60a87669"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af821d49d5dc0751df801aa77f3c45439"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af821d49d5dc0751df801aa77f3c45439"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:af821d49d5dc0751df801aa77f3c45439"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a525d67ecea4615d5e54bd6c2d6d7a911"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a525d67ecea4615d5e54bd6c2d6d7a911"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a525d67ecea4615d5e54bd6c2d6d7a911"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:ac356f16f384fdc78b5419cdbaaac496d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac356f16f384fdc78b5419cdbaaac496d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:ac356f16f384fdc78b5419cdbaaac496d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26a6204cff0e0414422bddb6d714c8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26a6204cff0e0414422bddb6d714c8d5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a26a6204cff0e0414422bddb6d714c8d5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a64b4d0cf98dae937536135be3220011d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64b4d0cf98dae937536135be3220011d"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a64b4d0cf98dae937536135be3220011d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a926a151acae3b3947f8f659c08901a0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a926a151acae3b3947f8f659c08901a0e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MASK</b> = "MASK"</td></tr>
+<tr class="separator:a926a151acae3b3947f8f659c08901a0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd621c70d1c2fc2f29a598ca94f52209"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd621c70d1c2fc2f29a598ca94f52209"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MSKNODATA</b> = "MSKNODATA"</td></tr>
+<tr class="separator:afd621c70d1c2fc2f29a598ca94f52209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72fd0200a13dd69eb8a8e8664288f8f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72fd0200a13dd69eb8a8e8664288f8f3"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MSKBAND</b> = "MSKBAND"</td></tr>
+<tr class="separator:a72fd0200a13dd69eb8a8e8664288f8f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ec16c72e434e986dc7127edd22a8756"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ec16c72e434e986dc7127edd22a8756"></a>
+list </td><td class="memItemRight" valign="bottom"><b>OPERATOR_OPTIONS</b> = ["=","<",">","!"]</td></tr>
+<tr class="separator:a0ec16c72e434e986dc7127edd22a8756"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68d2802febad55d67d4848ee6553d21e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68d2802febad55d67d4848ee6553d21e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OPERATOR</b> = "OPERATOR"</td></tr>
+<tr class="separator:a68d2802febad55d67d4848ee6553d21e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7db2c15757ac66baf866fcaaba9f27ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7db2c15757ac66baf866fcaaba9f27ac"></a>
+string </td><td class="memItemRight" valign="bottom"><b>NODATA</b> = "NODATA"</td></tr>
+<tr class="separator:a7db2c15757ac66baf866fcaaba9f27ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f43a43129a59344782bd62b9984045b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f43a43129a59344782bd62b9984045b"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:a1f43a43129a59344782bd62b9984045b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a53adabeb756e8f6c38b739a182b4c351"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53adabeb756e8f6c38b739a182b4c351"></a>
+string </td><td class="memItemRight" valign="bottom"><b>RTYPE</b> = 'RTYPE'</td></tr>
+<tr class="separator:a53adabeb756e8f6c38b739a182b4c351"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c222c8118aa51967806a48f9e67151a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c222c8118aa51967806a48f9e67151a"></a>
+list </td><td class="memItemRight" valign="bottom"><b>TYPE</b> = ['none', 'Byte','Int16','UInt16','UInt32','Int32','Float32','Float64','CInt16','CInt32','CFloat32','CFloat64']</td></tr>
+<tr class="separator:a4c222c8118aa51967806a48f9e67151a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae31305e3b79571cc6475b47cf9c4762e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae31305e3b79571cc6475b47cf9c4762e"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:ae31305e3b79571cc6475b47cf9c4762e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pksetmask_8py_source.html#l00038">38</a> of file <a class="el" href="pksetmask_8py_source.html">pksetmask.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pksetmask_8py_source.html">pksetmask.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.map b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.map
new file mode 100644
index 0000000..36c5ba5
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pksetmask.pksetmask" name="qgis.pksetmask.pksetmask">
+</map>
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.md5 b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.md5
new file mode 100644
index 0000000..eb543ff
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.md5
@@ -0,0 +1 @@
+55dc897a815a6313e823df16f9c9b716
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.png b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.png
new file mode 100644
index 0000000..e502e7f
Binary files /dev/null and b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.map b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.map
new file mode 100644
index 0000000..36c5ba5
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pksetmask.pksetmask" name="qgis.pksetmask.pksetmask">
+</map>
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.md5 b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.md5
new file mode 100644
index 0000000..eb543ff
--- /dev/null
+++ b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.md5
@@ -0,0 +1 @@
+55dc897a815a6313e823df16f9c9b716
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.png b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.png
new file mode 100644
index 0000000..e502e7f
Binary files /dev/null and b/doc/html/classqgis_1_1pksetmask_1_1pksetmask__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm-members.html b/doc/html/classqgis_1_1pksvm_1_1pksvm-members.html
new file mode 100644
index 0000000..b8aceb6
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm-members.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pksvm</b></li><li class="navelem"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">pksvm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pksvm.pksvm Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cliName</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>COST</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>defineCharacteristics</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>EXTRA</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GAMMA</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>group</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INPUT</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ITERATE</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LABEL</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MASK</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MSKNODATA</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OUTPUT</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>processAlgorithm</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TRAINING</b> (defined in <a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm.html b/doc/html/classqgis_1_1pksvm_1_1pksvm.html
new file mode 100644
index 0000000..f18d2e2
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pksvm.pksvm Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pksvm</b></li><li class="navelem"><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html">pksvm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pksvm_1_1pksvm-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pksvm.pksvm Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pksvm.pksvm:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pksvm_1_1pksvm__inherit__graph.png" border="0" usemap="#qgis_8pksvm_8pksvm_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pksvm.pksvm:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pksvm_1_1pksvm__coll__graph.png" border="0" usemap="#qgis_8pksvm_8pksvm_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac0504ade82ce87e0d386db1a50812bf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0504ade82ce87e0d386db1a50812bf9"></a>
+def </td><td class="memItemRight" valign="bottom"><b>cliName</b></td></tr>
+<tr class="separator:ac0504ade82ce87e0d386db1a50812bf9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e00e56ee9a56a8f4010913f94e0bdb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e00e56ee9a56a8f4010913f94e0bdb9"></a>
+def </td><td class="memItemRight" valign="bottom"><b>defineCharacteristics</b></td></tr>
+<tr class="separator:a2e00e56ee9a56a8f4010913f94e0bdb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ea8c3f049900620ceebb3b1c3dea838"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ea8c3f049900620ceebb3b1c3dea838"></a>
+def </td><td class="memItemRight" valign="bottom"><b>processAlgorithm</b></td></tr>
+<tr class="separator:a9ea8c3f049900620ceebb3b1c3dea838"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aa5c7d4dda4c1b0316e26dfb3c8f4cf8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5c7d4dda4c1b0316e26dfb3c8f4cf8f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>name</b></td></tr>
+<tr class="separator:aa5c7d4dda4c1b0316e26dfb3c8f4cf8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a33cc5cc741eadc78c3fa6687592cd810"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33cc5cc741eadc78c3fa6687592cd810"></a>
+ </td><td class="memItemRight" valign="bottom"><b>group</b></td></tr>
+<tr class="separator:a33cc5cc741eadc78c3fa6687592cd810"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a70980660386dbf0e5a4abbaee81b20b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70980660386dbf0e5a4abbaee81b20b7"></a>
+string </td><td class="memItemRight" valign="bottom"><b>INPUT</b> = "INPUT"</td></tr>
+<tr class="separator:a70980660386dbf0e5a4abbaee81b20b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52e9137080458d2fa51683e03d046418"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52e9137080458d2fa51683e03d046418"></a>
+string </td><td class="memItemRight" valign="bottom"><b>TRAINING</b> = "TRAINING"</td></tr>
+<tr class="separator:a52e9137080458d2fa51683e03d046418"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a655f6139a543113d1dd2ad8b11f773b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a655f6139a543113d1dd2ad8b11f773b9"></a>
+string </td><td class="memItemRight" valign="bottom"><b>ITERATE</b> = "ITERATE"</td></tr>
+<tr class="separator:a655f6139a543113d1dd2ad8b11f773b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a426fe91136cb5f3e7ebbeba2c4199501"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a426fe91136cb5f3e7ebbeba2c4199501"></a>
+string </td><td class="memItemRight" valign="bottom"><b>LABEL</b> = "LABEL"</td></tr>
+<tr class="separator:a426fe91136cb5f3e7ebbeba2c4199501"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6c3b8cccb265ca1cfadeaa79fed04a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6c3b8cccb265ca1cfadeaa79fed04a1"></a>
+string </td><td class="memItemRight" valign="bottom"><b>GAMMA</b> = "GAMMA"</td></tr>
+<tr class="separator:ab6c3b8cccb265ca1cfadeaa79fed04a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3ec104ab7505d3115c8aa868b4f8cba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3ec104ab7505d3115c8aa868b4f8cba"></a>
+string </td><td class="memItemRight" valign="bottom"><b>COST</b> = "COST"</td></tr>
+<tr class="separator:ab3ec104ab7505d3115c8aa868b4f8cba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb7332c0838e46bfe82b647cb5085700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7332c0838e46bfe82b647cb5085700"></a>
+string </td><td class="memItemRight" valign="bottom"><b>OUTPUT</b> = "OUTPUT"</td></tr>
+<tr class="separator:aeb7332c0838e46bfe82b647cb5085700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a614bbc0b875b73667749b0e58d89fc54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a614bbc0b875b73667749b0e58d89fc54"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MASK</b> = "MASK"</td></tr>
+<tr class="separator:a614bbc0b875b73667749b0e58d89fc54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63e8acd9ffce30910af0eed869439190"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63e8acd9ffce30910af0eed869439190"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MSKNODATA</b> = "MSKNODATA"</td></tr>
+<tr class="separator:a63e8acd9ffce30910af0eed869439190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aead41106feadc1f8d3078aa839df4f79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aead41106feadc1f8d3078aa839df4f79"></a>
+string </td><td class="memItemRight" valign="bottom"><b>EXTRA</b> = 'EXTRA'</td></tr>
+<tr class="separator:aead41106feadc1f8d3078aa839df4f79"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pksvm_8py_source.html#l00039">39</a> of file <a class="el" href="pksvm_8py_source.html">pksvm.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pksvm_8py_source.html">pksvm.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.map b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.map
new file mode 100644
index 0000000..5ff40fb
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pksvm.pksvm" name="qgis.pksvm.pksvm">
+</map>
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.md5 b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.md5
new file mode 100644
index 0000000..89cada6
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.md5
@@ -0,0 +1 @@
+cf11085ef0104b77bc12740aee8128cb
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.png b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.png
new file mode 100644
index 0000000..f24fecf
Binary files /dev/null and b/doc/html/classqgis_1_1pksvm_1_1pksvm__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.map b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.map
new file mode 100644
index 0000000..5ff40fb
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pksvm.pksvm" name="qgis.pksvm.pksvm">
+</map>
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.md5 b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.md5
new file mode 100644
index 0000000..89cada6
--- /dev/null
+++ b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.md5
@@ -0,0 +1 @@
+cf11085ef0104b77bc12740aee8128cb
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.png b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.png
new file mode 100644
index 0000000..f24fecf
Binary files /dev/null and b/doc/html/classqgis_1_1pksvm_1_1pksvm__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html b/doc/html/classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html
new file mode 100644
index 0000000..f2ed049
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pktoolsAlgorithmProvider</b></li><li class="navelem"><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html">pktoolsAlgorithmProvider</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider__inherit__graph.png" border="0" usemap="#qgis_8pktoolsAlgorithmProvider_8pktoolsAlgorithmProvider_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider__coll__graph.png" border="0" usemap="#qgis_8pktoolsAlgorithmProvider_8pktoolsAlgorithmProvider_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac0e9f2b160f1d499c03525cd47ddc9ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0e9f2b160f1d499c03525cd47ddc9ce"></a>
+def </td><td class="memItemRight" valign="bottom"><b>__init__</b></td></tr>
+<tr class="separator:ac0e9f2b160f1d499c03525cd47ddc9ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41cbf8f2612d0ba5e7e858f421e4c344"><td class="memItemLeft" align="right" valign="top">def </td><td class="memItemRight" valign="bottom"><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">initializeSettings</a></td></tr>
+<tr class="separator:a41cbf8f2612d0ba5e7e858f421e4c344"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a458d5bb02c856ca83d7ca332ff4125aa"><td class="memItemLeft" align="right" valign="top">def </td><td class="memItemRight" valign="bottom"><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">unload</a></td></tr>
+<tr class="separator:a458d5bb02c856ca83d7ca332ff4125aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0eb1ee881715c3efe5819e23b8ff473"><td class="memItemLeft" align="right" valign="top">def </td><td class="memItemRight" valign="bottom"><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">getName</a></td></tr>
+<tr class="separator:ac0eb1ee881715c3efe5819e23b8ff473"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6d4f9562f9502ae7c12e90d0d95d7b1"><td class="memItemLeft" align="right" valign="top">def </td><td class="memItemRight" valign="bottom"><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">getDescription</a></td></tr>
+<tr class="separator:aa6d4f9562f9502ae7c12e90d0d95d7b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fffaef3d82382103103a3246bb23cb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fffaef3d82382103103a3246bb23cb1"></a>
+def </td><td class="memItemRight" valign="bottom"><b>getIcon</b></td></tr>
+<tr class="separator:a5fffaef3d82382103103a3246bb23cb1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a431ba8d9bcf8cb86744888c39ce0159e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a431ba8d9bcf8cb86744888c39ce0159e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>activate</b></td></tr>
+<tr class="separator:a431ba8d9bcf8cb86744888c39ce0159e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18808e0ef41167a503d619e8dcf39c33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18808e0ef41167a503d619e8dcf39c33"></a>
+ </td><td class="memItemRight" valign="bottom"><b>alglist</b></td></tr>
+<tr class="separator:a18808e0ef41167a503d619e8dcf39c33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad93cae1d50d4c7fe0d39b40ae0a9f71b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad93cae1d50d4c7fe0d39b40ae0a9f71b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>algs</b></td></tr>
+<tr class="separator:ad93cae1d50d4c7fe0d39b40ae0a9f71b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ae7e50266795fd7ad8eb9eec60503b164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7e50266795fd7ad8eb9eec60503b164"></a>
+string </td><td class="memItemRight" valign="bottom"><b>MY_DUMMY_SETTING</b> = "MY_DUMMY_SETTING"</td></tr>
+<tr class="separator:ae7e50266795fd7ad8eb9eec60503b164"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pktoolsAlgorithmProvider_8py_source.html#l00055">55</a> of file <a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aa6d4f9562f9502ae7c12e90d0d95d7b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">def qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getDescription </td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname"><em>self</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre class="fragment">This is the provired full name.
+</pre>
+<p>Definition at line <a class="el" href="pktoolsAlgorithmProvider_8py_source.html#l00100">100</a> of file <a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a>.</p>
+<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1"> 100</a></span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">getDescription</a>(self):</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="stringliteral">'''This is the provired full name.</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> <span class="stringliteral">"Utilities for remote sensing image processing"</span></div>
+</div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_aa6d4f9562f9502ae7c12e90d0d95d7b1"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getDescription</a></div><div class="ttdeci">def getDescription</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00100">pktoolsAlgo [...]
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ac0eb1ee881715c3efe5819e23b8ff473"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">def qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getName </td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname"><em>self</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre class="fragment">This is the name that will appear on the toolbox group.
+It is also used to create the command line name of all the algorithms
+from this provider
+</pre>
+<p>Definition at line <a class="el" href="pktoolsAlgorithmProvider_8py_source.html#l00093">93</a> of file <a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a>.</p>
+<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473"> 93</a></span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">getName</a>(self):</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="stringliteral">'''This is the name that will appear on the toolbox group.</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="stringliteral"> It is also used to create the command line name of all the algorithms</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="stringliteral"> from this provider</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> <span class="stringliteral">"pktools"</span></div>
+</div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_ac0eb1ee881715c3efe5819e23b8ff473"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getName</a></div><div class="ttdeci">def getName</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00093">pktoolsAlgorithmProvider. [...]
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a41cbf8f2612d0ba5e7e858f421e4c344"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">def qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.initializeSettings </td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname"><em>self</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre class="fragment">In this method we add settings needed to configure our provider.
+Do not forget to call the parent method, since it takes care or
+automatically adding a setting for activating or deactivating the
+algorithms in the provider
+</pre>
+<p>Definition at line <a class="el" href="pktoolsAlgorithmProvider_8py_source.html#l00073">73</a> of file <a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a>.</p>
+<div class="fragment"><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344"> 73</a></span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">initializeSettings</a>(self):</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral">'''In this method we add settings needed to configure our provider.</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral"> Do not forget to call the parent method, since it takes care or</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral"> automatically adding a setting for activating or deactivating the</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral"> algorithms in the provider</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> AlgorithmProvider.initializeSettings(self)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> ProcessingConfig.addSetting(Setting(self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">getDescription</a>(), pktoolsUtils.PKTOOLS_FOLDER, <span class="stringliteral">"pktools folder"</span>, pktoolsUtils.pktoolsPath()))</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<span class="comment"># ProcessingConfig.addSetting(Setting("Example algorithms", pktoolsAlgorithmProvider.MY_DUMMY_SETTING, "Example setting", "Default value"))</span></div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a41cbf8f2612d0ba5e7e858f421e4c344"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.initializeSettings</a></div><div class="ttdeci">def initializeSettings</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00073">pkt [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_aa6d4f9562f9502ae7c12e90d0d95d7b1"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getDescription</a></div><div class="ttdeci">def getDescription</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00100">pktoolsAlgo [...]
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a458d5bb02c856ca83d7ca332ff4125aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">def qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.unload </td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname"><em>self</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre class="fragment">Setting should be removed here, so they do not appear anymore
+when the plugin is unloaded</pre>
+<p>Definition at line <a class="el" href="pktoolsAlgorithmProvider_8py_source.html#l00087">87</a> of file <a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a>.</p>
+<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa"> 87</a></span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">unload</a>(self):</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="stringliteral">'''Setting should be removed here, so they do not appear anymore</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="stringliteral"> when the plugin is unloaded'''</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> AlgorithmProvider.unload(self)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ProcessingConfig.removeSetting(pktoolsAlgorithmProvider.MY_DUMMY_SETTING)</div>
+</div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a458d5bb02c856ca83d7ca332ff4125aa"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.unload</a></div><div class="ttdeci">def unload</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00087">pktoolsAlgorithmProvider.py [...]
+</div><!-- fragment -->
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pktoolsAlgorithmProvider_8py_source.html">pktoolsAlgorithmProvider.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm-members.html b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm-members.html
new file mode 100644
index 0000000..1492558
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm-members.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pktoolsAlgorithm</b></li><li class="navelem"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">pktoolsAlgorithm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pktoolsAlgorithm.pktoolsAlgorithm Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>checkBeforeOpeningParametersDialog</b> (defined in <a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getIcon</b> (defined in <a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>help</b> (defined in <a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html
new file mode 100644
index 0000000..a6c6e6c
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pktoolsAlgorithm.pktoolsAlgorithm Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pktoolsAlgorithm</b></li><li class="navelem"><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">pktoolsAlgorithm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pktoolsAlgorithm.pktoolsAlgorithm Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for qgis.pktoolsAlgorithm.pktoolsAlgorithm:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.png" border="0" usemap="#qgis_8pktoolsAlgorithm_8pktoolsAlgorithm_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for qgis.pktoolsAlgorithm.pktoolsAlgorithm:</div>
+<div class="dyncontent">
+<div class="center"><img src="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.png" border="0" usemap="#qgis_8pktoolsAlgorithm_8pktoolsAlgorithm_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac070faf19453a2d75e8cc14f7be097f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac070faf19453a2d75e8cc14f7be097f8"></a>
+def </td><td class="memItemRight" valign="bottom"><b>getIcon</b></td></tr>
+<tr class="separator:ac070faf19453a2d75e8cc14f7be097f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38a2a21e8672ffe7f9533c0a144b7053"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38a2a21e8672ffe7f9533c0a144b7053"></a>
+def </td><td class="memItemRight" valign="bottom"><b>checkBeforeOpeningParametersDialog</b></td></tr>
+<tr class="separator:a38a2a21e8672ffe7f9533c0a144b7053"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a758e81a12a427104dd46f9574115918c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a758e81a12a427104dd46f9574115918c"></a>
+def </td><td class="memItemRight" valign="bottom"><b>help</b></td></tr>
+<tr class="separator:a758e81a12a427104dd46f9574115918c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pktoolsAlgorithm_8py_source.html#l00041">41</a> of file <a class="el" href="pktoolsAlgorithm_8py_source.html">pktoolsAlgorithm.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pktoolsAlgorithm_8py_source.html">pktoolsAlgorithm.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.map b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.map
new file mode 100644
index 0000000..eb38106
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pktoolsAlgorithm.pktoolsAlgorithm" name="qgis.pktoolsAlgorithm.pktoolsAlgorithm">
+</map>
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.md5 b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.md5
new file mode 100644
index 0000000..c0edf39
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.md5
@@ -0,0 +1 @@
+ee118d8207204db98eaa40ce89a69fd0
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.png b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.png
new file mode 100644
index 0000000..d480600
Binary files /dev/null and b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__coll__graph.png differ
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.map b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.map
new file mode 100644
index 0000000..eb38106
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="qgis.pktoolsAlgorithm.pktoolsAlgorithm" name="qgis.pktoolsAlgorithm.pktoolsAlgorithm">
+</map>
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.md5 b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.md5
new file mode 100644
index 0000000..c0edf39
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.md5
@@ -0,0 +1 @@
+ee118d8207204db98eaa40ce89a69fd0
\ No newline at end of file
diff --git a/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.png b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.png
new file mode 100644
index 0000000..d480600
Binary files /dev/null and b/doc/html/classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm__inherit__graph.png differ
diff --git a/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils-members.html b/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils-members.html
new file mode 100644
index 0000000..2617f59
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils-members.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pktoolsUtils</b></li><li class="navelem"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">pktoolsUtils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis.pktoolsUtils.pktoolsUtils Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PKTOOLS_FOLDER</b> (defined in <a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>pktoolsPath</b> (defined in <a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>runpktools</b> (defined in <a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a>)</td><td class="entry"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html b/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html
new file mode 100644
index 0000000..755314c
--- /dev/null
+++ b/doc/html/classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: qgis.pktoolsUtils.pktoolsUtils Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>qgis</b></li><li class="navelem"><b>pktoolsUtils</b></li><li class="navelem"><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">pktoolsUtils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">qgis.pktoolsUtils.pktoolsUtils Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ac38a2b2844a2bca6054bdf3cb8a6d526"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac38a2b2844a2bca6054bdf3cb8a6d526"></a>
+def </td><td class="memItemRight" valign="bottom"><b>pktoolsPath</b></td></tr>
+<tr class="separator:ac38a2b2844a2bca6054bdf3cb8a6d526"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41b06e387849095ea42740a64edf5ceb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41b06e387849095ea42740a64edf5ceb"></a>
+def </td><td class="memItemRight" valign="bottom"><b>runpktools</b></td></tr>
+<tr class="separator:a41b06e387849095ea42740a64edf5ceb"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ab86e76240bd3e4d9f05be1abf84ea435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab86e76240bd3e4d9f05be1abf84ea435"></a>
+string </td><td class="memItemRight" valign="bottom"><b>PKTOOLS_FOLDER</b> = "PKTOOLS_FOLDER"</td></tr>
+<tr class="separator:ab86e76240bd3e4d9f05be1abf84ea435"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="pktoolsUtils_8py_source.html#l00035">35</a> of file <a class="el" href="pktoolsUtils_8py_source.html">pktoolsUtils.py</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/qgis/<a class="el" href="pktoolsUtils_8py_source.html">pktoolsUtils.py</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classstatfactory_1_1StatFactory-members.html b/doc/html/classstatfactory_1_1StatFactory-members.html
new file mode 100644
index 0000000..7d46491
--- /dev/null
+++ b/doc/html/classstatfactory_1_1StatFactory-members.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>statfactory</b></li><li class="navelem"><a class="el" href="classstatfactory_1_1StatFactory.html">StatFactory</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">statfactory::StatFactory Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>absmax</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>absmin</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>akima</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>akima_periodic</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocAcc</b>(gsl_interp_accel *&acc) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cmoment</b>(const std::vector< T > &v, int n) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>correlation</b>(const std::vector< T > &x, const std::vector< T > &y, int delay=0) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cross_correlation</b>(const std::vector< T > &x, const std::vector< T > &y, int maxdelay, std::vector< T > &z) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cspline</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cspline_periodic</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cumulative</b>(const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< int > &output, int nbin, T &minimum, T &maximum) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">sta [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>distribution</b>(const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< double > &output, int nbin, T &minimum, T &maximum, double sigma=0, const std::string &filename="") const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a clas [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>distribution</b>(const std::vector< T > &input, std::vector< double > &output, int nbin, double sigma=0, const std::string &filename="") const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inli [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>distribution2d</b>(const std::vector< T > &inputX, const std::vector< T > &inputY, std::vector< std::vector< double > > &output, int nbin, T &minX, T &maxX, T &minY, T &maxY, double sigma=0, const std::string &filename="") const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstat [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DISTRIBUTION_TYPE</b> enum name (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>eraseNoData</b>(std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>evalSpline</b>(gsl_spline *spline, double x, gsl_interp_accel *acc) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gaussian</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDistributionType</b>(const std::string distributionType) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getInterpolationType</b>(const std::string interpolationType) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getNodataValues</b>(std::vector< double > &nodatav) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getRandomGenerator</b>(unsigned long int theSeed) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getRandomValue</b>(const gsl_rng *r, const std::string type, double a=0, double b=1) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getSpline</b>(const std::string type, int size, gsl_spline *&spline) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gsl_covariance</b>(const std::vector< T > &x, const std::vector< T > &y) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>initSpline</b>(gsl_spline *spline, const double *x, const double *y, int size) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interpolateDown</b>(const std::vector< T > &input, std::vector< T > &output, int nbin) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>interpolateDown</b>(double *input, int dim, std::vector< T > &output, int nbin) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interpolateNoData</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::string &type, std::vector< T > &output, bool verbose=false) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="en [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>interpolateUp</b>(const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::string &type, std::vector< T > &output, bool verbose=false) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfacto [...]
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interpolateUp</b>(const std::vector< double > &wavelengthIn, const std::vector< std::vector< T > > &input, const std::vector< double > &wavelengthOut, const std::string &type, std::vector< std::vector< T > > &output, bool verbose=false) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>interpolateUp</b>(const std::vector< T > &input, std::vector< T > &output, int nbin) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interpolateUp</b>(double *input, int dim, std::vector< T > &output, int nbin) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>INTERPOLATION_TYPE</b> enum name (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isNoData</b>(double value) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>kurtosis</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>linear</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>linear_regression</b>(const std::vector< T > &x, const std::vector< T > &y, double &c0, double &c1) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>linear_regression_err</b>(const std::vector< T > &x, const std::vector< T > &y, double &c0, double &c1) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mean</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>meanVar</b>(const std::vector< T > &v, double &m1, double &v1) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>median</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>minmax</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T &theMin, T &theMax) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span clas [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>moment</b>(const std::vector< T > &v, int n) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymax</b>(const typename std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymax</b>(const typename std::vector< T > &v, T maxConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymax</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymax</b>(const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymax</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T maxConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inl [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymax</b>(const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T maxConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymax</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymax</b>(const std::vector< T > &v, T maxConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const typename std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inl [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mymin</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mymin</b>(const std::vector< T > &v, T minConstraint) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nearUp</b>(const std::vector< T > &input, std::vector< T > &output) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>normalize</b>(const std::vector< T > &input, std::vector< double > &output) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>normalize_pct</b>(std::vector< T > &input) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>percentile</b>(const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, double percent, T minimum=0, T maximum=0) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>percentiles</b>(const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< T > &output, int nbin, T &minimum, T &maximum, const std::string &filename="") const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" hr [...]
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>polynomial</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pushNodDataValue</b>(double noDataValue) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>rmse</b>(const std::vector< T > &x, const std::vector< T > &y) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale2byte</b>(const std::vector< T1 > &input, std::vector< T2 > &output, unsigned char lbound=0, unsigned char ubound=255) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setNoDataValues</b>(std::vector< double > vnodata) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>signature</b>(const std::vector< T > &input, double &k, double &alpha, double &beta, double e) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>signature</b>(double m1, double m2, double &k, double &alpha, double &beta, double e) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>skewness</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>StatFactory</b>(void) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sum</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>undefined</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>uniform</b> enum value (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>var</b>(const std::vector< T > &v) const (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~StatFactory</b>(void) (defined in <a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a>)</td><td class="entry"><a class="el" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/classstatfactory_1_1StatFactory.html b/doc/html/classstatfactory_1_1StatFactory.html
new file mode 100644
index 0000000..918018a
--- /dev/null
+++ b/doc/html/classstatfactory_1_1StatFactory.html
@@ -0,0 +1,379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: statfactory::StatFactory Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>statfactory</b></li><li class="navelem"><a class="el" href="classstatfactory_1_1StatFactory.html">StatFactory</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classstatfactory_1_1StatFactory-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">statfactory::StatFactory Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a37585f701a9b2d2cc402af04f5964596"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b>INTERPOLATION_TYPE</b> { <br/>
+ <b>undefined</b> =0,
+<b>linear</b> =1,
+<b>polynomial</b> =2,
+<b>cspline</b> =3,
+<br/>
+ <b>cspline_periodic</b> =4,
+<b>akima</b> =5,
+<b>akima_periodic</b> =6
+<br/>
+ }</td></tr>
+<tr class="separator:a37585f701a9b2d2cc402af04f5964596"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a105359fa72ba3832b8d3c81c66c2f395"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b>DISTRIBUTION_TYPE</b> { <b>uniform</b> =1,
+<b>gaussian</b> =2
+ }</td></tr>
+<tr class="separator:a105359fa72ba3832b8d3c81c66c2f395"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a69a7bee43fc0441632ba69944d6a97cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69a7bee43fc0441632ba69944d6a97cd"></a>
+INTERPOLATION_TYPE </td><td class="memItemRight" valign="bottom"><b>getInterpolationType</b> (const std::string interpolationType)</td></tr>
+<tr class="separator:a69a7bee43fc0441632ba69944d6a97cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59cab2e8350a4f61a2f000b927f022d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59cab2e8350a4f61a2f000b927f022d1"></a>
+DISTRIBUTION_TYPE </td><td class="memItemRight" valign="bottom"><b>getDistributionType</b> (const std::string distributionType)</td></tr>
+<tr class="separator:a59cab2e8350a4f61a2f000b927f022d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67b5012e9bfcae6f96076686d253b6bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67b5012e9bfcae6f96076686d253b6bf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>getNodataValues</b> (std::vector< double > &nodatav) const </td></tr>
+<tr class="separator:a67b5012e9bfcae6f96076686d253b6bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee6d2cb98262e414249fd59fb2a0a6c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee6d2cb98262e414249fd59fb2a0a6c6"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>isNoData</b> (double value) const </td></tr>
+<tr class="separator:aee6d2cb98262e414249fd59fb2a0a6c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31d5cf2f8892aa591a99925a8fb00b0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31d5cf2f8892aa591a99925a8fb00b0a"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>pushNodDataValue</b> (double noDataValue)</td></tr>
+<tr class="separator:a31d5cf2f8892aa591a99925a8fb00b0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3bdeab3b8a93ebc9bc3f23c3757e6adf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bdeab3b8a93ebc9bc3f23c3757e6adf"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>setNoDataValues</b> (std::vector< double > vnodata)</td></tr>
+<tr class="separator:a3bdeab3b8a93ebc9bc3f23c3757e6adf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7cf127e92c38a5a4638c9865a08104b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7cf127e92c38a5a4638c9865a08104b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>getRandomValue</b> (const gsl_rng *r, const std::string type, double a=0, double b=1) const </td></tr>
+<tr class="separator:af7cf127e92c38a5a4638c9865a08104b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40fd41a6f87835bee3dcd934c8f62145"><td class="memTemplParams" colspan="2"><a class="anchor" id="a40fd41a6f87835bee3dcd934c8f62145"></a>
+template<class T > </td></tr>
+<tr class="memitem:a40fd41a6f87835bee3dcd934c8f62145"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v) const </td></tr>
+<tr class="separator:a40fd41a6f87835bee3dcd934c8f62145"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac249aaf65122d3997546474461735608"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac249aaf65122d3997546474461735608"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac249aaf65122d3997546474461735608"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const typename std::vector< T > &v) const </td></tr>
+<tr class="separator:ac249aaf65122d3997546474461735608"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d169c0ef16be65ffc188abdbdfda772"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4d169c0ef16be65ffc188abdbdfda772"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4d169c0ef16be65ffc188abdbdfda772"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v, T minConstraint) const </td></tr>
+<tr class="separator:a4d169c0ef16be65ffc188abdbdfda772"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a959608316c247771df749e3c2dd52325"><td class="memTemplParams" colspan="2"><a class="anchor" id="a959608316c247771df749e3c2dd52325"></a>
+template<class T > </td></tr>
+<tr class="memitem:a959608316c247771df749e3c2dd52325"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const typename std::vector< T > &v, T maxConstraint) const </td></tr>
+<tr class="separator:a959608316c247771df749e3c2dd52325"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a259af5d33ad6719e5ada8bd411f43505"><td class="memTemplParams" colspan="2"><a class="anchor" id="a259af5d33ad6719e5ada8bd411f43505"></a>
+template<class T > </td></tr>
+<tr class="memitem:a259af5d33ad6719e5ada8bd411f43505"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const </td></tr>
+<tr class="separator:a259af5d33ad6719e5ada8bd411f43505"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a649880b9bd77bde8d73df6b08c9bb634"><td class="memTemplParams" colspan="2"><a class="anchor" id="a649880b9bd77bde8d73df6b08c9bb634"></a>
+template<class T > </td></tr>
+<tr class="memitem:a649880b9bd77bde8d73df6b08c9bb634"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const </td></tr>
+<tr class="separator:a649880b9bd77bde8d73df6b08c9bb634"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21e51667c62e97778aea20925bc0931c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a21e51667c62e97778aea20925bc0931c"></a>
+template<class T > </td></tr>
+<tr class="memitem:a21e51667c62e97778aea20925bc0931c"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T minConstraint) const </td></tr>
+<tr class="separator:a21e51667c62e97778aea20925bc0931c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee306f3fc3fbea8b6f57b3844c8a0603"><td class="memTemplParams" colspan="2"><a class="anchor" id="aee306f3fc3fbea8b6f57b3844c8a0603"></a>
+template<class T > </td></tr>
+<tr class="memitem:aee306f3fc3fbea8b6f57b3844c8a0603"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const typename std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T minConstraint) const </td></tr>
+<tr class="separator:aee306f3fc3fbea8b6f57b3844c8a0603"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd3324084ef54eabb81434c8039d6316"><td class="memTemplParams" colspan="2"><a class="anchor" id="acd3324084ef54eabb81434c8039d6316"></a>
+template<class T > </td></tr>
+<tr class="memitem:acd3324084ef54eabb81434c8039d6316"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const </td></tr>
+<tr class="separator:acd3324084ef54eabb81434c8039d6316"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9785577620ed04f31466083578cf330"><td class="memTemplParams" colspan="2"><a class="anchor" id="af9785577620ed04f31466083578cf330"></a>
+template<class T > </td></tr>
+<tr class="memitem:af9785577620ed04f31466083578cf330"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const </td></tr>
+<tr class="separator:af9785577620ed04f31466083578cf330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab79dffc4de71b781255a2ecbd5a12130"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab79dffc4de71b781255a2ecbd5a12130"></a>
+template<class T > </td></tr>
+<tr class="memitem:ab79dffc4de71b781255a2ecbd5a12130"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T maxConstraint) const </td></tr>
+<tr class="separator:ab79dffc4de71b781255a2ecbd5a12130"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e533d394fec188388f7be5d43521b14"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4e533d394fec188388f7be5d43521b14"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4e533d394fec188388f7be5d43521b14"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T maxConstraint) const </td></tr>
+<tr class="separator:a4e533d394fec188388f7be5d43521b14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8f16d2cf5a3a487ea9cf627ccb80dbf"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac8f16d2cf5a3a487ea9cf627ccb80dbf"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac8f16d2cf5a3a487ea9cf627ccb80dbf"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>absmin</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const </td></tr>
+<tr class="separator:ac8f16d2cf5a3a487ea9cf627ccb80dbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37997a65aa3fed8337bb3697cb9d2a1d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a37997a65aa3fed8337bb3697cb9d2a1d"></a>
+template<class T > </td></tr>
+<tr class="memitem:a37997a65aa3fed8337bb3697cb9d2a1d"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>absmax</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const </td></tr>
+<tr class="separator:a37997a65aa3fed8337bb3697cb9d2a1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed1cb0fc32653ace9450b346f22e0aba"><td class="memTemplParams" colspan="2"><a class="anchor" id="aed1cb0fc32653ace9450b346f22e0aba"></a>
+template<class T > </td></tr>
+<tr class="memitem:aed1cb0fc32653ace9450b346f22e0aba"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>minmax</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T &theMin, T &theMax) const </td></tr>
+<tr class="separator:aed1cb0fc32653ace9450b346f22e0aba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f420755fb273d86e8979b5d240ca4d8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5f420755fb273d86e8979b5d240ca4d8"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5f420755fb273d86e8979b5d240ca4d8"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>sum</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a5f420755fb273d86e8979b5d240ca4d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f39030af10586748ffe5ee392f929de"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1f39030af10586748ffe5ee392f929de"></a>
+template<class T > </td></tr>
+<tr class="memitem:a1f39030af10586748ffe5ee392f929de"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>mean</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a1f39030af10586748ffe5ee392f929de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb66e9d150b0112702c5b033501e0108"><td class="memTemplParams" colspan="2"><a class="anchor" id="adb66e9d150b0112702c5b033501e0108"></a>
+template<class T > </td></tr>
+<tr class="memitem:adb66e9d150b0112702c5b033501e0108"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>eraseNoData</b> (std::vector< T > &v) const </td></tr>
+<tr class="separator:adb66e9d150b0112702c5b033501e0108"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a772be6bff058d3c7edfec58360e524b7"><td class="memTemplParams" colspan="2"><a class="anchor" id="a772be6bff058d3c7edfec58360e524b7"></a>
+template<class T > </td></tr>
+<tr class="memitem:a772be6bff058d3c7edfec58360e524b7"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>median</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a772be6bff058d3c7edfec58360e524b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7de5f367d52281823f37cdfa7579bbd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad7de5f367d52281823f37cdfa7579bbd"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad7de5f367d52281823f37cdfa7579bbd"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>var</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:ad7de5f367d52281823f37cdfa7579bbd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c4c7e21f1a2effda178a2e83409b4e3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5c4c7e21f1a2effda178a2e83409b4e3"></a>
+template<class T > </td></tr>
+<tr class="memitem:a5c4c7e21f1a2effda178a2e83409b4e3"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>moment</b> (const std::vector< T > &v, int n) const </td></tr>
+<tr class="separator:a5c4c7e21f1a2effda178a2e83409b4e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16df05e110b4af63ca525265967f902d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a16df05e110b4af63ca525265967f902d"></a>
+template<class T > </td></tr>
+<tr class="memitem:a16df05e110b4af63ca525265967f902d"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>cmoment</b> (const std::vector< T > &v, int n) const </td></tr>
+<tr class="separator:a16df05e110b4af63ca525265967f902d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefc71804144a24f5de63597098bf2147"><td class="memTemplParams" colspan="2"><a class="anchor" id="aefc71804144a24f5de63597098bf2147"></a>
+template<class T > </td></tr>
+<tr class="memitem:aefc71804144a24f5de63597098bf2147"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>skewness</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:aefc71804144a24f5de63597098bf2147"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37c6fda1ce862e53171d59a20c811178"><td class="memTemplParams" colspan="2"><a class="anchor" id="a37c6fda1ce862e53171d59a20c811178"></a>
+template<class T > </td></tr>
+<tr class="memitem:a37c6fda1ce862e53171d59a20c811178"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>kurtosis</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a37c6fda1ce862e53171d59a20c811178"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac48046541317c59f012e1e86b9027fa8"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac48046541317c59f012e1e86b9027fa8"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac48046541317c59f012e1e86b9027fa8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>meanVar</b> (const std::vector< T > &v, double &m1, double &v1) const </td></tr>
+<tr class="separator:ac48046541317c59f012e1e86b9027fa8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d8bfc386123a0bc6d69a88a8864ab96"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0d8bfc386123a0bc6d69a88a8864ab96"></a>
+template<class T1 , class T2 > </td></tr>
+<tr class="memitem:a0d8bfc386123a0bc6d69a88a8864ab96"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>scale2byte</b> (const std::vector< T1 > &input, std::vector< T2 > &output, unsigned char lbound=0, unsigned char ubound=255) const </td></tr>
+<tr class="separator:a0d8bfc386123a0bc6d69a88a8864ab96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a114bb24c17355fa18dcf333d15ce71d5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a114bb24c17355fa18dcf333d15ce71d5"></a>
+template<class T > </td></tr>
+<tr class="memitem:a114bb24c17355fa18dcf333d15ce71d5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>distribution</b> (const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< double > &output, int nbin, T &minimum, T &maximum, double sigma=0, const std::string &filename="") const [...]
+<tr class="separator:a114bb24c17355fa18dcf333d15ce71d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13ae6a00a53653ac1ea3e9dbca3ae35c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a13ae6a00a53653ac1ea3e9dbca3ae35c"></a>
+template<class T > </td></tr>
+<tr class="memitem:a13ae6a00a53653ac1ea3e9dbca3ae35c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>distribution</b> (const std::vector< T > &input, std::vector< double > &output, int nbin, double sigma=0, const std::string &filename="") const </td></tr>
+<tr class="separator:a13ae6a00a53653ac1ea3e9dbca3ae35c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78316396ea5b437332bcb1b5cf64c0ab"><td class="memTemplParams" colspan="2"><a class="anchor" id="a78316396ea5b437332bcb1b5cf64c0ab"></a>
+template<class T > </td></tr>
+<tr class="memitem:a78316396ea5b437332bcb1b5cf64c0ab"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>distribution2d</b> (const std::vector< T > &inputX, const std::vector< T > &inputY, std::vector< std::vector< double > > &output, int nbin, T &minX, T &maxX, T &minY, T &maxY, double sigma=0, const std::string &filename="") const </td></tr>
+<tr class="separator:a78316396ea5b437332bcb1b5cf64c0ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60927dd900865e482f6ab61205442eae"><td class="memTemplParams" colspan="2"><a class="anchor" id="a60927dd900865e482f6ab61205442eae"></a>
+template<class T > </td></tr>
+<tr class="memitem:a60927dd900865e482f6ab61205442eae"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>cumulative</b> (const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< int > &output, int nbin, T &minimum, T &maximum) const </td></tr>
+<tr class="separator:a60927dd900865e482f6ab61205442eae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89e4ec6f688673d1e1dd5fdcdfa475e0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a89e4ec6f688673d1e1dd5fdcdfa475e0"></a>
+template<class T > </td></tr>
+<tr class="memitem:a89e4ec6f688673d1e1dd5fdcdfa475e0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>percentiles</b> (const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, std::vector< T > &output, int nbin, T &minimum, T &maximum, const std::string &filename="") const </td></tr>
+<tr class="separator:a89e4ec6f688673d1e1dd5fdcdfa475e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac003e61319d4bb48c83952349903246b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac003e61319d4bb48c83952349903246b"></a>
+template<class T > </td></tr>
+<tr class="memitem:ac003e61319d4bb48c83952349903246b"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>percentile</b> (const std::vector< T > &input, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, double percent, T minimum=0, T maximum=0) const </td></tr>
+<tr class="separator:ac003e61319d4bb48c83952349903246b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0512a43de9766f87496c80360450beeb"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0512a43de9766f87496c80360450beeb"></a>
+template<class T > </td></tr>
+<tr class="memitem:a0512a43de9766f87496c80360450beeb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>signature</b> (const std::vector< T > &input, double &k, double &alpha, double &beta, double e) const </td></tr>
+<tr class="separator:a0512a43de9766f87496c80360450beeb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf22f880205fdffc64e99b593e21a051"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf22f880205fdffc64e99b593e21a051"></a>
+void </td><td class="memItemRight" valign="bottom"><b>signature</b> (double m1, double m2, double &k, double &alpha, double &beta, double e) const </td></tr>
+<tr class="separator:adf22f880205fdffc64e99b593e21a051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af528217f1231bb82ffc702c77a20fd97"><td class="memTemplParams" colspan="2"><a class="anchor" id="af528217f1231bb82ffc702c77a20fd97"></a>
+template<class T > </td></tr>
+<tr class="memitem:af528217f1231bb82ffc702c77a20fd97"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>normalize</b> (const std::vector< T > &input, std::vector< double > &output) const </td></tr>
+<tr class="separator:af528217f1231bb82ffc702c77a20fd97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f811ad3aa2ef07de983bdfe596cfa37"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4f811ad3aa2ef07de983bdfe596cfa37"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4f811ad3aa2ef07de983bdfe596cfa37"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>normalize_pct</b> (std::vector< T > &input) const </td></tr>
+<tr class="separator:a4f811ad3aa2ef07de983bdfe596cfa37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93f585048edfc3a7298698911e3c91ce"><td class="memTemplParams" colspan="2"><a class="anchor" id="a93f585048edfc3a7298698911e3c91ce"></a>
+template<class T > </td></tr>
+<tr class="memitem:a93f585048edfc3a7298698911e3c91ce"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>rmse</b> (const std::vector< T > &x, const std::vector< T > &y) const </td></tr>
+<tr class="separator:a93f585048edfc3a7298698911e3c91ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3039e3126ee1e804655224a1b91d8fd4"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3039e3126ee1e804655224a1b91d8fd4"></a>
+template<class T > </td></tr>
+<tr class="memitem:a3039e3126ee1e804655224a1b91d8fd4"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>correlation</b> (const std::vector< T > &x, const std::vector< T > &y, int delay=0) const </td></tr>
+<tr class="separator:a3039e3126ee1e804655224a1b91d8fd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c5a1c11318f4665149d0b525a6e44c1"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c5a1c11318f4665149d0b525a6e44c1"></a>
+template<class T > </td></tr>
+<tr class="memitem:a6c5a1c11318f4665149d0b525a6e44c1"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>gsl_covariance</b> (const std::vector< T > &x, const std::vector< T > &y) const </td></tr>
+<tr class="separator:a6c5a1c11318f4665149d0b525a6e44c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c61b568a9d06ba43011df3b4e8d94eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2c61b568a9d06ba43011df3b4e8d94eb"></a>
+template<class T > </td></tr>
+<tr class="memitem:a2c61b568a9d06ba43011df3b4e8d94eb"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>cross_correlation</b> (const std::vector< T > &x, const std::vector< T > &y, int maxdelay, std::vector< T > &z) const </td></tr>
+<tr class="separator:a2c61b568a9d06ba43011df3b4e8d94eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcb50455a44d3f98f4304be1d91317fa"><td class="memTemplParams" colspan="2"><a class="anchor" id="adcb50455a44d3f98f4304be1d91317fa"></a>
+template<class T > </td></tr>
+<tr class="memitem:adcb50455a44d3f98f4304be1d91317fa"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>linear_regression</b> (const std::vector< T > &x, const std::vector< T > &y, double &c0, double &c1) const </td></tr>
+<tr class="separator:adcb50455a44d3f98f4304be1d91317fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a619da9993b8ae8b99389693b8d882427"><td class="memTemplParams" colspan="2"><a class="anchor" id="a619da9993b8ae8b99389693b8d882427"></a>
+template<class T > </td></tr>
+<tr class="memitem:a619da9993b8ae8b99389693b8d882427"><td class="memTemplItemLeft" align="right" valign="top">double </td><td class="memTemplItemRight" valign="bottom"><b>linear_regression_err</b> (const std::vector< T > &x, const std::vector< T > &y, double &c0, double &c1) const </td></tr>
+<tr class="separator:a619da9993b8ae8b99389693b8d882427"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8f4f62a2f6d3b67adcc6469ab2ce132"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad8f4f62a2f6d3b67adcc6469ab2ce132"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad8f4f62a2f6d3b67adcc6469ab2ce132"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateNoData</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::string &type, std::vector< T > &output, bool verbose=false) const </td></tr>
+<tr class="separator:ad8f4f62a2f6d3b67adcc6469ab2ce132"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4bd027114924c41dfe6546b487e29bd2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4bd027114924c41dfe6546b487e29bd2"></a>
+template<class T > </td></tr>
+<tr class="memitem:a4bd027114924c41dfe6546b487e29bd2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateUp</b> (const std::vector< double > &wavelengthIn, const std::vector< T > &input, const std::vector< double > &wavelengthOut, const std::string &type, std::vector< T > &output, bool verbose=false) const </td></tr>
+<tr class="separator:a4bd027114924c41dfe6546b487e29bd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d02c6f5d5f3cc2e6945b129ac0bd0b3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1d02c6f5d5f3cc2e6945b129ac0bd0b3"></a>
+template<class T > </td></tr>
+<tr class="memitem:a1d02c6f5d5f3cc2e6945b129ac0bd0b3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateUp</b> (const std::vector< double > &wavelengthIn, const std::vector< std::vector< T > > &input, const std::vector< double > &wavelengthOut, const std::string &type, std::vector< std::vector< T > > &output, bool verbose=false) const </td></tr>
+<tr class="separator:a1d02c6f5d5f3cc2e6945b129ac0bd0b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa48b56d8aca769a58f6aff1eb6c7a3b3"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa48b56d8aca769a58f6aff1eb6c7a3b3"></a>
+template<class T > </td></tr>
+<tr class="memitem:aa48b56d8aca769a58f6aff1eb6c7a3b3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateUp</b> (const std::vector< T > &input, std::vector< T > &output, int nbin) const </td></tr>
+<tr class="separator:aa48b56d8aca769a58f6aff1eb6c7a3b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade77a05b7b782879fa7f611f95882a99"><td class="memTemplParams" colspan="2"><a class="anchor" id="ade77a05b7b782879fa7f611f95882a99"></a>
+template<class T > </td></tr>
+<tr class="memitem:ade77a05b7b782879fa7f611f95882a99"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>nearUp</b> (const std::vector< T > &input, std::vector< T > &output) const </td></tr>
+<tr class="separator:ade77a05b7b782879fa7f611f95882a99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad4e1a549c60f3f87f021c737f77b1585"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad4e1a549c60f3f87f021c737f77b1585"></a>
+template<class T > </td></tr>
+<tr class="memitem:ad4e1a549c60f3f87f021c737f77b1585"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateUp</b> (double *input, int dim, std::vector< T > &output, int nbin)</td></tr>
+<tr class="separator:ad4e1a549c60f3f87f021c737f77b1585"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0710e0643fc20f7e1130a812e7b5db85"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0710e0643fc20f7e1130a812e7b5db85"></a>
+template<class T > </td></tr>
+<tr class="memitem:a0710e0643fc20f7e1130a812e7b5db85"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateDown</b> (const std::vector< T > &input, std::vector< T > &output, int nbin) const </td></tr>
+<tr class="separator:a0710e0643fc20f7e1130a812e7b5db85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c6b6b9dd195cdbe19cf0b1082115a42"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3c6b6b9dd195cdbe19cf0b1082115a42"></a>
+template<class T > </td></tr>
+<tr class="memitem:a3c6b6b9dd195cdbe19cf0b1082115a42"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>interpolateDown</b> (double *input, int dim, std::vector< T > &output, int nbin)</td></tr>
+<tr class="separator:a3c6b6b9dd195cdbe19cf0b1082115a42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44a92afe5198c7fb844a8d9e540f02d6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a44a92afe5198c7fb844a8d9e540f02d6"></a>
+template<class T > </td></tr>
+<tr class="memitem:a44a92afe5198c7fb844a8d9e540f02d6"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end) const </td></tr>
+<tr class="separator:a44a92afe5198c7fb844a8d9e540f02d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ffe5bb780118a467cc301af8620e457"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0ffe5bb780118a467cc301af8620e457"></a>
+template<class T > </td></tr>
+<tr class="memitem:a0ffe5bb780118a467cc301af8620e457"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end) const </td></tr>
+<tr class="separator:a0ffe5bb780118a467cc301af8620e457"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a45a0587e82420f0ad5f40f701ea87d98"><td class="memTemplParams" colspan="2"><a class="anchor" id="a45a0587e82420f0ad5f40f701ea87d98"></a>
+template<class T > </td></tr>
+<tr class="memitem:a45a0587e82420f0ad5f40f701ea87d98"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::const_iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v, typename std::vector< T >::const_iterator begin, typename std::vector< T >::const_iterator end, T minConstraint) const </td></tr>
+<tr class="separator:a45a0587e82420f0ad5f40f701ea87d98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1885a39657b3674bc0f969fed049db41"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1885a39657b3674bc0f969fed049db41"></a>
+template<class T > </td></tr>
+<tr class="memitem:a1885a39657b3674bc0f969fed049db41"><td class="memTemplItemLeft" align="right" valign="top">std::vector< T >::iterator </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v, typename std::vector< T >::iterator begin, typename std::vector< T >::iterator end, T minConstraint) const </td></tr>
+<tr class="separator:a1885a39657b3674bc0f969fed049db41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b4d79d285b928b904a5900cd28926ea"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2b4d79d285b928b904a5900cd28926ea"></a>
+template<class T > </td></tr>
+<tr class="memitem:a2b4d79d285b928b904a5900cd28926ea"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a2b4d79d285b928b904a5900cd28926ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a966f0ef6a163b09c8fa087a39afd58e4"><td class="memTemplParams" colspan="2"><a class="anchor" id="a966f0ef6a163b09c8fa087a39afd58e4"></a>
+template<class T > </td></tr>
+<tr class="memitem:a966f0ef6a163b09c8fa087a39afd58e4"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymin</b> (const std::vector< T > &v, T minConstraint) const </td></tr>
+<tr class="separator:a966f0ef6a163b09c8fa087a39afd58e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2287a84f19609ef7ad85ee19f2538550"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2287a84f19609ef7ad85ee19f2538550"></a>
+template<class T > </td></tr>
+<tr class="memitem:a2287a84f19609ef7ad85ee19f2538550"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v) const </td></tr>
+<tr class="separator:a2287a84f19609ef7ad85ee19f2538550"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afce25dbe10fcceffdd16dbef1f2ffe2c"><td class="memTemplParams" colspan="2"><a class="anchor" id="afce25dbe10fcceffdd16dbef1f2ffe2c"></a>
+template<class T > </td></tr>
+<tr class="memitem:afce25dbe10fcceffdd16dbef1f2ffe2c"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>mymax</b> (const std::vector< T > &v, T maxConstraint) const </td></tr>
+<tr class="separator:afce25dbe10fcceffdd16dbef1f2ffe2c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ad8186d8cd8ddc827d6cd1356a8fe82b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8186d8cd8ddc827d6cd1356a8fe82b1"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>allocAcc</b> (gsl_interp_accel *&acc)</td></tr>
+<tr class="separator:ad8186d8cd8ddc827d6cd1356a8fe82b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a92d0f32d645bd2d96ab498ab0c48623f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92d0f32d645bd2d96ab498ab0c48623f"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>getSpline</b> (const std::string type, int size, gsl_spline *&spline)</td></tr>
+<tr class="separator:a92d0f32d645bd2d96ab498ab0c48623f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3038ffb1cca6dc356ed5204ea7d51ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3038ffb1cca6dc356ed5204ea7d51ef"></a>
+static int </td><td class="memItemRight" valign="bottom"><b>initSpline</b> (gsl_spline *spline, const double *x, const double *y, int size)</td></tr>
+<tr class="separator:af3038ffb1cca6dc356ed5204ea7d51ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d9ed090980860a68917d16a94dd20e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d9ed090980860a68917d16a94dd20e9"></a>
+static double </td><td class="memItemRight" valign="bottom"><b>evalSpline</b> (gsl_spline *spline, double x, gsl_interp_accel *acc)</td></tr>
+<tr class="separator:a3d9ed090980860a68917d16a94dd20e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b1bd3b14bebd22e61fc58dc45d4c5b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b1bd3b14bebd22e61fc58dc45d4c5b7"></a>
+static gsl_rng * </td><td class="memItemRight" valign="bottom"><b>getRandomGenerator</b> (unsigned long int theSeed)</td></tr>
+<tr class="separator:a5b1bd3b14bebd22e61fc58dc45d4c5b7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="StatFactory_8h_source.html#l00043">43</a> of file <a class="el" href="StatFactory_8h_source.html">StatFactory.h</a>.</p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="StatFactory_8h_source.html">StatFactory.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/closed.png b/doc/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/doc/html/closed.png differ
diff --git a/doc/html/config_8h_source.html b/doc/html/config_8h_source.html
new file mode 100644
index 0000000..af786af
--- /dev/null
+++ b/doc/html/config_8h_source.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/config.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">/home/kempenep/pktools/config.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* config.h. Generated from config.h.in by configure. */</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">/* config.h.in. Generated from configure.ac by autoheader. */</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/* Define to 1 if you have the <dlfcn.h> header file. */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#define HAVE_DLFCN_H 1</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">/* Define to 1 if GDAL library are available */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#define HAVE_GDAL 1</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">/* Define to 1 if you have the <gdal.h> header file. */</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">/* #undef HAVE_GDAL_H */</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">/* Define to 1 if GDAL library includes OGR support */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#define HAVE_GDAL_OGR 1</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">/* Define to 1 if you have the <inttypes.h> header file. */</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#define HAVE_INTTYPES_H 1</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* Define to 1 if you have the <iostream> header file. */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#define HAVE_IOSTREAM 1</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">/* Define to 1 if you have the <memory.h> header file. */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#define HAVE_MEMORY_H 1</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* Define to 1 if you have the <stdint.h> header file. */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#define HAVE_STDINT_H 1</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* Define to 1 if you have the <stdlib.h> header file. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#define HAVE_STDLIB_H 1</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* Define to 1 if you have the <string> header file. */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#define HAVE_STRING 1</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* Define to 1 if you have the <strings.h> header file. */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define HAVE_STRINGS_H 1</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* Define to 1 if you have the <string.h> header file. */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define HAVE_STRING_H 1</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* Define to 1 if you have the <sys/stat.h> header file. */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#define HAVE_SYS_STAT_H 1</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/* Define to 1 if you have the <sys/types.h> header file. */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define HAVE_SYS_TYPES_H 1</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* Define to 1 if you have the <unistd.h> header file. */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define HAVE_UNISTD_H 1</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* Define to the sub-directory in which libtool stores uninstalled libraries.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#define LT_OBJDIR ".libs/"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* Name of package */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#define PACKAGE "pktools"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* Define to the address where bug reports for this package should be sent. */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#define PACKAGE_BUGREPORT "kempenep at gmail.com"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* Define to the full name of this package. */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#define PACKAGE_NAME "pktools"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* Define to the full name and version of this package. */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#define PACKAGE_STRING "pktools 2.6.4"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* Define to the one symbol short name of this package. */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#define PACKAGE_TARNAME "pktools"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* Define to the home page for this package. */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#define PACKAGE_URL ""</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* Define to the version of this package. */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#define PACKAGE_VERSION "2.6.4"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* Define to 1 if you have the ANSI C header files. */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#define STDC_HEADERS 1</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">/* Version number of package */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#define VERSION "2.6.4"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">/* Define to `unsigned int' if <sys/types.h> does not define. */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">/* #undef size_t */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_0af1587c8378955de40f48b4bd1869f0.html b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0.html
new file mode 100644
index 0000000..94f3fdd
--- /dev/null
+++ b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">base Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for base:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_0af1587c8378955de40f48b4bd1869f0_dep.png" border="0" usemap="#dir__0af1587c8378955de40f48b4bd1869f0__dep" alt="/home/kempenep/pktools/src/base"/></div>
+<map name="dir__0af1587c8378955de40f48b4bd1869f0__dep" id="dir__0af1587c8378955de40f48b4bd1869f0__dep">
+<area shape="rect" id="node1" href="dir_0af1587c8378955de40f48b4bd1869f0.html" title="base" alt="" coords="27,52,99,100"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,109,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:IndexValue_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>IndexValue.h</b> <a href="IndexValue_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Optionpk_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Optionpk.h</b> <a href="Optionpk_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pktestOption_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pktestOption.cc</b> <a href="pktestOption_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:PosValue_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>PosValue.h</b> <a href="PosValue_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Vector2d_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Vector2d.h</b> <a href="Vector2d_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.map b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.map
new file mode 100644
index 0000000..0a40b5b
--- /dev/null
+++ b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/base" name="/home/kempenep/pktools/src/base">
+<area shape="rect" id="node1" href="dir_0af1587c8378955de40f48b4bd1869f0.html" title="base" alt="" coords="27,52,99,100"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,109,111"/>
+</map>
diff --git a/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.md5 b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.md5
new file mode 100644
index 0000000..5693cb1
--- /dev/null
+++ b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.md5
@@ -0,0 +1 @@
+96b7fb30a67002c344e82c7fa8da9774
\ No newline at end of file
diff --git a/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.png b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.png
new file mode 100644
index 0000000..ae6fa4a
Binary files /dev/null and b/doc/html/dir_0af1587c8378955de40f48b4bd1869f0_dep.png differ
diff --git a/doc/html/dir_0d45166ba6790a432639a127a727f02c.html b/doc/html/dir_0d45166ba6790a432639a127a727f02c.html
new file mode 100644
index 0000000..f6e4c4f
--- /dev/null
+++ b/doc/html/dir_0d45166ba6790a432639a127a727f02c.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/vis_studio/base Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_457de909e3893805a4d2d0b8c0742bd8.html">vis_studio</a></li><li class="navelem"><a class="el" href="dir_0d45166ba6790a432639a127a727f02c.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">base Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for base:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_0d45166ba6790a432639a127a727f02c_dep.png" border="0" usemap="#dir__0d45166ba6790a432639a127a727f02c__dep" alt="/home/kempenep/pktools/vis_studio/base"/></div>
+<map name="dir__0d45166ba6790a432639a127a727f02c__dep" id="dir__0d45166ba6790a432639a127a727f02c__dep">
+<area shape="rect" id="node1" href="dir_0d45166ba6790a432639a127a727f02c.html" title="base" alt="" coords="27,52,99,100"/><area shape="rect" id="clust1" href="dir_457de909e3893805a4d2d0b8c0742bd8.html" title="vis_studio" alt="" coords="16,16,109,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:Optionpk_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Optionpk.cc</b> <a href="Optionpk_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.map b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.map
new file mode 100644
index 0000000..202b223
--- /dev/null
+++ b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/vis_studio/base" name="/home/kempenep/pktools/vis_studio/base">
+<area shape="rect" id="node1" href="dir_0d45166ba6790a432639a127a727f02c.html" title="base" alt="" coords="27,52,99,100"/>
+<area shape="rect" id="clust1" href="dir_457de909e3893805a4d2d0b8c0742bd8.html" title="vis_studio" alt="" coords="16,16,109,111"/>
+</map>
diff --git a/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.md5 b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.md5
new file mode 100644
index 0000000..c13aecf
--- /dev/null
+++ b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.md5
@@ -0,0 +1 @@
+817dcbce1d237547e8b7e579102e7493
\ No newline at end of file
diff --git a/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.png b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.png
new file mode 100644
index 0000000..0963e0b
Binary files /dev/null and b/doc/html/dir_0d45166ba6790a432639a127a727f02c_dep.png differ
diff --git a/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8.html b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8.html
new file mode 100644
index 0000000..fe96c32
--- /dev/null
+++ b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html">build-pkcrop_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkcrop_gui-gcc-Debug Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkcrop_gui-gcc-Debug:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.png" border="0" usemap="#dir__0f38b5d14ac73b43e2a48a75f9e70be8__dep" alt="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug"/></div>
+<map name="dir__0f38b5d14ac73b43e2a48a75f9e70be8__dep" id="dir__0f38b5d14ac73b43e2a48a75f9e70be8__dep">
+<area shape="rect" id="node1" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html" title="build-pkcrop_gui-gcc-Debug" alt="" coords="27,52,209,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,221,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.map b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.map
new file mode 100644
index 0000000..0fbf82e
--- /dev/null
+++ b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug" name="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Debug">
+<area shape="rect" id="node1" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html" title="build-pkcrop_gui-gcc-Debug" alt="" coords="27,52,209,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,221,111"/>
+</map>
diff --git a/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.md5 b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.md5
new file mode 100644
index 0000000..bb7e13b
--- /dev/null
+++ b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.md5
@@ -0,0 +1 @@
+e723766d52f35e43318ec9e0f0a6bc74
\ No newline at end of file
diff --git a/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.png b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.png
new file mode 100644
index 0000000..eef435f
Binary files /dev/null and b/doc/html/dir_0f38b5d14ac73b43e2a48a75f9e70be8_dep.png differ
diff --git a/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f.html b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f.html
new file mode 100644
index 0000000..a0f442f
--- /dev/null
+++ b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qt Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for qt:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_0f63d6441a2c250919e1e8723011eb2f_dep.png" border="0" usemap="#dir__0f63d6441a2c250919e1e8723011eb2f__dep" alt="/home/kempenep/pktools/qt"/></div>
+<map name="dir__0f63d6441a2c250919e1e8723011eb2f__dep" id="dir__0f63d6441a2c250919e1e8723011eb2f__dep">
+<area shape="rect" id="node2" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html" title="build-pkcomposite_gui-gcc-Debug" alt="" coords="2587,27,2805,75"/><area shape="rect" id="node3" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html" title="build-pkcomposite_gui-gcc-Release" alt="" coords="2334,27,2561,75"/><area shape="rect" id="node4" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html" title="build-pkcrop_gui-gcc-Debug" alt="" coords="2127,27,2309,75"/><ar [...]
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_280a0ba2820d23d6529bf494f1ea3ddd"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html">build-pkcomposite_gui-gcc-Debug</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_b8eb6544d8d9ffceba16909a7b9d17d7"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html">build-pkcomposite_gui-gcc-Release</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_0f38b5d14ac73b43e2a48a75f9e70be8"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html">build-pkcrop_gui-gcc-Debug</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_f92e37ed5759424bff98155847b1034b"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_f92e37ed5759424bff98155847b1034b.html">build-pkcrop_gui-gcc-Release</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_5f1e10fd305b434def78aaf73fd56d60"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5f1e10fd305b434def78aaf73fd56d60.html">build-pkdiff_gui-gcc-Debug</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_4dfaa1fe1382d1276d1c80b1d5035ade"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html">build-pkdiff_gui-gcc-Release</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_d7b2ebecdb5f44d7fa09bdedebc881a7"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html">build-pkextract_gui-gcc-Debug</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_41d189c72498e24f979b227eb8e138b1"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_41d189c72498e24f979b227eb8e138b1.html">build-pkextract_gui-gcc-Release</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_e61db0d85028141ec5940fd7f2a6e0fc"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html">build-pksvm_gui-gcc-Debug</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_ed1df9621940d6aa1183c365ad1750d2"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ed1df9621940d6aa1183c365ad1750d2.html">build-pksvm_gui-gcc-Release</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_ab1bbd5a6b4bd6507847335527b029bb"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html">pkcomposite_gui</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_35acdce8930fac877097c845a64519e5"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html">pkcrop_gui</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_b6b6de371025fb67c6b8623f3d3cd2ce"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html">pkdiff_gui</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_2676862852e3d558e3597542a81ecc63"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html">pkextract_gui</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_b66e135988e27fdc966ddddb8708f514"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html">pksvm_gui</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.map b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.map
new file mode 100644
index 0000000..b9fdfb1
--- /dev/null
+++ b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.map
@@ -0,0 +1,18 @@
+<map id="/home/kempenep/pktools/qt" name="/home/kempenep/pktools/qt">
+<area shape="rect" id="node2" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html" title="build-pkcomposite_gui-gcc-Debug" alt="" coords="2587,27,2805,75"/>
+<area shape="rect" id="node3" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html" title="build-pkcomposite_gui-gcc-Release" alt="" coords="2334,27,2561,75"/>
+<area shape="rect" id="node4" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html" title="build-pkcrop_gui-gcc-Debug" alt="" coords="2127,27,2309,75"/>
+<area shape="rect" id="node5" href="dir_f92e37ed5759424bff98155847b1034b.html" title="build-pkcrop_gui-gcc-Release" alt="" coords="1910,27,2103,75"/>
+<area shape="rect" id="node6" href="dir_5f1e10fd305b434def78aaf73fd56d60.html" title="build-pkdiff_gui-gcc-Debug" alt="" coords="1709,27,1885,75"/>
+<area shape="rect" id="node7" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html" title="build-pkdiff_gui-gcc-Release" alt="" coords="1499,27,1685,75"/>
+<area shape="rect" id="node8" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html" title="build-pkextract_gui-gcc-Debug" alt="" coords="1275,27,1473,75"/>
+<area shape="rect" id="node9" href="dir_41d189c72498e24f979b227eb8e138b1.html" title="build-pkextract_gui-gcc-Release" alt="" coords="1043,27,1251,75"/>
+<area shape="rect" id="node10" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html" title="build-pksvm_gui-gcc-Debug" alt="" coords="835,27,1017,75"/>
+<area shape="rect" id="node11" href="dir_ed1df9621940d6aa1183c365ad1750d2.html" title="build-pksvm_gui-gcc-Release" alt="" coords="618,27,811,75"/>
+<area shape="rect" id="node12" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html" title="pkcomposite_gui" alt="" coords="473,27,593,75"/>
+<area shape="rect" id="node13" href="dir_35acdce8930fac877097c845a64519e5.html" title="pkcrop_gui" alt="" coords="364,27,449,75"/>
+<area shape="rect" id="node14" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html" title="pkdiff_gui" alt="" coords="261,27,339,75"/>
+<area shape="rect" id="node15" href="dir_2676862852e3d558e3597542a81ecc63.html" title="pkextract_gui" alt="" coords="137,27,236,75"/>
+<area shape="rect" id="node16" href="dir_b66e135988e27fdc966ddddb8708f514.html" title="pksvm_gui" alt="" coords="27,27,112,75"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" alt="" coords="16,16,2912,85"/>
+</map>
diff --git a/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.md5 b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.md5
new file mode 100644
index 0000000..6b28b08
--- /dev/null
+++ b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.md5
@@ -0,0 +1 @@
+86fe584ad2c1b5db72576c266e4d690a
\ No newline at end of file
diff --git a/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.png b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.png
new file mode 100644
index 0000000..01a709e
Binary files /dev/null and b/doc/html/dir_0f63d6441a2c250919e1e8723011eb2f_dep.png differ
diff --git a/doc/html/dir_2676862852e3d558e3597542a81ecc63.html b/doc/html/dir_2676862852e3d558e3597542a81ecc63.html
new file mode 100644
index 0000000..763b11f
--- /dev/null
+++ b/doc/html/dir_2676862852e3d558e3597542a81ecc63.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkextract_gui Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html">pkextract_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract_gui Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for pkextract_gui:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_2676862852e3d558e3597542a81ecc63_dep.png" border="0" usemap="#dir__2676862852e3d558e3597542a81ecc63__dep" alt="/home/kempenep/pktools/qt/pkextract_gui"/></div>
+<map name="dir__2676862852e3d558e3597542a81ecc63__dep" id="dir__2676862852e3d558e3597542a81ecc63__dep">
+<area shape="rect" id="node1" href="dir_2676862852e3d558e3597542a81ecc63.html" title="pkextract_gui" alt="" coords="26,52,125,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,136,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkextract__gui_2main_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>main.cpp</b> <a href="pkextract__gui_2main_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract__gui_2mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.cpp</b> <a href="pkextract__gui_2mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract__gui_2mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.h</b> <a href="pkextract__gui_2mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.map b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.map
new file mode 100644
index 0000000..927ba3f
--- /dev/null
+++ b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/pkextract_gui" name="/home/kempenep/pktools/qt/pkextract_gui">
+<area shape="rect" id="node1" href="dir_2676862852e3d558e3597542a81ecc63.html" title="pkextract_gui" alt="" coords="26,52,125,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,136,111"/>
+</map>
diff --git a/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.md5 b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.md5
new file mode 100644
index 0000000..edf9772
--- /dev/null
+++ b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.md5
@@ -0,0 +1 @@
+20b99824965ea0ddc79ad9ccbf211999
\ No newline at end of file
diff --git a/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.png b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.png
new file mode 100644
index 0000000..4470350
Binary files /dev/null and b/doc/html/dir_2676862852e3d558e3597542a81ecc63_dep.png differ
diff --git a/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd.html b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd.html
new file mode 100644
index 0000000..57de2f7
--- /dev/null
+++ b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html">build-pkcomposite_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkcomposite_gui-gcc-Debug Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkcomposite_gui-gcc-Debug:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.png" border="0" usemap="#dir__280a0ba2820d23d6529bf494f1ea3ddd__dep" alt="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug"/></div>
+<map name="dir__280a0ba2820d23d6529bf494f1ea3ddd__dep" id="dir__280a0ba2820d23d6529bf494f1ea3ddd__dep">
+<area shape="rect" id="node1" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html" title="build-pkcomposite_gui-gcc-Debug" alt="" coords="27,52,245,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,256,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.map b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.map
new file mode 100644
index 0000000..75f11ed
--- /dev/null
+++ b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug" name="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Debug">
+<area shape="rect" id="node1" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html" title="build-pkcomposite_gui-gcc-Debug" alt="" coords="27,52,245,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,256,111"/>
+</map>
diff --git a/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.md5 b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.md5
new file mode 100644
index 0000000..ff5ff88
--- /dev/null
+++ b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.md5
@@ -0,0 +1 @@
+bdbf2220911293af1ff4a33a748e52e8
\ No newline at end of file
diff --git a/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.png b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.png
new file mode 100644
index 0000000..c74316c
Binary files /dev/null and b/doc/html/dir_280a0ba2820d23d6529bf494f1ea3ddd_dep.png differ
diff --git a/doc/html/dir_35acdce8930fac877097c845a64519e5.html b/doc/html/dir_35acdce8930fac877097c845a64519e5.html
new file mode 100644
index 0000000..00dff7d
--- /dev/null
+++ b/doc/html/dir_35acdce8930fac877097c845a64519e5.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcrop_gui Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html">pkcrop_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcrop_gui Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for pkcrop_gui:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_35acdce8930fac877097c845a64519e5_dep.png" border="0" usemap="#dir__35acdce8930fac877097c845a64519e5__dep" alt="/home/kempenep/pktools/qt/pkcrop_gui"/></div>
+<map name="dir__35acdce8930fac877097c845a64519e5__dep" id="dir__35acdce8930fac877097c845a64519e5__dep">
+<area shape="rect" id="node1" href="dir_35acdce8930fac877097c845a64519e5.html" title="pkcrop_gui" alt="" coords="27,52,112,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,123,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkcrop__gui_2main_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>main.cc</b> <a href="pkcrop__gui_2main_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcrop__gui_2mainwindow_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.cc</b> <a href="pkcrop__gui_2mainwindow_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcrop__gui_2mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.h</b> <a href="pkcrop__gui_2mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.map b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.map
new file mode 100644
index 0000000..95956d8
--- /dev/null
+++ b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/pkcrop_gui" name="/home/kempenep/pktools/qt/pkcrop_gui">
+<area shape="rect" id="node1" href="dir_35acdce8930fac877097c845a64519e5.html" title="pkcrop_gui" alt="" coords="27,52,112,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,123,111"/>
+</map>
diff --git a/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.md5 b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.md5
new file mode 100644
index 0000000..4ca2d02
--- /dev/null
+++ b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.md5
@@ -0,0 +1 @@
+12f089a77d3c4c4dc49c29d3db07f16a
\ No newline at end of file
diff --git a/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.png b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.png
new file mode 100644
index 0000000..7e786e0
Binary files /dev/null and b/doc/html/dir_35acdce8930fac877097c845a64519e5_dep.png differ
diff --git a/doc/html/dir_41d189c72498e24f979b227eb8e138b1.html b/doc/html/dir_41d189c72498e24f979b227eb8e138b1.html
new file mode 100644
index 0000000..520fe2c
--- /dev/null
+++ b/doc/html/dir_41d189c72498e24f979b227eb8e138b1.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_41d189c72498e24f979b227eb8e138b1.html">build-pkextract_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkextract_gui-gcc-Release Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkextract_gui-gcc-Release:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_41d189c72498e24f979b227eb8e138b1_dep.png" border="0" usemap="#dir__41d189c72498e24f979b227eb8e138b1__dep" alt="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release"/></div>
+<map name="dir__41d189c72498e24f979b227eb8e138b1__dep" id="dir__41d189c72498e24f979b227eb8e138b1__dep">
+<area shape="rect" id="node1" href="dir_41d189c72498e24f979b227eb8e138b1.html" title="build-pkextract_gui-gcc-Release" alt="" coords="27,52,235,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,245,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkextract__gui-gcc-Release_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkextract__gui-gcc-Release_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.map b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.map
new file mode 100644
index 0000000..d3edc8f
--- /dev/null
+++ b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release" name="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Release">
+<area shape="rect" id="node1" href="dir_41d189c72498e24f979b227eb8e138b1.html" title="build-pkextract_gui-gcc-Release" alt="" coords="27,52,235,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,245,111"/>
+</map>
diff --git a/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.md5 b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.md5
new file mode 100644
index 0000000..95c0c65
--- /dev/null
+++ b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.md5
@@ -0,0 +1 @@
+09fb1730371733387642ca424f55bac5
\ No newline at end of file
diff --git a/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.png b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.png
new file mode 100644
index 0000000..37206f7
Binary files /dev/null and b/doc/html/dir_41d189c72498e24f979b227eb8e138b1_dep.png differ
diff --git a/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8.html b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8.html
new file mode 100644
index 0000000..9f71429
--- /dev/null
+++ b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/vis_studio Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_457de909e3893805a4d2d0b8c0742bd8.html">vis_studio</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vis_studio Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for vis_studio:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_457de909e3893805a4d2d0b8c0742bd8_dep.png" border="0" usemap="#dir__457de909e3893805a4d2d0b8c0742bd8__dep" alt="/home/kempenep/pktools/vis_studio"/></div>
+<map name="dir__457de909e3893805a4d2d0b8c0742bd8__dep" id="dir__457de909e3893805a4d2d0b8c0742bd8__dep">
+<area shape="rect" id="node2" href="dir_0d45166ba6790a432639a127a727f02c.html" title="base" alt="" coords="27,27,99,75"/><area shape="rect" id="clust1" href="dir_457de909e3893805a4d2d0b8c0742bd8.html" alt="" coords="16,16,216,85"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_0d45166ba6790a432639a127a727f02c"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0d45166ba6790a432639a127a727f02c.html">base</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:vis__studio_2config_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>config.h</b> <a href="vis__studio_2config_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.map b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.map
new file mode 100644
index 0000000..7e65bb3
--- /dev/null
+++ b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/vis_studio" name="/home/kempenep/pktools/vis_studio">
+<area shape="rect" id="node2" href="dir_0d45166ba6790a432639a127a727f02c.html" title="base" alt="" coords="27,27,99,75"/>
+<area shape="rect" id="clust1" href="dir_457de909e3893805a4d2d0b8c0742bd8.html" alt="" coords="16,16,216,85"/>
+</map>
diff --git a/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.md5 b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.md5
new file mode 100644
index 0000000..f9d150c
--- /dev/null
+++ b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.md5
@@ -0,0 +1 @@
+de1c76cb70f2e7f410a90a7a5c7479f5
\ No newline at end of file
diff --git a/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.png b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.png
new file mode 100644
index 0000000..c628e66
Binary files /dev/null and b/doc/html/dir_457de909e3893805a4d2d0b8c0742bd8_dep.png differ
diff --git a/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade.html b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade.html
new file mode 100644
index 0000000..c436ee7
--- /dev/null
+++ b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html">build-pkdiff_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkdiff_gui-gcc-Release Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkdiff_gui-gcc-Release:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.png" border="0" usemap="#dir__4dfaa1fe1382d1276d1c80b1d5035ade__dep" alt="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release"/></div>
+<map name="dir__4dfaa1fe1382d1276d1c80b1d5035ade__dep" id="dir__4dfaa1fe1382d1276d1c80b1d5035ade__dep">
+<area shape="rect" id="node1" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html" title="build-pkdiff_gui-gcc-Release" alt="" coords="27,52,213,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,224,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.map b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.map
new file mode 100644
index 0000000..33acb15
--- /dev/null
+++ b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release" name="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Release">
+<area shape="rect" id="node1" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html" title="build-pkdiff_gui-gcc-Release" alt="" coords="27,52,213,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,224,111"/>
+</map>
diff --git a/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.md5 b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.md5
new file mode 100644
index 0000000..30f0f9e
--- /dev/null
+++ b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.md5
@@ -0,0 +1 @@
+5972fef120262b31c6ded442cc052402
\ No newline at end of file
diff --git a/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.png b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.png
new file mode 100644
index 0000000..876f286
Binary files /dev/null and b/doc/html/dir_4dfaa1fe1382d1276d1c80b1d5035ade_dep.png differ
diff --git a/doc/html/dir_53adf0b982dc8545998aae3f283a5a58.html b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58.html
new file mode 100644
index 0000000..743c8ab
--- /dev/null
+++ b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">apps Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for apps:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_53adf0b982dc8545998aae3f283a5a58_dep.png" border="0" usemap="#dir__53adf0b982dc8545998aae3f283a5a58__dep" alt="/home/kempenep/pktools/src/apps"/></div>
+<map name="dir__53adf0b982dc8545998aae3f283a5a58__dep" id="dir__53adf0b982dc8545998aae3f283a5a58__dep">
+<area shape="rect" id="node2" href="dir_e28b2035b152bb51229fe7a0fca4e376.html" title="not_used" alt="" coords="37,63,111,111"/><area shape="rect" id="clust2" href="dir_53adf0b982dc8545998aae3f283a5a58.html" alt="" coords="27,52,219,121"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,229,132"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_e28b2035b152bb51229fe7a0fca4e376"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html">not_used</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkann_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkann.cc</b> <a href="pkann_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkascii2img_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkascii2img.cc</b> <a href="pkascii2img_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkascii2ogr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkascii2ogr.cc</b> <a href="pkascii2ogr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcomposite_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkcomposite.cc</b> <a href="pkcomposite_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcreatect_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkcreatect.cc</b> <a href="pkcreatect_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcrop_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkcrop.cc</b> <a href="pkcrop_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdiff_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdiff.cc</b> <a href="pkdiff_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdsm2shadow_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdsm2shadow.cc</b> <a href="pkdsm2shadow_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdumpimg_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdumpimg.cc</b> <a href="pkdumpimg_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdumpogr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdumpogr.cc</b> <a href="pkdumpogr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdumpogr_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdumpogr.h</b> <a href="pkdumpogr_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkegcs_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkegcs.cc</b> <a href="pkegcs_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkextract.cc</b> <a href="pkextract_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfillnodata_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfillnodata.cc</b> <a href="pkfillnodata_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilter_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilter.cc</b> <a href="pkfilter_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilterascii_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilterascii.cc</b> <a href="pkfilterascii_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilterdem_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilterdem.cc</b> <a href="pkfilterdem_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfsann_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfsann.cc</b> <a href="pkfsann_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfsann_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfsann.h</b> <a href="pkfsann_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfssvm_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfssvm.cc</b> <a href="pkfssvm_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkgetmask_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkgetmask.cc</b> <a href="pkgetmask_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkinfo_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkinfo.cc</b> <a href="pkinfo_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkkalman_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkkalman.cc</b> <a href="pkkalman_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pklas2img_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pklas2img.cc</b> <a href="pklas2img_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkoptsvm_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkoptsvm.cc</b> <a href="pkoptsvm_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkpolygonize_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkpolygonize.cc</b> <a href="pkpolygonize_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkreclass_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkreclass.cc</b> <a href="pkreclass_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkregann_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkregann.cc</b> <a href="pkregann_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksensormodel_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksensormodel.h</b> <a href="pksensormodel_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksetmask_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksetmask.cc</b> <a href="pksetmask_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksieve_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksieve.cc</b> <a href="pksieve_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkstat_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkstat.cc</b> <a href="pkstat_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkstatascii_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkstatascii.cc</b> <a href="pkstatascii_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkstatogr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkstatogr.cc</b> <a href="pkstatogr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksvm_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksvm.cc</b> <a href="pksvm_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.map b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.map
new file mode 100644
index 0000000..51e2f7c
--- /dev/null
+++ b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.map
@@ -0,0 +1,5 @@
+<map id="/home/kempenep/pktools/src/apps" name="/home/kempenep/pktools/src/apps">
+<area shape="rect" id="node2" href="dir_e28b2035b152bb51229fe7a0fca4e376.html" title="not_used" alt="" coords="37,63,111,111"/>
+<area shape="rect" id="clust2" href="dir_53adf0b982dc8545998aae3f283a5a58.html" alt="" coords="27,52,219,121"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,229,132"/>
+</map>
diff --git a/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.md5 b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.md5
new file mode 100644
index 0000000..4f67286
--- /dev/null
+++ b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.md5
@@ -0,0 +1 @@
+b57292cdcfa82f3220b7290682271e9e
\ No newline at end of file
diff --git a/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.png b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.png
new file mode 100644
index 0000000..e10ec40
Binary files /dev/null and b/doc/html/dir_53adf0b982dc8545998aae3f283a5a58_dep.png differ
diff --git a/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d.html b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d.html
new file mode 100644
index 0000000..fe315ca
--- /dev/null
+++ b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">qgis Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for qgis:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_5785acc8d2e42f8795bdbe936856f26d_dep.png" border="0" usemap="#dir__5785acc8d2e42f8795bdbe936856f26d__dep" alt="/home/kempenep/pktools/qgis"/></div>
+<map name="dir__5785acc8d2e42f8795bdbe936856f26d__dep" id="dir__5785acc8d2e42f8795bdbe936856f26d__dep">
+<area shape="rect" id="node1" href="dir_5785acc8d2e42f8795bdbe936856f26d.html" title="qgis" alt="" coords="5,5,77,53"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:____init_____8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>__init__.py</b> <a href="____init_____8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcomposite_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkcomposite.py</b> <a href="pkcomposite_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcrop_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkcrop.py</b> <a href="pkcrop_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdiff__accuracy_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkdiff_accuracy.py</b> <a href="pkdiff__accuracy_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkextract.py</b> <a href="pkextract_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract__grid_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkextract_grid.py</b> <a href="pkextract__grid_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkextract__random_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkextract_random.py</b> <a href="pkextract__random_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilter__spatial_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilter_spatial.py</b> <a href="pkfilter__spatial_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilter__spectral_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilter_spectral.py</b> <a href="pkfilter__spectral_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkfilterdem_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkfilterdem.py</b> <a href="pkfilterdem_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkgetmask_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkgetmask.py</b> <a href="pkgetmask_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pklas2img_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pklas2img.py</b> <a href="pklas2img_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkreclass_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkreclass.py</b> <a href="pkreclass_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksetmask_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksetmask.py</b> <a href="pksetmask_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksvm_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pksvm.py</b> <a href="pksvm_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pktoolsAlgorithm_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pktoolsAlgorithm.py</b> <a href="pktoolsAlgorithm_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pktoolsAlgorithmProvider_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pktoolsAlgorithmProvider.py</b> <a href="pktoolsAlgorithmProvider_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pktoolsUtils_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pktoolsUtils.py</b> <a href="pktoolsUtils_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ProcessingPktoolsPlugin_8py"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ProcessingPktoolsPlugin.py</b> <a href="ProcessingPktoolsPlugin_8py_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.map b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.map
new file mode 100644
index 0000000..0a58696
--- /dev/null
+++ b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.map
@@ -0,0 +1,3 @@
+<map id="/home/kempenep/pktools/qgis" name="/home/kempenep/pktools/qgis">
+<area shape="rect" id="node1" href="dir_5785acc8d2e42f8795bdbe936856f26d.html" title="qgis" alt="" coords="5,5,77,53"/>
+</map>
diff --git a/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.md5 b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.md5
new file mode 100644
index 0000000..18186c0
--- /dev/null
+++ b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.md5
@@ -0,0 +1 @@
+fe020485af298c12a87f416f31e8f743
\ No newline at end of file
diff --git a/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.png b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.png
new file mode 100644
index 0000000..8b36aae
Binary files /dev/null and b/doc/html/dir_5785acc8d2e42f8795bdbe936856f26d_dep.png differ
diff --git a/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60.html b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60.html
new file mode 100644
index 0000000..1f2fd20
--- /dev/null
+++ b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_5f1e10fd305b434def78aaf73fd56d60.html">build-pkdiff_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkdiff_gui-gcc-Debug Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkdiff_gui-gcc-Debug:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_5f1e10fd305b434def78aaf73fd56d60_dep.png" border="0" usemap="#dir__5f1e10fd305b434def78aaf73fd56d60__dep" alt="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug"/></div>
+<map name="dir__5f1e10fd305b434def78aaf73fd56d60__dep" id="dir__5f1e10fd305b434def78aaf73fd56d60__dep">
+<area shape="rect" id="node1" href="dir_5f1e10fd305b434def78aaf73fd56d60.html" title="build-pkdiff_gui-gcc-Debug" alt="" coords="27,52,203,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,213,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.map b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.map
new file mode 100644
index 0000000..07a30ef
--- /dev/null
+++ b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug" name="/home/kempenep/pktools/qt/build-pkdiff_gui-gcc-Debug">
+<area shape="rect" id="node1" href="dir_5f1e10fd305b434def78aaf73fd56d60.html" title="build-pkdiff_gui-gcc-Debug" alt="" coords="27,52,203,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,213,111"/>
+</map>
diff --git a/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.md5 b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.md5
new file mode 100644
index 0000000..400dd63
--- /dev/null
+++ b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.md5
@@ -0,0 +1 @@
+016a5f9d193cc948d4dc0ce95705fa52
\ No newline at end of file
diff --git a/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.png b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.png
new file mode 100644
index 0000000..0abdcbd
Binary files /dev/null and b/doc/html/dir_5f1e10fd305b434def78aaf73fd56d60_dep.png differ
diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..f596efd
--- /dev/null
+++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">src Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for src:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png" border="0" usemap="#dir__68267d1309a1af8e8297ef4c3efbcdba__dep" alt="/home/kempenep/pktools/src"/></div>
+<map name="dir__68267d1309a1af8e8297ef4c3efbcdba__dep" id="dir__68267d1309a1af8e8297ef4c3efbcdba__dep">
+<area shape="rect" id="node2" href="dir_e6df591b0639d4c4807ef64d058833e2.html" title="algorithms" alt="" coords="563,27,644,75"/><area shape="rect" id="node3" href="dir_53adf0b982dc8545998aae3f283a5a58.html" title="apps" alt="" coords="467,27,539,75"/><area shape="rect" id="node4" href="dir_0af1587c8378955de40f48b4bd1869f0.html" title="base" alt="" coords="371,27,443,75"/><area shape="rect" id="node5" href="dir_849702d4228bd835bdf1201002937cb3.html" title="fileclasses" alt="" coords="262 [...]
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_e6df591b0639d4c4807ef64d058833e2"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_53adf0b982dc8545998aae3f283a5a58"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_0af1587c8378955de40f48b4bd1869f0"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_849702d4228bd835bdf1201002937cb3"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_849702d4228bd835bdf1201002937cb3.html">fileclasses</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_6d2fd95b0bd390617ad5a1eb4a537b4a"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_89a0bd85ecec8fbb2c320310670be290"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_89a0bd85ecec8fbb2c320310670be290.html">lasclasses</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map
new file mode 100644
index 0000000..7845254
--- /dev/null
+++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map
@@ -0,0 +1,9 @@
+<map id="/home/kempenep/pktools/src" name="/home/kempenep/pktools/src">
+<area shape="rect" id="node2" href="dir_e6df591b0639d4c4807ef64d058833e2.html" title="algorithms" alt="" coords="563,27,644,75"/>
+<area shape="rect" id="node3" href="dir_53adf0b982dc8545998aae3f283a5a58.html" title="apps" alt="" coords="467,27,539,75"/>
+<area shape="rect" id="node4" href="dir_0af1587c8378955de40f48b4bd1869f0.html" title="base" alt="" coords="371,27,443,75"/>
+<area shape="rect" id="node5" href="dir_849702d4228bd835bdf1201002937cb3.html" title="fileclasses" alt="" coords="262,27,345,75"/>
+<area shape="rect" id="node6" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html" title="imageclasses" alt="" coords="135,27,237,75"/>
+<area shape="rect" id="node7" href="dir_89a0bd85ecec8fbb2c320310670be290.html" title="lasclasses" alt="" coords="27,27,111,75"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" alt="" coords="16,16,752,85"/>
+</map>
diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5
new file mode 100644
index 0000000..5a3ba93
--- /dev/null
+++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5
@@ -0,0 +1 @@
+f88560b66f96c6c024c33544efb1952d
\ No newline at end of file
diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png
new file mode 100644
index 0000000..708f198
Binary files /dev/null and b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png differ
diff --git a/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html
new file mode 100644
index 0000000..befdab1
--- /dev/null
+++ b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/imageclasses Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html">imageclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">imageclasses Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for imageclasses:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.png" border="0" usemap="#dir__6d2fd95b0bd390617ad5a1eb4a537b4a__dep" alt="/home/kempenep/pktools/src/imageclasses"/></div>
+<map name="dir__6d2fd95b0bd390617ad5a1eb4a537b4a__dep" id="dir__6d2fd95b0bd390617ad5a1eb4a537b4a__dep">
+<area shape="rect" id="node1" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html" title="imageclasses" alt="" coords="27,52,129,100"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,141,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:ImgReaderGdal_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgReaderGdal.cc</b> <a href="ImgReaderGdal_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgReaderGdal_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgReaderGdal.h</b> <a href="ImgReaderGdal_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgReaderOgr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgReaderOgr.cc</b> <a href="ImgReaderOgr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgReaderOgr_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgReaderOgr.h</b> <a href="ImgReaderOgr_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgWriterGdal_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgWriterGdal.cc</b> <a href="ImgWriterGdal_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgWriterGdal_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgWriterGdal.h</b> <a href="ImgWriterGdal_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgWriterOgr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgWriterOgr.cc</b> <a href="ImgWriterOgr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgWriterOgr_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgWriterOgr.h</b> <a href="ImgWriterOgr_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.map b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.map
new file mode 100644
index 0000000..ae16fec
--- /dev/null
+++ b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/imageclasses" name="/home/kempenep/pktools/src/imageclasses">
+<area shape="rect" id="node1" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html" title="imageclasses" alt="" coords="27,52,129,100"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,141,111"/>
+</map>
diff --git a/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.md5 b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.md5
new file mode 100644
index 0000000..c4f3f2f
--- /dev/null
+++ b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.md5
@@ -0,0 +1 @@
+494718c3c8bbc08f25b24a1da2a07d9a
\ No newline at end of file
diff --git a/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.png b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.png
new file mode 100644
index 0000000..d41115f
Binary files /dev/null and b/doc/html/dir_6d2fd95b0bd390617ad5a1eb4a537b4a_dep.png differ
diff --git a/doc/html/dir_849702d4228bd835bdf1201002937cb3.html b/doc/html/dir_849702d4228bd835bdf1201002937cb3.html
new file mode 100644
index 0000000..d9d9bb1
--- /dev/null
+++ b/doc/html/dir_849702d4228bd835bdf1201002937cb3.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/fileclasses Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_849702d4228bd835bdf1201002937cb3.html">fileclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fileclasses Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for fileclasses:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_849702d4228bd835bdf1201002937cb3_dep.png" border="0" usemap="#dir__849702d4228bd835bdf1201002937cb3__dep" alt="/home/kempenep/pktools/src/fileclasses"/></div>
+<map name="dir__849702d4228bd835bdf1201002937cb3__dep" id="dir__849702d4228bd835bdf1201002937cb3__dep">
+<area shape="rect" id="node1" href="dir_849702d4228bd835bdf1201002937cb3.html" title="fileclasses" alt="" coords="27,52,111,100"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,123,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:FileReaderAscii_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>FileReaderAscii.cc</b> <a href="FileReaderAscii_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:FileReaderAscii_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>FileReaderAscii.h</b> <a href="FileReaderAscii_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.map b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.map
new file mode 100644
index 0000000..95f35c0
--- /dev/null
+++ b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/fileclasses" name="/home/kempenep/pktools/src/fileclasses">
+<area shape="rect" id="node1" href="dir_849702d4228bd835bdf1201002937cb3.html" title="fileclasses" alt="" coords="27,52,111,100"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,123,111"/>
+</map>
diff --git a/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.md5 b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.md5
new file mode 100644
index 0000000..f5ea5c6
--- /dev/null
+++ b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.md5
@@ -0,0 +1 @@
+aa089dd78524c2f8fb48599b1b28f12e
\ No newline at end of file
diff --git a/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.png b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.png
new file mode 100644
index 0000000..84a0688
Binary files /dev/null and b/doc/html/dir_849702d4228bd835bdf1201002937cb3_dep.png differ
diff --git a/doc/html/dir_89a0bd85ecec8fbb2c320310670be290.html b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290.html
new file mode 100644
index 0000000..22bc39c
--- /dev/null
+++ b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/lasclasses Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_89a0bd85ecec8fbb2c320310670be290.html">lasclasses</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">lasclasses Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for lasclasses:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_89a0bd85ecec8fbb2c320310670be290_dep.png" border="0" usemap="#dir__89a0bd85ecec8fbb2c320310670be290__dep" alt="/home/kempenep/pktools/src/lasclasses"/></div>
+<map name="dir__89a0bd85ecec8fbb2c320310670be290__dep" id="dir__89a0bd85ecec8fbb2c320310670be290__dep">
+<area shape="rect" id="node1" href="dir_89a0bd85ecec8fbb2c320310670be290.html" title="lasclasses" alt="" coords="27,52,111,100"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,123,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:FileReaderLas_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>FileReaderLas.cc</b> <a href="FileReaderLas_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:FileReaderLas_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>FileReaderLas.h</b> <a href="FileReaderLas_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.map b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.map
new file mode 100644
index 0000000..0cc4a12
--- /dev/null
+++ b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/lasclasses" name="/home/kempenep/pktools/src/lasclasses">
+<area shape="rect" id="node1" href="dir_89a0bd85ecec8fbb2c320310670be290.html" title="lasclasses" alt="" coords="27,52,111,100"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,123,111"/>
+</map>
diff --git a/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.md5 b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.md5
new file mode 100644
index 0000000..60e1e90
--- /dev/null
+++ b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.md5
@@ -0,0 +1 @@
+e6e07da8b6585d138231c16ab2b09b22
\ No newline at end of file
diff --git a/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.png b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.png
new file mode 100644
index 0000000..8ad588b
Binary files /dev/null and b/doc/html/dir_89a0bd85ecec8fbb2c320310670be290_dep.png differ
diff --git a/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb.html b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb.html
new file mode 100644
index 0000000..cb25c74
--- /dev/null
+++ b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcomposite_gui Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html">pkcomposite_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcomposite_gui Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for pkcomposite_gui:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_ab1bbd5a6b4bd6507847335527b029bb_dep.png" border="0" usemap="#dir__ab1bbd5a6b4bd6507847335527b029bb__dep" alt="/home/kempenep/pktools/qt/pkcomposite_gui"/></div>
+<map name="dir__ab1bbd5a6b4bd6507847335527b029bb__dep" id="dir__ab1bbd5a6b4bd6507847335527b029bb__dep">
+<area shape="rect" id="node1" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html" title="pkcomposite_gui" alt="" coords="27,52,147,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,157,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkcomposite__gui_2main_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>main.cc</b> <a href="pkcomposite__gui_2main_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcomposite__gui_2mainwindow_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.cc</b> <a href="pkcomposite__gui_2mainwindow_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkcomposite__gui_2mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.h</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.map b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.map
new file mode 100644
index 0000000..ef4e614
--- /dev/null
+++ b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/pkcomposite_gui" name="/home/kempenep/pktools/qt/pkcomposite_gui">
+<area shape="rect" id="node1" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html" title="pkcomposite_gui" alt="" coords="27,52,147,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,157,111"/>
+</map>
diff --git a/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.md5 b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.md5
new file mode 100644
index 0000000..9af5188
--- /dev/null
+++ b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.md5
@@ -0,0 +1 @@
+a3a1f0efad1743e2ec5d8734dc6f1eb9
\ No newline at end of file
diff --git a/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.png b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.png
new file mode 100644
index 0000000..1406669
Binary files /dev/null and b/doc/html/dir_ab1bbd5a6b4bd6507847335527b029bb_dep.png differ
diff --git a/doc/html/dir_b66e135988e27fdc966ddddb8708f514.html b/doc/html/dir_b66e135988e27fdc966ddddb8708f514.html
new file mode 100644
index 0000000..3a34948
--- /dev/null
+++ b/doc/html/dir_b66e135988e27fdc966ddddb8708f514.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pksvm_gui Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html">pksvm_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksvm_gui Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for pksvm_gui:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_b66e135988e27fdc966ddddb8708f514_dep.png" border="0" usemap="#dir__b66e135988e27fdc966ddddb8708f514__dep" alt="/home/kempenep/pktools/qt/pksvm_gui"/></div>
+<map name="dir__b66e135988e27fdc966ddddb8708f514__dep" id="dir__b66e135988e27fdc966ddddb8708f514__dep">
+<area shape="rect" id="node1" href="dir_b66e135988e27fdc966ddddb8708f514.html" title="pksvm_gui" alt="" coords="27,52,112,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,123,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pksvm__gui_2main_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>main.cpp</b> <a href="pksvm__gui_2main_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksvm__gui_2mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.cpp</b> <a href="pksvm__gui_2mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pksvm__gui_2mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.h</b> <a href="pksvm__gui_2mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.map b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.map
new file mode 100644
index 0000000..70675d4
--- /dev/null
+++ b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/pksvm_gui" name="/home/kempenep/pktools/qt/pksvm_gui">
+<area shape="rect" id="node1" href="dir_b66e135988e27fdc966ddddb8708f514.html" title="pksvm_gui" alt="" coords="27,52,112,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,123,111"/>
+</map>
diff --git a/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.md5 b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.md5
new file mode 100644
index 0000000..83e1078
--- /dev/null
+++ b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.md5
@@ -0,0 +1 @@
+928b491e528b51b218b678ed430a2838
\ No newline at end of file
diff --git a/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.png b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.png
new file mode 100644
index 0000000..5393d53
Binary files /dev/null and b/doc/html/dir_b66e135988e27fdc966ddddb8708f514_dep.png differ
diff --git a/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce.html b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce.html
new file mode 100644
index 0000000..958bdd4
--- /dev/null
+++ b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkdiff_gui Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html">pkdiff_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdiff_gui Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for pkdiff_gui:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.png" border="0" usemap="#dir__b6b6de371025fb67c6b8623f3d3cd2ce__dep" alt="/home/kempenep/pktools/qt/pkdiff_gui"/></div>
+<map name="dir__b6b6de371025fb67c6b8623f3d3cd2ce__dep" id="dir__b6b6de371025fb67c6b8623f3d3cd2ce__dep">
+<area shape="rect" id="node1" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html" title="pkdiff_gui" alt="" coords="27,52,105,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,117,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkdiff__gui_2main_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>main.cpp</b> <a href="pkdiff__gui_2main_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdiff__gui_2mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.cpp</b> <a href="pkdiff__gui_2mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkdiff__gui_2mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mainwindow.h</b> <a href="pkdiff__gui_2mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.map b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.map
new file mode 100644
index 0000000..ad28de2
--- /dev/null
+++ b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/pkdiff_gui" name="/home/kempenep/pktools/qt/pkdiff_gui">
+<area shape="rect" id="node1" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html" title="pkdiff_gui" alt="" coords="27,52,105,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,117,111"/>
+</map>
diff --git a/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.md5 b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.md5
new file mode 100644
index 0000000..f0ee98d
--- /dev/null
+++ b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.md5
@@ -0,0 +1 @@
+0df09d64d163559c1642b0f59823fec9
\ No newline at end of file
diff --git a/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.png b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.png
new file mode 100644
index 0000000..de54c48
Binary files /dev/null and b/doc/html/dir_b6b6de371025fb67c6b8623f3d3cd2ce_dep.png differ
diff --git a/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7.html b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7.html
new file mode 100644
index 0000000..1b53871
--- /dev/null
+++ b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html">build-pkcomposite_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkcomposite_gui-gcc-Release Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkcomposite_gui-gcc-Release:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.png" border="0" usemap="#dir__b8eb6544d8d9ffceba16909a7b9d17d7__dep" alt="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release"/></div>
+<map name="dir__b8eb6544d8d9ffceba16909a7b9d17d7__dep" id="dir__b8eb6544d8d9ffceba16909a7b9d17d7__dep">
+<area shape="rect" id="node1" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html" title="build-pkcomposite_gui-gcc-Release" alt="" coords="27,52,255,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,267,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.map b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.map
new file mode 100644
index 0000000..009e444
--- /dev/null
+++ b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release" name="/home/kempenep/pktools/qt/build-pkcomposite_gui-gcc-Release">
+<area shape="rect" id="node1" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html" title="build-pkcomposite_gui-gcc-Release" alt="" coords="27,52,255,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,267,111"/>
+</map>
diff --git a/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.md5 b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.md5
new file mode 100644
index 0000000..fffbedf
--- /dev/null
+++ b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.md5
@@ -0,0 +1 @@
+c7488fe8bb5008f9b47e1a3ee2ffd393
\ No newline at end of file
diff --git a/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.png b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.png
new file mode 100644
index 0000000..b13d2ea
Binary files /dev/null and b/doc/html/dir_b8eb6544d8d9ffceba16909a7b9d17d7_dep.png differ
diff --git a/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html
new file mode 100644
index 0000000..42c68e3
--- /dev/null
+++ b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html">build-pkextract_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkextract_gui-gcc-Debug Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkextract_gui-gcc-Debug:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.png" border="0" usemap="#dir__d7b2ebecdb5f44d7fa09bdedebc881a7__dep" alt="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug"/></div>
+<map name="dir__d7b2ebecdb5f44d7fa09bdedebc881a7__dep" id="dir__d7b2ebecdb5f44d7fa09bdedebc881a7__dep">
+<area shape="rect" id="node1" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html" title="build-pkextract_gui-gcc-Debug" alt="" coords="26,52,224,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,235,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.map b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.map
new file mode 100644
index 0000000..0121d88
--- /dev/null
+++ b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug" name="/home/kempenep/pktools/qt/build-pkextract_gui-gcc-Debug">
+<area shape="rect" id="node1" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html" title="build-pkextract_gui-gcc-Debug" alt="" coords="26,52,224,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,235,111"/>
+</map>
diff --git a/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.md5 b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.md5
new file mode 100644
index 0000000..4d132ed
--- /dev/null
+++ b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.md5
@@ -0,0 +1 @@
+7af0df1697ef693c5b6ca2143c088c4b
\ No newline at end of file
diff --git a/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.png b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.png
new file mode 100644
index 0000000..fc1c0e4
Binary files /dev/null and b/doc/html/dir_d7b2ebecdb5f44d7fa09bdedebc881a7_dep.png differ
diff --git a/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376.html b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376.html
new file mode 100644
index 0000000..406c19d
--- /dev/null
+++ b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/not_used Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html">not_used</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">not_used Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for not_used:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_e28b2035b152bb51229fe7a0fca4e376_dep.png" border="0" usemap="#dir__e28b2035b152bb51229fe7a0fca4e376__dep" alt="/home/kempenep/pktools/src/apps/not_used"/></div>
+<map name="dir__e28b2035b152bb51229fe7a0fca4e376__dep" id="dir__e28b2035b152bb51229fe7a0fca4e376__dep">
+<area shape="rect" id="node1" href="dir_e28b2035b152bb51229fe7a0fca4e376.html" title="not_used" alt="" coords="27,52,100,100"/><area shape="rect" id="clust1" href="dir_53adf0b982dc8545998aae3f283a5a58.html" title="apps" alt="" coords="16,16,112,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pkeditogr_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkeditogr.cc</b> <a href="pkeditogr_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkenhance_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkenhance.cc</b> <a href="pkenhance_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:pkndvi_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>pkndvi.cc</b> <a href="pkndvi_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.map b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.map
new file mode 100644
index 0000000..7c8b764
--- /dev/null
+++ b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/apps/not_used" name="/home/kempenep/pktools/src/apps/not_used">
+<area shape="rect" id="node1" href="dir_e28b2035b152bb51229fe7a0fca4e376.html" title="not_used" alt="" coords="27,52,100,100"/>
+<area shape="rect" id="clust1" href="dir_53adf0b982dc8545998aae3f283a5a58.html" title="apps" alt="" coords="16,16,112,111"/>
+</map>
diff --git a/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.md5 b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.md5
new file mode 100644
index 0000000..2313d5c
--- /dev/null
+++ b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.md5
@@ -0,0 +1 @@
+54c1058bdf7998f40b4f8f8f0441c774
\ No newline at end of file
diff --git a/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.png b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.png
new file mode 100644
index 0000000..3bcc320
Binary files /dev/null and b/doc/html/dir_e28b2035b152bb51229fe7a0fca4e376_dep.png differ
diff --git a/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc.html b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc.html
new file mode 100644
index 0000000..913ce04
--- /dev/null
+++ b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html">build-pksvm_gui-gcc-Debug</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pksvm_gui-gcc-Debug Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pksvm_gui-gcc-Debug:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.png" border="0" usemap="#dir__e61db0d85028141ec5940fd7f2a6e0fc__dep" alt="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug"/></div>
+<map name="dir__e61db0d85028141ec5940fd7f2a6e0fc__dep" id="dir__e61db0d85028141ec5940fd7f2a6e0fc__dep">
+<area shape="rect" id="node1" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html" title="build-pksvm_gui-gcc-Debug" alt="" coords="27,52,209,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,221,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.map b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.map
new file mode 100644
index 0000000..43426e5
--- /dev/null
+++ b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug" name="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Debug">
+<area shape="rect" id="node1" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html" title="build-pksvm_gui-gcc-Debug" alt="" coords="27,52,209,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,221,111"/>
+</map>
diff --git a/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.md5 b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.md5
new file mode 100644
index 0000000..b444780
--- /dev/null
+++ b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.md5
@@ -0,0 +1 @@
+465f06766900a94290281b83d3781d79
\ No newline at end of file
diff --git a/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.png b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.png
new file mode 100644
index 0000000..74f1c5d
Binary files /dev/null and b/doc/html/dir_e61db0d85028141ec5940fd7f2a6e0fc_dep.png differ
diff --git a/doc/html/dir_e6df591b0639d4c4807ef64d058833e2.html b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2.html
new file mode 100644
index 0000000..864c0fb
--- /dev/null
+++ b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">algorithms Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for algorithms:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_e6df591b0639d4c4807ef64d058833e2_dep.png" border="0" usemap="#dir__e6df591b0639d4c4807ef64d058833e2__dep" alt="/home/kempenep/pktools/src/algorithms"/></div>
+<map name="dir__e6df591b0639d4c4807ef64d058833e2__dep" id="dir__e6df591b0639d4c4807ef64d058833e2__dep">
+<area shape="rect" id="node1" href="dir_e6df591b0639d4c4807ef64d058833e2.html" title="algorithms" alt="" coords="27,52,108,100"/><area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,120,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:ConfusionMatrix_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ConfusionMatrix.cc</b> <a href="ConfusionMatrix_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ConfusionMatrix_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ConfusionMatrix.h</b> <a href="ConfusionMatrix_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:CostFactory_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>CostFactory.h</b> <a href="CostFactory_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:CostFactorySVM_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>CostFactorySVM.cc</b> <a href="CostFactorySVM_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:CostFactorySVM_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>CostFactorySVM.h</b> <a href="CostFactorySVM_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Egcs_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Egcs.cc</b> <a href="Egcs_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Egcs_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Egcs.h</b> <a href="Egcs_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:FeatureSelector_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>FeatureSelector.h</b> <a href="FeatureSelector_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Filter_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Filter.cc</b> <a href="Filter_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Filter_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Filter.h</b> <a href="Filter_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Filter2d_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Filter2d.cc</b> <a href="Filter2d_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Filter2d_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Filter2d.h</b> <a href="Filter2d_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:Filter__old_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>Filter_old.h</b> <a href="Filter__old_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgRegression_8cc"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgRegression.cc</b> <a href="ImgRegression_8cc_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ImgRegression_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ImgRegression.h</b> <a href="ImgRegression_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:myfann__cpp_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>myfann_cpp.h</b> <a href="myfann__cpp_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:OptFactory_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>OptFactory.h</b> <a href="OptFactory_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:StatFactory_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>StatFactory.h</b> <a href="StatFactory_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:svm_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>svm.cpp</b> <a href="svm_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:svm_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>svm.h</b> <a href="svm_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.map b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.map
new file mode 100644
index 0000000..302c831
--- /dev/null
+++ b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/src/algorithms" name="/home/kempenep/pktools/src/algorithms">
+<area shape="rect" id="node1" href="dir_e6df591b0639d4c4807ef64d058833e2.html" title="algorithms" alt="" coords="27,52,108,100"/>
+<area shape="rect" id="clust1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="16,16,120,111"/>
+</map>
diff --git a/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.md5 b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.md5
new file mode 100644
index 0000000..ed39f74
--- /dev/null
+++ b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.md5
@@ -0,0 +1 @@
+24830e296d23aedfdd82882d134b036a
\ No newline at end of file
diff --git a/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.png b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.png
new file mode 100644
index 0000000..3671f57
Binary files /dev/null and b/doc/html/dir_e6df591b0639d4c4807ef64d058833e2_dep.png differ
diff --git a/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2.html b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2.html
new file mode 100644
index 0000000..0122215
--- /dev/null
+++ b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ed1df9621940d6aa1183c365ad1750d2.html">build-pksvm_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pksvm_gui-gcc-Release Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pksvm_gui-gcc-Release:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_ed1df9621940d6aa1183c365ad1750d2_dep.png" border="0" usemap="#dir__ed1df9621940d6aa1183c365ad1750d2__dep" alt="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release"/></div>
+<map name="dir__ed1df9621940d6aa1183c365ad1750d2__dep" id="dir__ed1df9621940d6aa1183c365ad1750d2__dep">
+<area shape="rect" id="node1" href="dir_ed1df9621940d6aa1183c365ad1750d2.html" title="build-pksvm_gui-gcc-Release" alt="" coords="27,52,220,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,232,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pksvm__gui-gcc-Release_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pksvm__gui-gcc-Release_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.map b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.map
new file mode 100644
index 0000000..bedd210
--- /dev/null
+++ b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release" name="/home/kempenep/pktools/qt/build-pksvm_gui-gcc-Release">
+<area shape="rect" id="node1" href="dir_ed1df9621940d6aa1183c365ad1750d2.html" title="build-pksvm_gui-gcc-Release" alt="" coords="27,52,220,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,232,111"/>
+</map>
diff --git a/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.md5 b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.md5
new file mode 100644
index 0000000..50fd5df
--- /dev/null
+++ b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.md5
@@ -0,0 +1 @@
+7f040b78278908d2e6cbd34fe75f5551
\ No newline at end of file
diff --git a/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.png b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.png
new file mode 100644
index 0000000..2609d83
Binary files /dev/null and b/doc/html/dir_ed1df9621940d6aa1183c365ad1750d2_dep.png differ
diff --git a/doc/html/dir_f92e37ed5759424bff98155847b1034b.html b/doc/html/dir_f92e37ed5759424bff98155847b1034b.html
new file mode 100644
index 0000000..113c85f
--- /dev/null
+++ b/doc/html/dir_f92e37ed5759424bff98155847b1034b.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_f92e37ed5759424bff98155847b1034b.html">build-pkcrop_gui-gcc-Release</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">build-pkcrop_gui-gcc-Release Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for build-pkcrop_gui-gcc-Release:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_f92e37ed5759424bff98155847b1034b_dep.png" border="0" usemap="#dir__f92e37ed5759424bff98155847b1034b__dep" alt="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release"/></div>
+<map name="dir__f92e37ed5759424bff98155847b1034b__dep" id="dir__f92e37ed5759424bff98155847b1034b__dep">
+<area shape="rect" id="node1" href="dir_f92e37ed5759424bff98155847b1034b.html" title="build-pkcrop_gui-gcc-Release" alt="" coords="27,52,220,100"/><area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,232,111"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>moc_mainwindow.cpp</b> <a href="build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ui_mainwindow.h</b> <a href="build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.map b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.map
new file mode 100644
index 0000000..da62e97
--- /dev/null
+++ b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.map
@@ -0,0 +1,4 @@
+<map id="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release" name="/home/kempenep/pktools/qt/build-pkcrop_gui-gcc-Release">
+<area shape="rect" id="node1" href="dir_f92e37ed5759424bff98155847b1034b.html" title="build-pkcrop_gui-gcc-Release" alt="" coords="27,52,220,100"/>
+<area shape="rect" id="clust1" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" title="qt" alt="" coords="16,16,232,111"/>
+</map>
diff --git a/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.md5 b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.md5
new file mode 100644
index 0000000..8abab5d
--- /dev/null
+++ b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.md5
@@ -0,0 +1 @@
+cece616180c71c1a958400f3b634f93b
\ No newline at end of file
diff --git a/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.png b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.png
new file mode 100644
index 0000000..975ca35
Binary files /dev/null and b/doc/html/dir_f92e37ed5759424bff98155847b1034b_dep.png differ
diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css
new file mode 100644
index 0000000..f0f36f8
--- /dev/null
+++ b/doc/html/doxygen.css
@@ -0,0 +1,1366 @@
+/* The standard CSS for doxygen 1.8.6 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+ at media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/doc/html/doxygen.png differ
diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js
new file mode 100644
index 0000000..2f15470
--- /dev/null
+++ b/doc/html/dynsections.js
@@ -0,0 +1,104 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function(){
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.attr('src','ftv2folderopen.png');
+ a.attr('src','ftv2mnode.png');
+ $(this).show();
+ } else if (l==level+1) {
+ i.attr('src','ftv2folderclosed.png');
+ a.attr('src','ftv2pnode.png');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ //The clicked row
+ var currentRow = $('#row_'+id);
+ var currentRowImages = currentRow.find("img");
+
+ //All rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ //Only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() {
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+ return this.id.match(re);
+ });
+
+ //First row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
+ currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
+ rows.filter("[id^=row_"+id+"]").hide();
+ } else { //We are SHOWING
+ //All sub images
+ var childImages = childRows.find("img");
+ var childImg = childImages.filter("[id^=img]");
+ var childArr = childImages.filter("[id^=arr]");
+
+ currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
+ currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
+ childImg.attr('src','ftv2folderclosed.png'); //children closed
+ childArr.attr('src','ftv2pnode.png'); //children closed
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
+
+$(document).ready(function() {
+ $('.code,.codeRef').each(function() {
+ $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
+ $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
+ });
+});
diff --git a/doc/html/files.html b/doc/html/files.html
new file mode 100644
index 0000000..1b6a8a5
--- /dev/null
+++ b/doc/html/files.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_')"/><img id="img_0_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('0_')"/><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html" target="_self">qgis</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="____init_____8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>__init__.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcomposite_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkcomposite.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcrop_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkcrop.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdiff__accuracy_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdiff_accuracy.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkextract.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract__grid_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkextract_grid.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract__random_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkextract_random.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilter__spatial_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilter_spatial.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_8_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilter__spectral_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilter_spectral.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilterdem_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilterdem.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_10_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkgetmask_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkgetmask.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pklas2img_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pklas2img.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_12_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkreclass_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkreclass.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksetmask_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksetmask.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_14_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksvm_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksvm.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_15_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pktoolsAlgorithm_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pktoolsAlgorithm.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_16_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pktoolsAlgorithmProvider_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pktoolsAlgorithmProvider.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_17_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pktoolsUtils_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pktoolsUtils.py</b></td><td class="desc"></td></tr>
+<tr id="row_0_18_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="ProcessingPktoolsPlugin_8py_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ProcessingPktoolsPlugin.py</b></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img id="img_1_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('1_')"/><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" target="_self">qt</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_0_')"/><img id="img_1_0_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_0_')"/><a class="el" href="dir_280a0ba2820d23d6529bf494f1ea3ddd.html" target="_self">build-pkcomposite_gui-gcc-Debug</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkcomposite__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_')"/><img id="img_1_1_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_1_')"/><a class="el" href="dir_b8eb6544d8d9ffceba16909a7b9d17d7.html" target="_self">build-pkcomposite_gui-gcc-Release</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkcomposite__gui-gcc-Release_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkcomposite__gui-gcc-Release_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_')"/><img id="img_1_2_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_2_')"/><a class="el" href="dir_0f38b5d14ac73b43e2a48a75f9e70be8.html" target="_self">build-pkcrop_gui-gcc-Debug</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkcrop__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_2_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkcrop__gui-gcc-Debug_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_3_')"/><img id="img_1_3_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_3_')"/><a class="el" href="dir_f92e37ed5759424bff98155847b1034b.html" target="_self">build-pkcrop_gui-gcc-Release</a></td><td class="desc"></td></tr>
+<tr id="row_1_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkcrop__gui-gcc-Release_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_3_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkcrop__gui-gcc-Release_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_4_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_4_')"/><img id="img_1_4_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_4_')"/><a class="el" href="dir_5f1e10fd305b434def78aaf73fd56d60.html" target="_self">build-pkdiff_gui-gcc-Debug</a></td><td class="desc"></td></tr>
+<tr id="row_1_4_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkdiff__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_4_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkdiff__gui-gcc-Debug_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_5_')"/><img id="img_1_5_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_5_')"/><a class="el" href="dir_4dfaa1fe1382d1276d1c80b1d5035ade.html" target="_self">build-pkdiff_gui-gcc-Release</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkdiff__gui-gcc-Release_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_5_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkdiff__gui-gcc-Release_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_6_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_6_')"/><img id="img_1_6_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_6_')"/><a class="el" href="dir_d7b2ebecdb5f44d7fa09bdedebc881a7.html" target="_self">build-pkextract_gui-gcc-Debug</a></td><td class="desc"></td></tr>
+<tr id="row_1_6_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkextract__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_6_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkextract__gui-gcc-Debug_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_7_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_7_')"/><img id="img_1_7_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_7_')"/><a class="el" href="dir_41d189c72498e24f979b227eb8e138b1.html" target="_self">build-pkextract_gui-gcc-Release</a></td><td class="desc"></td></tr>
+<tr id="row_1_7_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pkextract__gui-gcc-Release_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_7_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pkextract__gui-gcc-Release_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_8_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_8_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_8_')"/><img id="img_1_8_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_8_')"/><a class="el" href="dir_e61db0d85028141ec5940fd7f2a6e0fc.html" target="_self">build-pksvm_gui-gcc-Debug</a></td><td class="desc"></td></tr>
+<tr id="row_1_8_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pksvm__gui-gcc-Debug_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_8_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pksvm__gui-gcc-Debug_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_9_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_9_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_9_')"/><img id="img_1_9_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_9_')"/><a class="el" href="dir_ed1df9621940d6aa1183c365ad1750d2.html" target="_self">build-pksvm_gui-gcc-Release</a></td><td class="desc"></td></tr>
+<tr id="row_1_9_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="build-pksvm__gui-gcc-Release_2moc__mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>moc_mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_9_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="build-pksvm__gui-gcc-Release_2ui__mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ui_mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_10_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_10_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_10_')"/><img id="img_1_10_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_10_')"/><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html" target="_self">pkcomposite_gui</a></td><td class="desc"></td></tr>
+<tr id="row_1_10_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcomposite__gui_2main_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>main.cc</b></td><td class="desc"></td></tr>
+<tr id="row_1_10_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcomposite__gui_2mainwindow_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.cc</b></td><td class="desc"></td></tr>
+<tr id="row_1_10_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pkcomposite__gui_2mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_11_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_11_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_11_')"/><img id="img_1_11_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_11_')"/><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html" target="_self">pkcrop_gui</a></td><td class="desc"></td></tr>
+<tr id="row_1_11_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcrop__gui_2main_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>main.cc</b></td><td class="desc"></td></tr>
+<tr id="row_1_11_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcrop__gui_2mainwindow_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.cc</b></td><td class="desc"></td></tr>
+<tr id="row_1_11_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pkcrop__gui_2mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_12_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_12_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_12_')"/><img id="img_1_12_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_12_')"/><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html" target="_self">pkdiff_gui</a></td><td class="desc"></td></tr>
+<tr id="row_1_12_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdiff__gui_2main_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>main.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_12_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdiff__gui_2mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_12_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pkdiff__gui_2mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_13_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_13_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_13_')"/><img id="img_1_13_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_13_')"/><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html" target="_self">pkextract_gui</a></td><td class="desc"></td></tr>
+<tr id="row_1_13_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract__gui_2main_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>main.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_13_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract__gui_2mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_13_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pkextract__gui_2mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_14_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_14_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_14_')"/><img id="img_1_14_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_14_')"/><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html" target="_self">pksvm_gui</a></td><td class="desc"></td></tr>
+<tr id="row_1_14_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksvm__gui_2main_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>main.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_14_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksvm__gui_2mainwindow_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_14_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pksvm__gui_2mainwindow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mainwindow.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img id="img_2_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('2_')"/><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_0_')"/><img id="img_2_0_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_0_')"/><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html" target="_self">algorithms</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ConfusionMatrix_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ConfusionMatrix.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ConfusionMatrix_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ConfusionMatrix.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="CostFactory_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>CostFactory.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="CostFactorySVM_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>CostFactorySVM.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="CostFactorySVM_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>CostFactorySVM.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Egcs_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Egcs.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Egcs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Egcs.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="FeatureSelector_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>FeatureSelector.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Filter_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Filter.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Filter_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Filter.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Filter2d_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Filter2d.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Filter2d_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Filter2d.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Filter__old_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Filter_old.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_13_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgRegression_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgRegression.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_14_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgRegression_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgRegression.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_15_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="myfann__cpp_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>myfann_cpp.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_16_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="OptFactory_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>OptFactory.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_17_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="StatFactory_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>StatFactory.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_18_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="svm_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>svm.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_19_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="svm_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>svm.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_1_')"/><img id="img_2_1_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_1_')"/><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html" target="_self">apps</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_1_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_1_0_')"/><img id="img_2_1_0_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_1_0_')"/><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html" target="_self">not_used</a>< [...]
+<tr id="row_2_1_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkeditogr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkeditogr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_0_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkenhance_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkenhance.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_0_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pkndvi_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkndvi.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkann_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkann.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkascii2img_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkascii2img.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkascii2ogr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkascii2ogr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcomposite_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkcomposite.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcreatect_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkcreatect.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkcrop_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkcrop.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdiff_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdiff.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdsm2shadow_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdsm2shadow.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdumpimg_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdumpimg.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_10_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdumpogr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdumpogr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_11_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkdumpogr_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkdumpogr.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_12_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkegcs_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkegcs.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_13_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkextract_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkextract.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_14_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfillnodata_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfillnodata.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_15_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilter_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilter.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_16_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilterascii_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilterascii.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_17_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfilterdem_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfilterdem.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_18_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfsann_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfsann.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_19_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfsann_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfsann.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_20_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkfssvm_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkfssvm.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_21_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkgetmask_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkgetmask.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_22_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkinfo_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkinfo.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_23_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkkalman_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkkalman.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_24_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pklas2img_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pklas2img.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_25_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkoptsvm_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkoptsvm.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_26_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkpolygonize_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkpolygonize.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_27_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkreclass_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkreclass.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_28_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkregann_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkregann.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_29_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksensormodel_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksensormodel.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_30_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksetmask_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksetmask.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_31_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pksieve_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksieve.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_32_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkstat_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkstat.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_33_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkstatascii_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkstatascii.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_34_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pkstatogr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pkstatogr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_35_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="pksvm_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pksvm.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_2_')"/><img id="img_2_2_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_2_')"/><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html" target="_self">base</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="IndexValue_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>IndexValue.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="Optionpk_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Optionpk.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="pktestOption_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>pktestOption.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="PosValue_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>PosValue.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="Vector2d_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Vector2d.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_3_')"/><img id="img_2_3_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_3_')"/><a class="el" href="dir_849702d4228bd835bdf1201002937cb3.html" target="_self">fileclasses</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="FileReaderAscii_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>FileReaderAscii.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_3_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="FileReaderAscii_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>FileReaderAscii.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_4_')"/><img id="img_2_4_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_4_')"/><a class="el" href="dir_6d2fd95b0bd390617ad5a1eb4a537b4a.html" target="_self">imageclasses</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgReaderGdal_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgReaderGdal.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgReaderGdal_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgReaderGdal.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgReaderOgr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgReaderOgr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgReaderOgr_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgReaderOgr.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgWriterGdal_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgWriterGdal.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgWriterGdal_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgWriterGdal.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ImgWriterOgr_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgWriterOgr.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_4_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="ImgWriterOgr_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ImgWriterOgr.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_5_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_5_')"/><img id="img_2_5_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_5_')"/><a class="el" href="dir_89a0bd85ecec8fbb2c320310670be290.html" target="_self">lasclasses</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="FileReaderLas_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>FileReaderLas.cc</b></td><td class="desc"></td></tr>
+<tr id="row_2_5_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="FileReaderLas_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>FileReaderLas.h</b></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img id="arr_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('3_')"/><img id="img_3_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('3_')"/><a class="el" href="dir_457de909e3893805a4d2d0b8c0742bd8.html" target="_self">vis_studio</a></td><td class="desc"></td></tr>
+<tr id="row_3_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_3_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('3_0_')"/><img id="img_3_0_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('3_0_')"/><a class="el" href="dir_0d45166ba6790a432639a127a727f02c.html" target="_self">base</a></td><td class="desc"></td></tr>
+<tr id="row_3_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="Optionpk_8cc_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>Optionpk.cc</b></td><td class="desc"></td></tr>
+<tr id="row_3_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="vis__studio_2config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>config.h</b></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>config.h</b></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/ftv2blank.png b/doc/html/ftv2blank.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2blank.png differ
diff --git a/doc/html/ftv2cl.png b/doc/html/ftv2cl.png
new file mode 100644
index 0000000..132f657
Binary files /dev/null and b/doc/html/ftv2cl.png differ
diff --git a/doc/html/ftv2doc.png b/doc/html/ftv2doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/html/ftv2doc.png differ
diff --git a/doc/html/ftv2folderclosed.png b/doc/html/ftv2folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/doc/html/ftv2folderclosed.png differ
diff --git a/doc/html/ftv2folderopen.png b/doc/html/ftv2folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/doc/html/ftv2folderopen.png differ
diff --git a/doc/html/ftv2lastnode.png b/doc/html/ftv2lastnode.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2lastnode.png differ
diff --git a/doc/html/ftv2link.png b/doc/html/ftv2link.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/html/ftv2link.png differ
diff --git a/doc/html/ftv2mlastnode.png b/doc/html/ftv2mlastnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/html/ftv2mlastnode.png differ
diff --git a/doc/html/ftv2mnode.png b/doc/html/ftv2mnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/html/ftv2mnode.png differ
diff --git a/doc/html/ftv2mo.png b/doc/html/ftv2mo.png
new file mode 100644
index 0000000..4bfb80f
Binary files /dev/null and b/doc/html/ftv2mo.png differ
diff --git a/doc/html/ftv2node.png b/doc/html/ftv2node.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2node.png differ
diff --git a/doc/html/ftv2ns.png b/doc/html/ftv2ns.png
new file mode 100644
index 0000000..72e3d71
Binary files /dev/null and b/doc/html/ftv2ns.png differ
diff --git a/doc/html/ftv2plastnode.png b/doc/html/ftv2plastnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/html/ftv2plastnode.png differ
diff --git a/doc/html/ftv2pnode.png b/doc/html/ftv2pnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/html/ftv2pnode.png differ
diff --git a/doc/html/ftv2splitbar.png b/doc/html/ftv2splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/doc/html/ftv2splitbar.png differ
diff --git a/doc/html/ftv2vertline.png b/doc/html/ftv2vertline.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/html/ftv2vertline.png differ
diff --git a/doc/html/functions.html b/doc/html/functions.html
new file mode 100644
index 0000000..9250c52
--- /dev/null
+++ b/doc/html/functions.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
+<li>findSubstring()
+: <a class="el" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk< T ></a>
+</li>
+<li>getDescription()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>getGPLv3License()
+: <a class="el" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">Optionpk< T ></a>
+</li>
+<li>getHelp()
+: <a class="el" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">Optionpk< T ></a>
+</li>
+<li>getLongName()
+: <a class="el" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">Optionpk< T ></a>
+</li>
+<li>getName()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>getShortName()
+: <a class="el" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">Optionpk< T ></a>
+</li>
+<li>initializeSettings()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>operator<<
+: <a class="el" href="classOptionpk.html#a4ab58d03540efa49fe3ebf6a58507f23">Optionpk< T ></a>
+</li>
+<li>Optionpk()
+: <a class="el" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk< T ></a>
+</li>
+<li>retrieveOption()
+: <a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">Optionpk< T ></a>
+</li>
+<li>setAll()
+: <a class="el" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk< T ></a>
+</li>
+<li>setDefault()
+: <a class="el" href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">Optionpk< T ></a>
+</li>
+<li>setHelp()
+: <a class="el" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">Optionpk< T ></a>
+</li>
+<li>setHide()
+: <a class="el" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">Optionpk< T ></a>
+</li>
+<li>setLongName()
+: <a class="el" href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">Optionpk< T ></a>
+</li>
+<li>setShortName()
+: <a class="el" href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">Optionpk< T ></a>
+</li>
+<li>unload()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>~Optionpk()
+: <a class="el" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">Optionpk< T ></a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
new file mode 100644
index 0000000..0e1304d
--- /dev/null
+++ b/doc/html/functions_func.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>findSubstring()
+: <a class="el" href="classOptionpk.html#a092414f315f6b310fc88eaf5688b81f4">Optionpk< T ></a>
+</li>
+<li>getDescription()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>getGPLv3License()
+: <a class="el" href="classOptionpk.html#acb7e411ce6a318424bf2ad1f9dc846ff">Optionpk< T ></a>
+</li>
+<li>getHelp()
+: <a class="el" href="classOptionpk.html#a6054c64a684a4aaba41787d9f8be031f">Optionpk< T ></a>
+</li>
+<li>getLongName()
+: <a class="el" href="classOptionpk.html#af7ce0ff4dfe57f1e6685b67fb1d70b69">Optionpk< T ></a>
+</li>
+<li>getName()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>getShortName()
+: <a class="el" href="classOptionpk.html#ae0d0d55bac2456e6cbcec97892667742">Optionpk< T ></a>
+</li>
+<li>initializeSettings()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>Optionpk()
+: <a class="el" href="classOptionpk.html#a0082d074d437413b3beefa06c0521644">Optionpk< T ></a>
+</li>
+<li>retrieveOption()
+: <a class="el" href="classOptionpk.html#a7b788a1b8e5c738732a1733613065ef7">Optionpk< T ></a>
+</li>
+<li>setAll()
+: <a class="el" href="classOptionpk.html#affd58e09b1baaf0b1754fbf938eea11a">Optionpk< T ></a>
+</li>
+<li>setDefault()
+: <a class="el" href="classOptionpk.html#ae9dc2dafc605ed3e2a8a798063ce7187">Optionpk< T ></a>
+</li>
+<li>setHelp()
+: <a class="el" href="classOptionpk.html#afea9af606e15b12bc49bc25d0477fe8e">Optionpk< T ></a>
+</li>
+<li>setHide()
+: <a class="el" href="classOptionpk.html#a95628f0f149cb9465468facfb3f0f915">Optionpk< T ></a>
+</li>
+<li>setLongName()
+: <a class="el" href="classOptionpk.html#a6ee7c0fc0cbea09eac543e1d2c5b7457">Optionpk< T ></a>
+</li>
+<li>setShortName()
+: <a class="el" href="classOptionpk.html#a561e7d4b4141cd9023563d4dee01b932">Optionpk< T ></a>
+</li>
+<li>unload()
+: <a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a>
+</li>
+<li>~Optionpk()
+: <a class="el" href="classOptionpk.html#aacf921491e6b6fab3c4cad8b39594cff">Optionpk< T ></a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
new file mode 100644
index 0000000..0e772bc
--- /dev/null
+++ b/doc/html/functions_rela.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Members - Related Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_rela.html"><span>Related Functions</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>operator<<
+: <a class="el" href="classOptionpk.html#a4ab58d03540efa49fe3ebf6a58507f23">Optionpk< T ></a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/graph_legend.html b/doc/html/graph_legend.html
new file mode 100644
index 0000000..f305ce6
--- /dev/null
+++ b/doc/html/graph_legend.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Graph Legend</div> </div>
+</div><!--header-->
+<div class="contents">
+<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
+<p>Consider the following example: </p>
+<div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
+<div class="line"><span class="keyword">class </span>Invisible { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
+<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
+<div class="line"></div>
+<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
+<div class="line"><span class="keyword">class </span>Undocumented { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! A template class */</span></div>
+<div class="line"><span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span>Templ { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
+<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
+<div class="line"><span class="keyword">class </span>Used { };</div>
+<div class="line"><span class="comment"></span></div>
+<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
+<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
+<div class="line"> <span class="keyword">protected</span> ProtectedBase,</div>
+<div class="line"> <span class="keyword">private</span> PrivateBase,</div>
+<div class="line"> <span class="keyword">public</span> Undocumented,</div>
+<div class="line"> <span class="keyword">public</span> Templ<int></div>
+<div class="line">{</div>
+<div class="line"> <span class="keyword">private</span>:</div>
+<div class="line"> Used *m_usedClass;</div>
+<div class="line">};</div>
+</div><!-- fragment --><p> This will result in the following graph:</p>
+<center><div class="image">
+<img src="graph_legend.png" />
+</div>
+</center><p>The boxes in the above graph have the following meaning: </p>
+<ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a grey border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+<p>The arrows have the following meaning: </p>
+<ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/graph_legend.md5 b/doc/html/graph_legend.md5
new file mode 100644
index 0000000..a06ed05
--- /dev/null
+++ b/doc/html/graph_legend.md5
@@ -0,0 +1 @@
+387ff8eb65306fa251338d3c9bd7bfff
\ No newline at end of file
diff --git a/doc/html/graph_legend.png b/doc/html/graph_legend.png
new file mode 100644
index 0000000..6c1d0c2
Binary files /dev/null and b/doc/html/graph_legend.png differ
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
new file mode 100644
index 0000000..5fd38ed
--- /dev/null
+++ b/doc/html/hierarchy.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li class="current"><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Hierarchy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
+This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCache.html" target="_self">Cache</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCompare__IndexValue.html" target="_self">Compare_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCompare__PosValue.html" target="_self">Compare_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classconfusionmatrix_1_1ConfusionMatrix.html" target="_self">confusionmatrix::ConfusionMatrix</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img id="arr_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('4_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactory.html" target="_self">CostFactory</a></td><td class="desc"></td></tr>
+<tr id="row_4_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactoryANN.html" target="_self">CostFactoryANN</a></td><td class="desc"></td></tr>
+<tr id="row_4_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCostFactorySVM.html" target="_self">CostFactorySVM</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDataModel.html" target="_self">DataModel</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structdecision__function.html" target="_self">decision_function</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDecrease__IndexValue.html" target="_self">Decrease_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDecrease__PosValue.html" target="_self">Decrease_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classEgcs.html" target="_self">Egcs</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img id="arr_10_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('10_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>std::exception</b></td><td class="desc">STL class </td></tr>
+<tr id="row_10_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_10_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('10_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>std::runtime_error</b></td><td class="desc">STL class </td></tr>
+<tr id="row_10_0_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBadConversion.html" target="_self">BadConversion</a></td><td class="desc">Throw this class when syntax error in command line option </td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFeatureSelector.html" target="_self">FeatureSelector</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFileReaderAscii.html" target="_self">FileReaderAscii</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFileReaderLas.html" target="_self">FileReaderLas</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classfilter_1_1Filter.html" target="_self">filter::Filter</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classfilter2d_1_1Filter2d.html" target="_self">filter2d::Filter2d</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img id="arr_16_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('16_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>FilterI</b></td><td class="desc"></td></tr>
+<tr id="row_16_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classLastReturnFilter.html" target="_self">LastReturnFilter</a></td><td class="desc"></td></tr>
+<tr id="row_17_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgReaderGdal.html" target="_self">ImgReaderGdal</a></td><td class="desc"></td></tr>
+<tr id="row_18_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgReaderOgr.html" target="_self">ImgReaderOgr</a></td><td class="desc"></td></tr>
+<tr id="row_19_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classimgregression_1_1ImgRegression.html" target="_self">imgregression::ImgRegression</a></td><td class="desc"></td></tr>
+<tr id="row_20_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgWriterGdal.html" target="_self">ImgWriterGdal</a></td><td class="desc"></td></tr>
+<tr id="row_21_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classImgWriterOgr.html" target="_self">ImgWriterOgr</a></td><td class="desc"></td></tr>
+<tr id="row_22_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIncrease__IndexValue.html" target="_self">Increase_IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_23_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIncrease__PosValue.html" target="_self">Increase_PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_24_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structIndexValue.html" target="_self">IndexValue</a></td><td class="desc"></td></tr>
+<tr id="row_25_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFANN_1_1neural__net.html" target="_self">FANN::neural_net</a></td><td class="desc"></td></tr>
+<tr id="row_26_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOptFactory.html" target="_self">OptFactory</a></td><td class="desc"></td></tr>
+<tr id="row_27_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html" target="_self">qgis.pktoolsUtils.pktoolsUtils</a></td><td class="desc"></td></tr>
+<tr id="row_28_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structPosValue.html" target="_self">PosValue</a></td><td class="desc"></td></tr>
+<tr id="row_29_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html" target="_self">qgis.ProcessingPktoolsPlugin.ProcessingPktoolsPlugin</a></td><td class="desc"></td></tr>
+<tr id="row_30_"><td class="entry"><img id="arr_30_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('30_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>QMainWindow</b></td><td class="desc"></td></tr>
+<tr id="row_30_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_30_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_30_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_30_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_30_4_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMainWindow.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img id="arr_31_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('31_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classQMatrix.html" target="_self">QMatrix</a></td><td class="desc"></td></tr>
+<tr id="row_31_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_31_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('31_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classKernel.html" target="_self">Kernel</a></td><td class="desc"></td></tr>
+<tr id="row_31_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classONE__CLASS__Q.html" target="_self">ONE_CLASS_Q</a></td><td class="desc"></td></tr>
+<tr id="row_31_0_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSVC__Q.html" target="_self">SVC_Q</a></td><td class="desc"></td></tr>
+<tr id="row_31_0_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSVR__Q.html" target="_self">SVR_Q</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSolver_1_1SolutionInfo.html" target="_self">Solver::SolutionInfo</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img id="arr_33_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('33_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSolver.html" target="_self">Solver</a></td><td class="desc"></td></tr>
+<tr id="row_33_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSolver__NU.html" target="_self">Solver_NU</a></td><td class="desc"></td></tr>
+<tr id="row_34_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classstatfactory_1_1StatFactory.html" target="_self">statfactory::StatFactory</a></td><td class="desc"></td></tr>
+<tr id="row_35_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__model.html" target="_self">svm_model</a></td><td class="desc"></td></tr>
+<tr id="row_36_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__node.html" target="_self">svm_node</a></td><td class="desc"></td></tr>
+<tr id="row_37_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__parameter.html" target="_self">svm_parameter</a></td><td class="desc"></td></tr>
+<tr id="row_38_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsvm__problem.html" target="_self">svm_problem</a></td><td class="desc"></td></tr>
+<tr id="row_39_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classFANN_1_1training__data.html" target="_self">FANN::training_data</a></td><td class="desc"></td></tr>
+<tr id="row_40_"><td class="entry"><img id="arr_40_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('40_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi__MainWindow.html" target="_self">Ui_MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_4_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_5_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_6_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_7_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_8_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_40_9_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classUi_1_1MainWindow.html" target="_self">Ui::MainWindow</a></td><td class="desc"></td></tr>
+<tr id="row_41_" class="even"><td class="entry"><img id="arr_41_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('41_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>std::vector< T ></b></td><td class="desc">STL class </td></tr>
+<tr id="row_41_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOptionpk.html" target="_self">Optionpk< T ></a></td><td class="desc"></td></tr>
+<tr id="row_41_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classVector2d.html" target="_self">Vector2d< T ></a></td><td class="desc"></td></tr>
+<tr id="row_41_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classVector2d.html" target="_self">Vector2d< double ></a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img id="arr_42_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('42_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>AlgorithmProvider</b></td><td class="desc"></td></tr>
+<tr id="row_42_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html" target="_self">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a></td><td class="desc"></td></tr>
+<tr id="row_43_" class="even"><td class="entry"><img id="arr_43_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('43_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>GeoAlgorithm</b></td><td class="desc"></td></tr>
+<tr id="row_43_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html" target="_self">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img id="arr_44_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('44_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>pktoolsAlgorithm</b></td><td class="desc"></td></tr>
+<tr id="row_44_0_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkcomposite_1_1pkcomposite.html" target="_self">qgis.pkcomposite.pkcomposite</a></td><td class="desc"></td></tr>
+<tr id="row_44_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkcrop_1_1pkcrop.html" target="_self">qgis.pkcrop.pkcrop</a></td><td class="desc"></td></tr>
+<tr id="row_44_2_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html" target="_self">qgis.pkdiff_accuracy.pkdiff_accuracy</a></td><td class="desc"></td></tr>
+<tr id="row_44_3_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract_1_1pkextract.html" target="_self">qgis.pkextract.pkextract</a></td><td class="desc"></td></tr>
+<tr id="row_44_4_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html" target="_self">qgis.pkextract_grid.pkextract_grid</a></td><td class="desc"></td></tr>
+<tr id="row_44_5_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkextract__random_1_1pkextract__random.html" target="_self">qgis.pkextract_random.pkextract_random</a></td><td class="desc"></td></tr>
+<tr id="row_44_6_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html" target="_self">qgis.pkfilter_spatial.pkfilter_spatial</a></td><td class="desc"></td></tr>
+<tr id="row_44_7_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html" target="_self">qgis.pkfilter_spectral.pkfilter_spectral</a></td><td class="desc"></td></tr>
+<tr id="row_44_8_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html" target="_self">qgis.pkfilterdem.pkfilterdem</a></td><td class="desc"></td></tr>
+<tr id="row_44_9_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkgetmask_1_1pkgetmask.html" target="_self">qgis.pkgetmask.pkgetmask</a></td><td class="desc"></td></tr>
+<tr id="row_44_10_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pklas2img_1_1pklas2img.html" target="_self">qgis.pklas2img.pklas2img</a></td><td class="desc"></td></tr>
+<tr id="row_44_11_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pkreclass_1_1pkreclass.html" target="_self">qgis.pkreclass.pkreclass</a></td><td class="desc"></td></tr>
+<tr id="row_44_12_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pksetmask_1_1pksetmask.html" target="_self">qgis.pksetmask.pksetmask</a></td><td class="desc"></td></tr>
+<tr id="row_44_13_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classqgis_1_1pksvm_1_1pksvm.html" target="_self">qgis.pksvm.pksvm</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644
index 0000000..1ff5911
--- /dev/null
+++ b/doc/html/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pktools Documentation</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><ul>
+<li><a class="el" href="index.html#pktools_introduction">Introduction</a></li>
+<li><a class="el" href="index.html#pktools_license">License</a></li>
+<li><a class="el" href="index.html#pktools_download">Download</a></li>
+<li><a class="el" href="index.html#pktools_refer">How to refer</a></li>
+<li><a class="el" href="index.html#pktools_installation">Installation</a></li>
+<li><a class="el" href="md_apps.html#available_tools">Available Tools</a></li>
+<li><a class="el" href="index.html#pktools_bugs">Found a bug or need a change?</a></li>
+</ul>
+<h1><a class="anchor" id="pktools_introduction"></a>
+Introduction</h1>
+<p>pktools is a collection of programs written in C++ for image processing with a focus on remote sensing applications. It relies on the Geospatial Data Abstraction Library (GDAL, <a href="http://www.gdal.org">http://www.gdal.org</a>) and OGR.</p>
+<p>All utilities in pktools use command line options and have a built in help</p>
+<ul>
+<li>use the <code>-h</code> option to get help</li>
+<li>pktools ALWAYS use -i for input and -o for output (unlike GDAL utilities that commonly use last argument as output and second but last argument as input)</li>
+</ul>
+<p>Check the code <a href="https://www.openhub.net/p/pktools">statistics</a></p>
+<h1><a class="anchor" id="pktools_license"></a>
+License</h1>
+<p>pktools is written by Pieter Kempeneers and released under the GNU General Public License version3</p>
+<p>See <a href="http://www.gnu.org/licenses">http://www.gnu.org/licenses</a> for more details</p>
+<h1><a class="anchor" id="pktools_download"></a>
+Download</h1>
+<p>You can <a href="http://download.savannah.gnu.org/releases/pktools/">download</a> the latest release from <a href="https://savannah.nongnu.org/projects/pktools">Savannah</a></p>
+<p>Or you can get a copy from the Git repository</p>
+<div class="fragment"><div class="line">git clone git:<span class="comment">//git.savannah.nongnu.org/pktools.git</span></div>
+</div><!-- fragment --><h1><a class="anchor" id="pktools_refer"></a>
+How to refer</h1>
+<p>Please refer to pktools as: <a href="http://pktools.nongnu.org">http://pktools.nongnu.org</a> (Pieter Kempeneers)</p>
+<p>Or use the following reference to the book on <a href="http://www.springer.com/earth+sciences+and+geography/earth+system+sciences/book/978-3-319-01823-2">Open Source Geospatial Tools</a></p>
+<p>contact: kempenep at gmail.com</p>
+<h1><a class="anchor" id="pktools_installation"></a>
+Installation</h1>
+<p>Installation for <a class="el" href="md_installation_linux.html#installation_linux">Linux</a></p>
+<p>Installation for <a class="el" href="md_installation_windows.html#installation_windows">Windows</a></p>
+<h1><a class="anchor" id="pktools_bugs"></a>
+Bug reports and change requests</h1>
+<p>Please write a <a href="https://savannah.nongnu.org/bugs/?func=additem&group=pktools">ticket</a> in savannah to report bugs and request changes. You will automatically be informed about the ticket status and this helps me to keep track of the bugs/changes. </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/inherit_graph_0.map b/doc/html/inherit_graph_0.map
new file mode 100644
index 0000000..445d066
--- /dev/null
+++ b/doc/html/inherit_graph_0.map
@@ -0,0 +1,5 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" title="STL class. " alt="" coords="5,5,109,32"/>
+<area shape="rect" id="node2" title="STL class. " alt="" coords="158,5,282,32"/>
+<area shape="rect" id="node3" href="$classBadConversion.html" title="throw this class when syntax error in command line option " alt="" coords="331,5,442,32"/>
+</map>
diff --git a/doc/html/inherit_graph_0.md5 b/doc/html/inherit_graph_0.md5
new file mode 100644
index 0000000..75892f5
--- /dev/null
+++ b/doc/html/inherit_graph_0.md5
@@ -0,0 +1 @@
+bbbf3c99db2603d6aa3dc4f84e081907
\ No newline at end of file
diff --git a/doc/html/inherit_graph_0.png b/doc/html/inherit_graph_0.png
new file mode 100644
index 0000000..1dc1a98
Binary files /dev/null and b/doc/html/inherit_graph_0.png differ
diff --git a/doc/html/inherit_graph_1.map b/doc/html/inherit_graph_1.map
new file mode 100644
index 0000000..bb05386
--- /dev/null
+++ b/doc/html/inherit_graph_1.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classCache.html" title="Cache" alt="" coords="6,5,66,32"/>
+</map>
diff --git a/doc/html/inherit_graph_1.md5 b/doc/html/inherit_graph_1.md5
new file mode 100644
index 0000000..b611fd8
--- /dev/null
+++ b/doc/html/inherit_graph_1.md5
@@ -0,0 +1 @@
+17afa80b265b109e03a2a1e3cd25f7a2
\ No newline at end of file
diff --git a/doc/html/inherit_graph_1.png b/doc/html/inherit_graph_1.png
new file mode 100644
index 0000000..a721539
Binary files /dev/null and b/doc/html/inherit_graph_1.png differ
diff --git a/doc/html/inherit_graph_10.map b/doc/html/inherit_graph_10.map
new file mode 100644
index 0000000..cd2fc13
--- /dev/null
+++ b/doc/html/inherit_graph_10.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classEgcs.html" title="Egcs" alt="" coords="6,5,58,32"/>
+</map>
diff --git a/doc/html/inherit_graph_10.md5 b/doc/html/inherit_graph_10.md5
new file mode 100644
index 0000000..ad8c42d
--- /dev/null
+++ b/doc/html/inherit_graph_10.md5
@@ -0,0 +1 @@
+cf51d7512e9b125e1bf883b69eb17331
\ No newline at end of file
diff --git a/doc/html/inherit_graph_10.png b/doc/html/inherit_graph_10.png
new file mode 100644
index 0000000..2b73482
Binary files /dev/null and b/doc/html/inherit_graph_10.png differ
diff --git a/doc/html/inherit_graph_11.map b/doc/html/inherit_graph_11.map
new file mode 100644
index 0000000..601d5ed
--- /dev/null
+++ b/doc/html/inherit_graph_11.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classFANN_1_1neural__net.html" title="FANN::neural_net" alt="" coords="6,5,133,32"/>
+</map>
diff --git a/doc/html/inherit_graph_11.md5 b/doc/html/inherit_graph_11.md5
new file mode 100644
index 0000000..d40cbf9
--- /dev/null
+++ b/doc/html/inherit_graph_11.md5
@@ -0,0 +1 @@
+3ac4a0099168f402e096a08d93a6a94b
\ No newline at end of file
diff --git a/doc/html/inherit_graph_11.png b/doc/html/inherit_graph_11.png
new file mode 100644
index 0000000..aa0a684
Binary files /dev/null and b/doc/html/inherit_graph_11.png differ
diff --git a/doc/html/inherit_graph_12.map b/doc/html/inherit_graph_12.map
new file mode 100644
index 0000000..534ee25
--- /dev/null
+++ b/doc/html/inherit_graph_12.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classFANN_1_1training__data.html" title="FANN::training_data" alt="" coords="5,5,147,32"/>
+</map>
diff --git a/doc/html/inherit_graph_12.md5 b/doc/html/inherit_graph_12.md5
new file mode 100644
index 0000000..572038e
--- /dev/null
+++ b/doc/html/inherit_graph_12.md5
@@ -0,0 +1 @@
+335156a1751dfab19b1fec8c3a082454
\ No newline at end of file
diff --git a/doc/html/inherit_graph_12.png b/doc/html/inherit_graph_12.png
new file mode 100644
index 0000000..1061c58
Binary files /dev/null and b/doc/html/inherit_graph_12.png differ
diff --git a/doc/html/inherit_graph_13.map b/doc/html/inherit_graph_13.map
new file mode 100644
index 0000000..c449c14
--- /dev/null
+++ b/doc/html/inherit_graph_13.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classFeatureSelector.html" title="FeatureSelector" alt="" coords="5,5,120,32"/>
+</map>
diff --git a/doc/html/inherit_graph_13.md5 b/doc/html/inherit_graph_13.md5
new file mode 100644
index 0000000..c64cf5c
--- /dev/null
+++ b/doc/html/inherit_graph_13.md5
@@ -0,0 +1 @@
+d7659eac38b836d9fe385459622c758d
\ No newline at end of file
diff --git a/doc/html/inherit_graph_13.png b/doc/html/inherit_graph_13.png
new file mode 100644
index 0000000..344be4a
Binary files /dev/null and b/doc/html/inherit_graph_13.png differ
diff --git a/doc/html/inherit_graph_14.map b/doc/html/inherit_graph_14.map
new file mode 100644
index 0000000..cdfef2f
--- /dev/null
+++ b/doc/html/inherit_graph_14.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classFileReaderAscii.html" title="FileReaderAscii" alt="" coords="5,5,120,32"/>
+</map>
diff --git a/doc/html/inherit_graph_14.md5 b/doc/html/inherit_graph_14.md5
new file mode 100644
index 0000000..56cdf1e
--- /dev/null
+++ b/doc/html/inherit_graph_14.md5
@@ -0,0 +1 @@
+70f7c2bb09bded5be1cd7f20c73a61ab
\ No newline at end of file
diff --git a/doc/html/inherit_graph_14.png b/doc/html/inherit_graph_14.png
new file mode 100644
index 0000000..6840178
Binary files /dev/null and b/doc/html/inherit_graph_14.png differ
diff --git a/doc/html/inherit_graph_15.map b/doc/html/inherit_graph_15.map
new file mode 100644
index 0000000..333689b
--- /dev/null
+++ b/doc/html/inherit_graph_15.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classFileReaderLas.html" title="FileReaderLas" alt="" coords="5,5,112,32"/>
+</map>
diff --git a/doc/html/inherit_graph_15.md5 b/doc/html/inherit_graph_15.md5
new file mode 100644
index 0000000..61f5f36
--- /dev/null
+++ b/doc/html/inherit_graph_15.md5
@@ -0,0 +1 @@
+63abf9dc85b779812e5853a91d813293
\ No newline at end of file
diff --git a/doc/html/inherit_graph_15.png b/doc/html/inherit_graph_15.png
new file mode 100644
index 0000000..787dd4c
Binary files /dev/null and b/doc/html/inherit_graph_15.png differ
diff --git a/doc/html/inherit_graph_16.map b/doc/html/inherit_graph_16.map
new file mode 100644
index 0000000..f4283f9
--- /dev/null
+++ b/doc/html/inherit_graph_16.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classfilter2d_1_1Filter2d.html" title="filter2d::Filter2d" alt="" coords="5,5,117,32"/>
+</map>
diff --git a/doc/html/inherit_graph_16.md5 b/doc/html/inherit_graph_16.md5
new file mode 100644
index 0000000..73569b7
--- /dev/null
+++ b/doc/html/inherit_graph_16.md5
@@ -0,0 +1 @@
+7eb174f715b0c5488a80017bef290745
\ No newline at end of file
diff --git a/doc/html/inherit_graph_16.png b/doc/html/inherit_graph_16.png
new file mode 100644
index 0000000..31cffdf
Binary files /dev/null and b/doc/html/inherit_graph_16.png differ
diff --git a/doc/html/inherit_graph_17.map b/doc/html/inherit_graph_17.map
new file mode 100644
index 0000000..47d7e5c
--- /dev/null
+++ b/doc/html/inherit_graph_17.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classfilter_1_1Filter.html" title="filter::Filter" alt="" coords="6,5,90,32"/>
+</map>
diff --git a/doc/html/inherit_graph_17.md5 b/doc/html/inherit_graph_17.md5
new file mode 100644
index 0000000..c27798f
--- /dev/null
+++ b/doc/html/inherit_graph_17.md5
@@ -0,0 +1 @@
+8cb6dde6a68c795b9bab261632e7a838
\ No newline at end of file
diff --git a/doc/html/inherit_graph_17.png b/doc/html/inherit_graph_17.png
new file mode 100644
index 0000000..99d275f
Binary files /dev/null and b/doc/html/inherit_graph_17.png differ
diff --git a/doc/html/inherit_graph_18.map b/doc/html/inherit_graph_18.map
new file mode 100644
index 0000000..a1b9b12
--- /dev/null
+++ b/doc/html/inherit_graph_18.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classImgReaderGdal.html" title="ImgReaderGdal" alt="" coords="6,5,119,32"/>
+</map>
diff --git a/doc/html/inherit_graph_18.md5 b/doc/html/inherit_graph_18.md5
new file mode 100644
index 0000000..9185b56
--- /dev/null
+++ b/doc/html/inherit_graph_18.md5
@@ -0,0 +1 @@
+e20a3338ff5cbac8df4dc4de29a54315
\ No newline at end of file
diff --git a/doc/html/inherit_graph_18.png b/doc/html/inherit_graph_18.png
new file mode 100644
index 0000000..178dfc8
Binary files /dev/null and b/doc/html/inherit_graph_18.png differ
diff --git a/doc/html/inherit_graph_19.map b/doc/html/inherit_graph_19.map
new file mode 100644
index 0000000..219cfc6
--- /dev/null
+++ b/doc/html/inherit_graph_19.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classImgReaderOgr.html" title="ImgReaderOgr" alt="" coords="5,5,112,32"/>
+</map>
diff --git a/doc/html/inherit_graph_19.md5 b/doc/html/inherit_graph_19.md5
new file mode 100644
index 0000000..32ddd37
--- /dev/null
+++ b/doc/html/inherit_graph_19.md5
@@ -0,0 +1 @@
+ebf49c77976eace6726b30bc888c949a
\ No newline at end of file
diff --git a/doc/html/inherit_graph_19.png b/doc/html/inherit_graph_19.png
new file mode 100644
index 0000000..34fd8e0
Binary files /dev/null and b/doc/html/inherit_graph_19.png differ
diff --git a/doc/html/inherit_graph_2.map b/doc/html/inherit_graph_2.map
new file mode 100644
index 0000000..69c98f9
--- /dev/null
+++ b/doc/html/inherit_graph_2.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classCompare__IndexValue.html" title="Compare_IndexValue" alt="" coords="5,5,152,32"/>
+</map>
diff --git a/doc/html/inherit_graph_2.md5 b/doc/html/inherit_graph_2.md5
new file mode 100644
index 0000000..07f2e6f
--- /dev/null
+++ b/doc/html/inherit_graph_2.md5
@@ -0,0 +1 @@
+a712eee6ed4da3865c5a6e68e7999cec
\ No newline at end of file
diff --git a/doc/html/inherit_graph_2.png b/doc/html/inherit_graph_2.png
new file mode 100644
index 0000000..06cdf72
Binary files /dev/null and b/doc/html/inherit_graph_2.png differ
diff --git a/doc/html/inherit_graph_20.map b/doc/html/inherit_graph_20.map
new file mode 100644
index 0000000..4542026
--- /dev/null
+++ b/doc/html/inherit_graph_20.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classimgregression_1_1ImgRegression.html" title="imgregression::ImgRegression" alt="" coords="6,5,205,32"/>
+</map>
diff --git a/doc/html/inherit_graph_20.md5 b/doc/html/inherit_graph_20.md5
new file mode 100644
index 0000000..bdbec24
--- /dev/null
+++ b/doc/html/inherit_graph_20.md5
@@ -0,0 +1 @@
+afdf8baeea1a9b1f09cb0eadd9de847f
\ No newline at end of file
diff --git a/doc/html/inherit_graph_20.png b/doc/html/inherit_graph_20.png
new file mode 100644
index 0000000..46708cb
Binary files /dev/null and b/doc/html/inherit_graph_20.png differ
diff --git a/doc/html/inherit_graph_21.map b/doc/html/inherit_graph_21.map
new file mode 100644
index 0000000..016eef4
--- /dev/null
+++ b/doc/html/inherit_graph_21.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classImgWriterGdal.html" title="ImgWriterGdal" alt="" coords="5,5,112,32"/>
+</map>
diff --git a/doc/html/inherit_graph_21.md5 b/doc/html/inherit_graph_21.md5
new file mode 100644
index 0000000..dad3d1a
--- /dev/null
+++ b/doc/html/inherit_graph_21.md5
@@ -0,0 +1 @@
+41671d11f31017cab1e0c045e1592946
\ No newline at end of file
diff --git a/doc/html/inherit_graph_21.png b/doc/html/inherit_graph_21.png
new file mode 100644
index 0000000..1a8cc82
Binary files /dev/null and b/doc/html/inherit_graph_21.png differ
diff --git a/doc/html/inherit_graph_22.map b/doc/html/inherit_graph_22.map
new file mode 100644
index 0000000..24933aa
--- /dev/null
+++ b/doc/html/inherit_graph_22.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classImgWriterOgr.html" title="ImgWriterOgr" alt="" coords="6,5,106,32"/>
+</map>
diff --git a/doc/html/inherit_graph_22.md5 b/doc/html/inherit_graph_22.md5
new file mode 100644
index 0000000..0c84b4a
--- /dev/null
+++ b/doc/html/inherit_graph_22.md5
@@ -0,0 +1 @@
+6e5a11fe9edd8d1595a44dfa80dfce6a
\ No newline at end of file
diff --git a/doc/html/inherit_graph_22.png b/doc/html/inherit_graph_22.png
new file mode 100644
index 0000000..fb54deb
Binary files /dev/null and b/doc/html/inherit_graph_22.png differ
diff --git a/doc/html/inherit_graph_23.map b/doc/html/inherit_graph_23.map
new file mode 100644
index 0000000..7962dfa
--- /dev/null
+++ b/doc/html/inherit_graph_23.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classIncrease__IndexValue.html" title="Increase_IndexValue" alt="" coords="5,5,149,32"/>
+</map>
diff --git a/doc/html/inherit_graph_23.md5 b/doc/html/inherit_graph_23.md5
new file mode 100644
index 0000000..a8084a2
--- /dev/null
+++ b/doc/html/inherit_graph_23.md5
@@ -0,0 +1 @@
+d6e93105bd541f3f440ea5342855f537
\ No newline at end of file
diff --git a/doc/html/inherit_graph_23.png b/doc/html/inherit_graph_23.png
new file mode 100644
index 0000000..b6cd30d
Binary files /dev/null and b/doc/html/inherit_graph_23.png differ
diff --git a/doc/html/inherit_graph_24.map b/doc/html/inherit_graph_24.map
new file mode 100644
index 0000000..466aba9
--- /dev/null
+++ b/doc/html/inherit_graph_24.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classIncrease__PosValue.html" title="Increase_PosValue" alt="" coords="6,5,141,32"/>
+</map>
diff --git a/doc/html/inherit_graph_24.md5 b/doc/html/inherit_graph_24.md5
new file mode 100644
index 0000000..868ecea
--- /dev/null
+++ b/doc/html/inherit_graph_24.md5
@@ -0,0 +1 @@
+3abc167c2529f40a3c3946792c422224
\ No newline at end of file
diff --git a/doc/html/inherit_graph_24.png b/doc/html/inherit_graph_24.png
new file mode 100644
index 0000000..126932b
Binary files /dev/null and b/doc/html/inherit_graph_24.png differ
diff --git a/doc/html/inherit_graph_25.map b/doc/html/inherit_graph_25.map
new file mode 100644
index 0000000..8342af7
--- /dev/null
+++ b/doc/html/inherit_graph_25.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structIndexValue.html" title="IndexValue" alt="" coords="6,5,93,32"/>
+</map>
diff --git a/doc/html/inherit_graph_25.md5 b/doc/html/inherit_graph_25.md5
new file mode 100644
index 0000000..2b82ca8
--- /dev/null
+++ b/doc/html/inherit_graph_25.md5
@@ -0,0 +1 @@
+9a43f2ea03fd9e148d021675b11a669f
\ No newline at end of file
diff --git a/doc/html/inherit_graph_25.png b/doc/html/inherit_graph_25.png
new file mode 100644
index 0000000..7f96468
Binary files /dev/null and b/doc/html/inherit_graph_25.png differ
diff --git a/doc/html/inherit_graph_26.map b/doc/html/inherit_graph_26.map
new file mode 100644
index 0000000..ca98e7b
--- /dev/null
+++ b/doc/html/inherit_graph_26.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classLastReturnFilter.html" title="LastReturnFilter" alt="" coords="109,5,224,32"/>
+</map>
diff --git a/doc/html/inherit_graph_26.md5 b/doc/html/inherit_graph_26.md5
new file mode 100644
index 0000000..d606a14
--- /dev/null
+++ b/doc/html/inherit_graph_26.md5
@@ -0,0 +1 @@
+036f5f07709542323000a94860133ffe
\ No newline at end of file
diff --git a/doc/html/inherit_graph_26.png b/doc/html/inherit_graph_26.png
new file mode 100644
index 0000000..4e0c0d5
Binary files /dev/null and b/doc/html/inherit_graph_26.png differ
diff --git a/doc/html/inherit_graph_27.map b/doc/html/inherit_graph_27.map
new file mode 100644
index 0000000..1c7b0db
--- /dev/null
+++ b/doc/html/inherit_graph_27.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classMainWindow.html" title="MainWindow" alt="" coords="161,5,258,32"/>
+</map>
diff --git a/doc/html/inherit_graph_27.md5 b/doc/html/inherit_graph_27.md5
new file mode 100644
index 0000000..bd64fae
--- /dev/null
+++ b/doc/html/inherit_graph_27.md5
@@ -0,0 +1 @@
+56ebfdfc43aa9f9214fa9993b74d1491
\ No newline at end of file
diff --git a/doc/html/inherit_graph_27.png b/doc/html/inherit_graph_27.png
new file mode 100644
index 0000000..6d325d1
Binary files /dev/null and b/doc/html/inherit_graph_27.png differ
diff --git a/doc/html/inherit_graph_28.map b/doc/html/inherit_graph_28.map
new file mode 100644
index 0000000..620e343
--- /dev/null
+++ b/doc/html/inherit_graph_28.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classOptFactory.html" title="OptFactory" alt="" coords="6,5,93,32"/>
+</map>
diff --git a/doc/html/inherit_graph_28.md5 b/doc/html/inherit_graph_28.md5
new file mode 100644
index 0000000..e48f4b3
--- /dev/null
+++ b/doc/html/inherit_graph_28.md5
@@ -0,0 +1 @@
+c41cbe92df868fb422aa68de81c75529
\ No newline at end of file
diff --git a/doc/html/inherit_graph_28.png b/doc/html/inherit_graph_28.png
new file mode 100644
index 0000000..4a008fd
Binary files /dev/null and b/doc/html/inherit_graph_28.png differ
diff --git a/doc/html/inherit_graph_29.map b/doc/html/inherit_graph_29.map
new file mode 100644
index 0000000..6a6b04f
--- /dev/null
+++ b/doc/html/inherit_graph_29.map
@@ -0,0 +1,6 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" title="STL class. " alt="" coords="6,56,122,83"/>
+<area shape="rect" id="node2" href="$classOptionpk.html" title="Optionpk\< T \>" alt="" coords="185,5,292,32"/>
+<area shape="rect" id="node3" href="$classVector2d.html" title="Vector2d\< T \>" alt="" coords="185,56,292,83"/>
+<area shape="rect" id="node4" href="$classVector2d.html" title="Vector2d\< double \>" alt="" coords="171,107,307,133"/>
+</map>
diff --git a/doc/html/inherit_graph_29.md5 b/doc/html/inherit_graph_29.md5
new file mode 100644
index 0000000..de165f4
--- /dev/null
+++ b/doc/html/inherit_graph_29.md5
@@ -0,0 +1 @@
+53be632956c02d01c5dba81e3b1b18a2
\ No newline at end of file
diff --git a/doc/html/inherit_graph_29.png b/doc/html/inherit_graph_29.png
new file mode 100644
index 0000000..b19bacf
Binary files /dev/null and b/doc/html/inherit_graph_29.png differ
diff --git a/doc/html/inherit_graph_3.map b/doc/html/inherit_graph_3.map
new file mode 100644
index 0000000..f57f35a
--- /dev/null
+++ b/doc/html/inherit_graph_3.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classCompare__PosValue.html" title="Compare_PosValue" alt="" coords="5,5,144,32"/>
+</map>
diff --git a/doc/html/inherit_graph_3.md5 b/doc/html/inherit_graph_3.md5
new file mode 100644
index 0000000..8988156
--- /dev/null
+++ b/doc/html/inherit_graph_3.md5
@@ -0,0 +1 @@
+db206f037e61bf07733c253f284e0cbc
\ No newline at end of file
diff --git a/doc/html/inherit_graph_3.png b/doc/html/inherit_graph_3.png
new file mode 100644
index 0000000..5fd9063
Binary files /dev/null and b/doc/html/inherit_graph_3.png differ
diff --git a/doc/html/inherit_graph_30.map b/doc/html/inherit_graph_30.map
new file mode 100644
index 0000000..d1912b6
--- /dev/null
+++ b/doc/html/inherit_graph_30.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structPosValue.html" title="PosValue" alt="" coords="6,5,85,32"/>
+</map>
diff --git a/doc/html/inherit_graph_30.md5 b/doc/html/inherit_graph_30.md5
new file mode 100644
index 0000000..0d28189
--- /dev/null
+++ b/doc/html/inherit_graph_30.md5
@@ -0,0 +1 @@
+0a770de7198bd9b8e8a2468ccef64e90
\ No newline at end of file
diff --git a/doc/html/inherit_graph_30.png b/doc/html/inherit_graph_30.png
new file mode 100644
index 0000000..9776235
Binary files /dev/null and b/doc/html/inherit_graph_30.png differ
diff --git a/doc/html/inherit_graph_31.map b/doc/html/inherit_graph_31.map
new file mode 100644
index 0000000..96891f8
--- /dev/null
+++ b/doc/html/inherit_graph_31.map
@@ -0,0 +1,16 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classqgis_1_1pkcomposite_1_1pkcomposite.html" title="qgis.pkcomposite.pkcomposite" alt="" coords="181,5,384,32"/>
+<area shape="rect" id="node3" href="$classqgis_1_1pkcrop_1_1pkcrop.html" title="qgis.pkcrop.pkcrop" alt="" coords="217,56,349,83"/>
+<area shape="rect" id="node4" href="$classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html" title="qgis.pkdiff_accuracy.pkdiff\l_accuracy" alt="" coords="193,107,372,149"/>
+<area shape="rect" id="node5" href="$classqgis_1_1pkextract_1_1pkextract.html" title="qgis.pkextract.pkextract" alt="" coords="201,173,364,200"/>
+<area shape="rect" id="node6" href="$classqgis_1_1pkextract__grid_1_1pkextract__grid.html" title="qgis.pkextract_grid.pkextract_grid" alt="" coords="173,224,392,251"/>
+<area shape="rect" id="node7" href="$classqgis_1_1pkextract__random_1_1pkextract__random.html" title="qgis.pkextract_random.pkextract\l_random" alt="" coords="177,275,389,317"/>
+<area shape="rect" id="node8" href="$classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html" title="qgis.pkfilter_spatial.pkfilter\l_spatial" alt="" coords="194,341,371,382"/>
+<area shape="rect" id="node9" href="$classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html" title="qgis.pkfilter_spectral.pkfilter\l_spectral" alt="" coords="190,406,375,447"/>
+<area shape="rect" id="node10" href="$classqgis_1_1pkfilterdem_1_1pkfilterdem.html" title="qgis.pkfilterdem.pkfilterdem" alt="" coords="191,472,374,499"/>
+<area shape="rect" id="node11" href="$classqgis_1_1pkgetmask_1_1pkgetmask.html" title="qgis.pkgetmask.pkgetmask" alt="" coords="191,523,374,549"/>
+<area shape="rect" id="node12" href="$classqgis_1_1pklas2img_1_1pklas2img.html" title="qgis.pklas2img.pklas2img" alt="" coords="197,573,369,600"/>
+<area shape="rect" id="node13" href="$classqgis_1_1pkreclass_1_1pkreclass.html" title="qgis.pkreclass.pkreclass" alt="" coords="199,624,366,651"/>
+<area shape="rect" id="node14" href="$classqgis_1_1pksetmask_1_1pksetmask.html" title="qgis.pksetmask.pksetmask" alt="" coords="191,675,374,701"/>
+<area shape="rect" id="node15" href="$classqgis_1_1pksvm_1_1pksvm.html" title="qgis.pksvm.pksvm" alt="" coords="217,725,349,752"/>
+</map>
diff --git a/doc/html/inherit_graph_31.md5 b/doc/html/inherit_graph_31.md5
new file mode 100644
index 0000000..f2707e9
--- /dev/null
+++ b/doc/html/inherit_graph_31.md5
@@ -0,0 +1 @@
+542dad52a3aba4faaadfb00cd952750e
\ No newline at end of file
diff --git a/doc/html/inherit_graph_31.png b/doc/html/inherit_graph_31.png
new file mode 100644
index 0000000..c9ff6d5
Binary files /dev/null and b/doc/html/inherit_graph_31.png differ
diff --git a/doc/html/inherit_graph_32.map b/doc/html/inherit_graph_32.map
new file mode 100644
index 0000000..145ac74
--- /dev/null
+++ b/doc/html/inherit_graph_32.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html" title="qgis.pktoolsAlgorithm.pktools\lAlgorithm" alt="" coords="155,5,349,46"/>
+</map>
diff --git a/doc/html/inherit_graph_32.md5 b/doc/html/inherit_graph_32.md5
new file mode 100644
index 0000000..6fe7a52
--- /dev/null
+++ b/doc/html/inherit_graph_32.md5
@@ -0,0 +1 @@
+fd4063c5213fdc50915558dc904f8639
\ No newline at end of file
diff --git a/doc/html/inherit_graph_32.png b/doc/html/inherit_graph_32.png
new file mode 100644
index 0000000..a6a9425
Binary files /dev/null and b/doc/html/inherit_graph_32.png differ
diff --git a/doc/html/inherit_graph_33.map b/doc/html/inherit_graph_33.map
new file mode 100644
index 0000000..1889fbe
--- /dev/null
+++ b/doc/html/inherit_graph_33.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node2" href="$classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html" title="qgis.pktoolsAlgorithmProvider.pktools\lAlgorithmProvider" alt="" coords="179,5,421,46"/>
+</map>
diff --git a/doc/html/inherit_graph_33.md5 b/doc/html/inherit_graph_33.md5
new file mode 100644
index 0000000..fee54ad
--- /dev/null
+++ b/doc/html/inherit_graph_33.md5
@@ -0,0 +1 @@
+effe94b9ac2dfaa964c641dcedeb4962
\ No newline at end of file
diff --git a/doc/html/inherit_graph_33.png b/doc/html/inherit_graph_33.png
new file mode 100644
index 0000000..2f30952
Binary files /dev/null and b/doc/html/inherit_graph_33.png differ
diff --git a/doc/html/inherit_graph_34.map b/doc/html/inherit_graph_34.map
new file mode 100644
index 0000000..7ff2667
--- /dev/null
+++ b/doc/html/inherit_graph_34.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html" title="qgis.pktoolsUtils.pktools\lUtils" alt="" coords="5,5,171,46"/>
+</map>
diff --git a/doc/html/inherit_graph_34.md5 b/doc/html/inherit_graph_34.md5
new file mode 100644
index 0000000..92745d9
--- /dev/null
+++ b/doc/html/inherit_graph_34.md5
@@ -0,0 +1 @@
+193a7f60a5ea0dd260be1bdb91bbdc88
\ No newline at end of file
diff --git a/doc/html/inherit_graph_34.png b/doc/html/inherit_graph_34.png
new file mode 100644
index 0000000..ac6fdf8
Binary files /dev/null and b/doc/html/inherit_graph_34.png differ
diff --git a/doc/html/inherit_graph_35.map b/doc/html/inherit_graph_35.map
new file mode 100644
index 0000000..8422376
--- /dev/null
+++ b/doc/html/inherit_graph_35.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html" title="qgis.ProcessingPktoolsPlugin.\lProcessingPktoolsPlugin" alt="" coords="6,5,205,46"/>
+</map>
diff --git a/doc/html/inherit_graph_35.md5 b/doc/html/inherit_graph_35.md5
new file mode 100644
index 0000000..e735e1f
--- /dev/null
+++ b/doc/html/inherit_graph_35.md5
@@ -0,0 +1 @@
+cff7ac1ee5a5232d6e7b82f41627ab2a
\ No newline at end of file
diff --git a/doc/html/inherit_graph_35.png b/doc/html/inherit_graph_35.png
new file mode 100644
index 0000000..210dc05
Binary files /dev/null and b/doc/html/inherit_graph_35.png differ
diff --git a/doc/html/inherit_graph_36.map b/doc/html/inherit_graph_36.map
new file mode 100644
index 0000000..e63d8fd
--- /dev/null
+++ b/doc/html/inherit_graph_36.map
@@ -0,0 +1,7 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classQMatrix.html" title="QMatrix" alt="" coords="6,56,74,83"/>
+<area shape="rect" id="node2" href="$classKernel.html" title="Kernel" alt="" coords="123,56,181,83"/>
+<area shape="rect" id="node3" href="$classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="230,5,349,32"/>
+<area shape="rect" id="node4" href="$classSVC__Q.html" title="SVC_Q" alt="" coords="256,56,323,83"/>
+<area shape="rect" id="node5" href="$classSVR__Q.html" title="SVR_Q" alt="" coords="256,107,323,133"/>
+</map>
diff --git a/doc/html/inherit_graph_36.md5 b/doc/html/inherit_graph_36.md5
new file mode 100644
index 0000000..1dc682b
--- /dev/null
+++ b/doc/html/inherit_graph_36.md5
@@ -0,0 +1 @@
+e7cc1a9ac7cc7303dcdad4850aa27124
\ No newline at end of file
diff --git a/doc/html/inherit_graph_36.png b/doc/html/inherit_graph_36.png
new file mode 100644
index 0000000..99af2bb
Binary files /dev/null and b/doc/html/inherit_graph_36.png differ
diff --git a/doc/html/inherit_graph_37.map b/doc/html/inherit_graph_37.map
new file mode 100644
index 0000000..13ba453
--- /dev/null
+++ b/doc/html/inherit_graph_37.map
@@ -0,0 +1,4 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classSolver.html" title="Solver" alt="" coords="5,5,64,32"/>
+<area shape="rect" id="node2" href="$classSolver__NU.html" title="Solver_NU" alt="" coords="113,5,199,32"/>
+</map>
diff --git a/doc/html/inherit_graph_37.md5 b/doc/html/inherit_graph_37.md5
new file mode 100644
index 0000000..5d06ade
--- /dev/null
+++ b/doc/html/inherit_graph_37.md5
@@ -0,0 +1 @@
+7be29cee47604c598e9b41d6f6d26540
\ No newline at end of file
diff --git a/doc/html/inherit_graph_37.png b/doc/html/inherit_graph_37.png
new file mode 100644
index 0000000..a8f4610
Binary files /dev/null and b/doc/html/inherit_graph_37.png differ
diff --git a/doc/html/inherit_graph_38.map b/doc/html/inherit_graph_38.map
new file mode 100644
index 0000000..ee2aeb5
--- /dev/null
+++ b/doc/html/inherit_graph_38.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structSolver_1_1SolutionInfo.html" title="Solver::SolutionInfo" alt="" coords="5,5,141,32"/>
+</map>
diff --git a/doc/html/inherit_graph_38.md5 b/doc/html/inherit_graph_38.md5
new file mode 100644
index 0000000..77ada4a
--- /dev/null
+++ b/doc/html/inherit_graph_38.md5
@@ -0,0 +1 @@
+eb536ae09518c9401a3cc68fe8336845
\ No newline at end of file
diff --git a/doc/html/inherit_graph_38.png b/doc/html/inherit_graph_38.png
new file mode 100644
index 0000000..6157226
Binary files /dev/null and b/doc/html/inherit_graph_38.png differ
diff --git a/doc/html/inherit_graph_39.map b/doc/html/inherit_graph_39.map
new file mode 100644
index 0000000..38dc8ea
--- /dev/null
+++ b/doc/html/inherit_graph_39.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classstatfactory_1_1StatFactory.html" title="statfactory::StatFactory" alt="" coords="5,5,165,32"/>
+</map>
diff --git a/doc/html/inherit_graph_39.md5 b/doc/html/inherit_graph_39.md5
new file mode 100644
index 0000000..12d0f53
--- /dev/null
+++ b/doc/html/inherit_graph_39.md5
@@ -0,0 +1 @@
+87aa7d801c4fb0d24fa9d29992fafeb1
\ No newline at end of file
diff --git a/doc/html/inherit_graph_39.png b/doc/html/inherit_graph_39.png
new file mode 100644
index 0000000..8414ef4
Binary files /dev/null and b/doc/html/inherit_graph_39.png differ
diff --git a/doc/html/inherit_graph_4.map b/doc/html/inherit_graph_4.map
new file mode 100644
index 0000000..43c98a0
--- /dev/null
+++ b/doc/html/inherit_graph_4.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="5,5,187,46"/>
+</map>
diff --git a/doc/html/inherit_graph_4.md5 b/doc/html/inherit_graph_4.md5
new file mode 100644
index 0000000..f3d4252
--- /dev/null
+++ b/doc/html/inherit_graph_4.md5
@@ -0,0 +1 @@
+79a90069eeaf1cadc0f69227c89357cb
\ No newline at end of file
diff --git a/doc/html/inherit_graph_4.png b/doc/html/inherit_graph_4.png
new file mode 100644
index 0000000..c037999
Binary files /dev/null and b/doc/html/inherit_graph_4.png differ
diff --git a/doc/html/inherit_graph_40.map b/doc/html/inherit_graph_40.map
new file mode 100644
index 0000000..db2638c
--- /dev/null
+++ b/doc/html/inherit_graph_40.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structsvm__model.html" title="svm_model" alt="" coords="6,5,95,32"/>
+</map>
diff --git a/doc/html/inherit_graph_40.md5 b/doc/html/inherit_graph_40.md5
new file mode 100644
index 0000000..353d6e5
--- /dev/null
+++ b/doc/html/inherit_graph_40.md5
@@ -0,0 +1 @@
+7b410ece4435bb5898273f794141ca12
\ No newline at end of file
diff --git a/doc/html/inherit_graph_40.png b/doc/html/inherit_graph_40.png
new file mode 100644
index 0000000..74ce854
Binary files /dev/null and b/doc/html/inherit_graph_40.png differ
diff --git a/doc/html/inherit_graph_41.map b/doc/html/inherit_graph_41.map
new file mode 100644
index 0000000..7b61c83
--- /dev/null
+++ b/doc/html/inherit_graph_41.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structsvm__node.html" title="svm_node" alt="" coords="5,5,88,32"/>
+</map>
diff --git a/doc/html/inherit_graph_41.md5 b/doc/html/inherit_graph_41.md5
new file mode 100644
index 0000000..c429b4a
--- /dev/null
+++ b/doc/html/inherit_graph_41.md5
@@ -0,0 +1 @@
+2af511324d18119462e473d0dca2ff4c
\ No newline at end of file
diff --git a/doc/html/inherit_graph_41.png b/doc/html/inherit_graph_41.png
new file mode 100644
index 0000000..24bc575
Binary files /dev/null and b/doc/html/inherit_graph_41.png differ
diff --git a/doc/html/inherit_graph_42.map b/doc/html/inherit_graph_42.map
new file mode 100644
index 0000000..ce31d5f
--- /dev/null
+++ b/doc/html/inherit_graph_42.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structsvm__parameter.html" title="svm_parameter" alt="" coords="5,5,117,32"/>
+</map>
diff --git a/doc/html/inherit_graph_42.md5 b/doc/html/inherit_graph_42.md5
new file mode 100644
index 0000000..484819e
--- /dev/null
+++ b/doc/html/inherit_graph_42.md5
@@ -0,0 +1 @@
+9c46a02da171be2dc8c99dffaea9ef17
\ No newline at end of file
diff --git a/doc/html/inherit_graph_42.png b/doc/html/inherit_graph_42.png
new file mode 100644
index 0000000..bf8a624
Binary files /dev/null and b/doc/html/inherit_graph_42.png differ
diff --git a/doc/html/inherit_graph_43.map b/doc/html/inherit_graph_43.map
new file mode 100644
index 0000000..3f7b1ce
--- /dev/null
+++ b/doc/html/inherit_graph_43.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structsvm__problem.html" title="svm_problem" alt="" coords="6,5,106,32"/>
+</map>
diff --git a/doc/html/inherit_graph_43.md5 b/doc/html/inherit_graph_43.md5
new file mode 100644
index 0000000..ee30b79
--- /dev/null
+++ b/doc/html/inherit_graph_43.md5
@@ -0,0 +1 @@
+aadebe5d38499b3e0dfb844f4a073095
\ No newline at end of file
diff --git a/doc/html/inherit_graph_43.png b/doc/html/inherit_graph_43.png
new file mode 100644
index 0000000..5411fdc
Binary files /dev/null and b/doc/html/inherit_graph_43.png differ
diff --git a/doc/html/inherit_graph_44.map b/doc/html/inherit_graph_44.map
new file mode 100644
index 0000000..242be84
--- /dev/null
+++ b/doc/html/inherit_graph_44.map
@@ -0,0 +1,4 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="5,5,123,32"/>
+<area shape="rect" id="node2" href="$classUi_1_1MainWindow.html" title="Ui::MainWindow" alt="" coords="171,5,290,32"/>
+</map>
diff --git a/doc/html/inherit_graph_44.md5 b/doc/html/inherit_graph_44.md5
new file mode 100644
index 0000000..4054bc0
--- /dev/null
+++ b/doc/html/inherit_graph_44.md5
@@ -0,0 +1 @@
+62ce278189506cc1c0752d729480526e
\ No newline at end of file
diff --git a/doc/html/inherit_graph_44.png b/doc/html/inherit_graph_44.png
new file mode 100644
index 0000000..4742656
Binary files /dev/null and b/doc/html/inherit_graph_44.png differ
diff --git a/doc/html/inherit_graph_5.map b/doc/html/inherit_graph_5.map
new file mode 100644
index 0000000..dfe801f
--- /dev/null
+++ b/doc/html/inherit_graph_5.map
@@ -0,0 +1,5 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classCostFactory.html" title="CostFactory" alt="" coords="6,31,101,57"/>
+<area shape="rect" id="node2" href="$classCostFactoryANN.html" title="CostFactoryANN" alt="" coords="149,5,272,32"/>
+<area shape="rect" id="node3" href="$classCostFactorySVM.html" title="CostFactorySVM" alt="" coords="149,56,272,83"/>
+</map>
diff --git a/doc/html/inherit_graph_5.md5 b/doc/html/inherit_graph_5.md5
new file mode 100644
index 0000000..7c5c143
--- /dev/null
+++ b/doc/html/inherit_graph_5.md5
@@ -0,0 +1 @@
+0d50b1bf6d0bd3f74522048e96a7f8a2
\ No newline at end of file
diff --git a/doc/html/inherit_graph_5.png b/doc/html/inherit_graph_5.png
new file mode 100644
index 0000000..e880dc4
Binary files /dev/null and b/doc/html/inherit_graph_5.png differ
diff --git a/doc/html/inherit_graph_6.map b/doc/html/inherit_graph_6.map
new file mode 100644
index 0000000..23f71bc
--- /dev/null
+++ b/doc/html/inherit_graph_6.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classDataModel.html" title="DataModel" alt="" coords="5,5,91,32"/>
+</map>
diff --git a/doc/html/inherit_graph_6.md5 b/doc/html/inherit_graph_6.md5
new file mode 100644
index 0000000..1ea6a91
--- /dev/null
+++ b/doc/html/inherit_graph_6.md5
@@ -0,0 +1 @@
+be15d991a7fe252377a40da2c00a817f
\ No newline at end of file
diff --git a/doc/html/inherit_graph_6.png b/doc/html/inherit_graph_6.png
new file mode 100644
index 0000000..5833bf4
Binary files /dev/null and b/doc/html/inherit_graph_6.png differ
diff --git a/doc/html/inherit_graph_7.map b/doc/html/inherit_graph_7.map
new file mode 100644
index 0000000..9a6f5a0
--- /dev/null
+++ b/doc/html/inherit_graph_7.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structdecision__function.html" title="decision_function" alt="" coords="5,5,128,32"/>
+</map>
diff --git a/doc/html/inherit_graph_7.md5 b/doc/html/inherit_graph_7.md5
new file mode 100644
index 0000000..b943cd2
--- /dev/null
+++ b/doc/html/inherit_graph_7.md5
@@ -0,0 +1 @@
+5ee11c9862bcc37a09f033d717df12db
\ No newline at end of file
diff --git a/doc/html/inherit_graph_7.png b/doc/html/inherit_graph_7.png
new file mode 100644
index 0000000..db49254
Binary files /dev/null and b/doc/html/inherit_graph_7.png differ
diff --git a/doc/html/inherit_graph_8.map b/doc/html/inherit_graph_8.map
new file mode 100644
index 0000000..c9d678c
--- /dev/null
+++ b/doc/html/inherit_graph_8.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classDecrease__IndexValue.html" title="Decrease_IndexValue" alt="" coords="6,5,157,32"/>
+</map>
diff --git a/doc/html/inherit_graph_8.md5 b/doc/html/inherit_graph_8.md5
new file mode 100644
index 0000000..cc54e2b
--- /dev/null
+++ b/doc/html/inherit_graph_8.md5
@@ -0,0 +1 @@
+e7be88bf7b83e43a3c5e72ff57ce973e
\ No newline at end of file
diff --git a/doc/html/inherit_graph_8.png b/doc/html/inherit_graph_8.png
new file mode 100644
index 0000000..e1f2267
Binary files /dev/null and b/doc/html/inherit_graph_8.png differ
diff --git a/doc/html/inherit_graph_9.map b/doc/html/inherit_graph_9.map
new file mode 100644
index 0000000..a7d62ed
--- /dev/null
+++ b/doc/html/inherit_graph_9.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classDecrease__PosValue.html" title="Decrease_PosValue" alt="" coords="5,5,147,32"/>
+</map>
diff --git a/doc/html/inherit_graph_9.md5 b/doc/html/inherit_graph_9.md5
new file mode 100644
index 0000000..7a532bf
--- /dev/null
+++ b/doc/html/inherit_graph_9.md5
@@ -0,0 +1 @@
+9f2f1fd6246cfc788f69061dc3962600
\ No newline at end of file
diff --git a/doc/html/inherit_graph_9.png b/doc/html/inherit_graph_9.png
new file mode 100644
index 0000000..ea8e7f9
Binary files /dev/null and b/doc/html/inherit_graph_9.png differ
diff --git a/doc/html/inherits.html b/doc/html/inherits.html
new file mode 100644
index 0000000..f3bce51
--- /dev/null
+++ b/doc/html/inherits.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li class="current"><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Hierarchy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
+</div><table border="0" cellspacing="10" cellpadding="0">
+<tr><td><img src="inherit_graph_0.png" border="0" alt="" usemap="#BadConversion"/>
+<map name="BadConversion" id="BadConversion">
+<area shape="rect" id="node1" title="STL class. " alt="" coords="5,5,109,32"/><area shape="rect" id="node2" title="STL class. " alt="" coords="158,5,282,32"/><area shape="rect" id="node3" href="classBadConversion.html" title="throw this class when syntax error in command line option " alt="" coords="331,5,442,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_1.png" border="0" alt="" usemap="#Cache"/>
+<map name="Cache" id="Cache">
+<area shape="rect" id="node1" href="classCache.html" title="Cache" alt="" coords="6,5,66,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_2.png" border="0" alt="" usemap="#Compare__IndexValue"/>
+<map name="Compare__IndexValue" id="Compare__IndexValue">
+<area shape="rect" id="node1" href="classCompare__IndexValue.html" title="Compare_IndexValue" alt="" coords="5,5,152,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_3.png" border="0" alt="" usemap="#Compare__PosValue"/>
+<map name="Compare__PosValue" id="Compare__PosValue">
+<area shape="rect" id="node1" href="classCompare__PosValue.html" title="Compare_PosValue" alt="" coords="5,5,144,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_4.png" border="0" alt="" usemap="#confusionmatrix_1_1ConfusionMatrix"/>
+<map name="confusionmatrix_1_1ConfusionMatrix" id="confusionmatrix_1_1ConfusionMatrix">
+<area shape="rect" id="node1" href="classconfusionmatrix_1_1ConfusionMatrix.html" title="confusionmatrix::Confusion\lMatrix" alt="" coords="5,5,187,46"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_5.png" border="0" alt="" usemap="#CostFactory"/>
+<map name="CostFactory" id="CostFactory">
+<area shape="rect" id="node1" href="classCostFactory.html" title="CostFactory" alt="" coords="6,31,101,57"/><area shape="rect" id="node2" href="classCostFactoryANN.html" title="CostFactoryANN" alt="" coords="149,5,272,32"/><area shape="rect" id="node3" href="classCostFactorySVM.html" title="CostFactorySVM" alt="" coords="149,56,272,83"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_6.png" border="0" alt="" usemap="#DataModel"/>
+<map name="DataModel" id="DataModel">
+<area shape="rect" id="node1" href="classDataModel.html" title="DataModel" alt="" coords="5,5,91,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_7.png" border="0" alt="" usemap="#decision__function"/>
+<map name="decision__function" id="decision__function">
+<area shape="rect" id="node1" href="structdecision__function.html" title="decision_function" alt="" coords="5,5,128,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_8.png" border="0" alt="" usemap="#Decrease__IndexValue"/>
+<map name="Decrease__IndexValue" id="Decrease__IndexValue">
+<area shape="rect" id="node1" href="classDecrease__IndexValue.html" title="Decrease_IndexValue" alt="" coords="6,5,157,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_9.png" border="0" alt="" usemap="#Decrease__PosValue"/>
+<map name="Decrease__PosValue" id="Decrease__PosValue">
+<area shape="rect" id="node1" href="classDecrease__PosValue.html" title="Decrease_PosValue" alt="" coords="5,5,147,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_10.png" border="0" alt="" usemap="#Egcs"/>
+<map name="Egcs" id="Egcs">
+<area shape="rect" id="node1" href="classEgcs.html" title="Egcs" alt="" coords="6,5,58,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_11.png" border="0" alt="" usemap="#FANN_1_1neural__net"/>
+<map name="FANN_1_1neural__net" id="FANN_1_1neural__net">
+<area shape="rect" id="node1" href="classFANN_1_1neural__net.html" title="FANN::neural_net" alt="" coords="6,5,133,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_12.png" border="0" alt="" usemap="#FANN_1_1training__data"/>
+<map name="FANN_1_1training__data" id="FANN_1_1training__data">
+<area shape="rect" id="node1" href="classFANN_1_1training__data.html" title="FANN::training_data" alt="" coords="5,5,147,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_13.png" border="0" alt="" usemap="#FeatureSelector"/>
+<map name="FeatureSelector" id="FeatureSelector">
+<area shape="rect" id="node1" href="classFeatureSelector.html" title="FeatureSelector" alt="" coords="5,5,120,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_14.png" border="0" alt="" usemap="#FileReaderAscii"/>
+<map name="FileReaderAscii" id="FileReaderAscii">
+<area shape="rect" id="node1" href="classFileReaderAscii.html" title="FileReaderAscii" alt="" coords="5,5,120,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_15.png" border="0" alt="" usemap="#FileReaderLas"/>
+<map name="FileReaderLas" id="FileReaderLas">
+<area shape="rect" id="node1" href="classFileReaderLas.html" title="FileReaderLas" alt="" coords="5,5,112,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_16.png" border="0" alt="" usemap="#filter2d_1_1Filter2d"/>
+<map name="filter2d_1_1Filter2d" id="filter2d_1_1Filter2d">
+<area shape="rect" id="node1" href="classfilter2d_1_1Filter2d.html" title="filter2d::Filter2d" alt="" coords="5,5,117,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_17.png" border="0" alt="" usemap="#filter_1_1Filter"/>
+<map name="filter_1_1Filter" id="filter_1_1Filter">
+<area shape="rect" id="node1" href="classfilter_1_1Filter.html" title="filter::Filter" alt="" coords="6,5,90,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_18.png" border="0" alt="" usemap="#ImgReaderGdal"/>
+<map name="ImgReaderGdal" id="ImgReaderGdal">
+<area shape="rect" id="node1" href="classImgReaderGdal.html" title="ImgReaderGdal" alt="" coords="6,5,119,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_19.png" border="0" alt="" usemap="#ImgReaderOgr"/>
+<map name="ImgReaderOgr" id="ImgReaderOgr">
+<area shape="rect" id="node1" href="classImgReaderOgr.html" title="ImgReaderOgr" alt="" coords="5,5,112,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_20.png" border="0" alt="" usemap="#imgregression_1_1ImgRegression"/>
+<map name="imgregression_1_1ImgRegression" id="imgregression_1_1ImgRegression">
+<area shape="rect" id="node1" href="classimgregression_1_1ImgRegression.html" title="imgregression::ImgRegression" alt="" coords="6,5,205,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_21.png" border="0" alt="" usemap="#ImgWriterGdal"/>
+<map name="ImgWriterGdal" id="ImgWriterGdal">
+<area shape="rect" id="node1" href="classImgWriterGdal.html" title="ImgWriterGdal" alt="" coords="5,5,112,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_22.png" border="0" alt="" usemap="#ImgWriterOgr"/>
+<map name="ImgWriterOgr" id="ImgWriterOgr">
+<area shape="rect" id="node1" href="classImgWriterOgr.html" title="ImgWriterOgr" alt="" coords="6,5,106,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_23.png" border="0" alt="" usemap="#Increase__IndexValue"/>
+<map name="Increase__IndexValue" id="Increase__IndexValue">
+<area shape="rect" id="node1" href="classIncrease__IndexValue.html" title="Increase_IndexValue" alt="" coords="5,5,149,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_24.png" border="0" alt="" usemap="#Increase__PosValue"/>
+<map name="Increase__PosValue" id="Increase__PosValue">
+<area shape="rect" id="node1" href="classIncrease__PosValue.html" title="Increase_PosValue" alt="" coords="6,5,141,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_25.png" border="0" alt="" usemap="#IndexValue"/>
+<map name="IndexValue" id="IndexValue">
+<area shape="rect" id="node1" href="structIndexValue.html" title="IndexValue" alt="" coords="6,5,93,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_26.png" border="0" alt="" usemap="#LastReturnFilter"/>
+<map name="LastReturnFilter" id="LastReturnFilter">
+<area shape="rect" id="node2" href="classLastReturnFilter.html" title="LastReturnFilter" alt="" coords="109,5,224,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_27.png" border="0" alt="" usemap="#MainWindow"/>
+<map name="MainWindow" id="MainWindow">
+<area shape="rect" id="node2" href="classMainWindow.html" title="MainWindow" alt="" coords="161,5,258,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_28.png" border="0" alt="" usemap="#OptFactory"/>
+<map name="OptFactory" id="OptFactory">
+<area shape="rect" id="node1" href="classOptFactory.html" title="OptFactory" alt="" coords="6,5,93,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_29.png" border="0" alt="" usemap="#Optionpk_3_01T_01_4"/>
+<map name="Optionpk_3_01T_01_4" id="Optionpk_3_01T_01_4">
+<area shape="rect" id="node1" title="STL class. " alt="" coords="6,56,122,83"/><area shape="rect" id="node2" href="classOptionpk.html" title="Optionpk\< T \>" alt="" coords="185,5,292,32"/><area shape="rect" id="node3" href="classVector2d.html" title="Vector2d\< T \>" alt="" coords="185,56,292,83"/><area shape="rect" id="node4" href="classVector2d.html" title="Vector2d\< double \>" alt="" coords="171,107,307,133"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_30.png" border="0" alt="" usemap="#PosValue"/>
+<map name="PosValue" id="PosValue">
+<area shape="rect" id="node1" href="structPosValue.html" title="PosValue" alt="" coords="6,5,85,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_31.png" border="0" alt="" usemap="#qgis_8pkcomposite_8pkcomposite"/>
+<map name="qgis_8pkcomposite_8pkcomposite" id="qgis_8pkcomposite_8pkcomposite">
+<area shape="rect" id="node2" href="classqgis_1_1pkcomposite_1_1pkcomposite.html" title="qgis.pkcomposite.pkcomposite" alt="" coords="181,5,384,32"/><area shape="rect" id="node3" href="classqgis_1_1pkcrop_1_1pkcrop.html" title="qgis.pkcrop.pkcrop" alt="" coords="217,56,349,83"/><area shape="rect" id="node4" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html" title="qgis.pkdiff_accuracy.pkdiff\l_accuracy" alt="" coords="193,107,372,149"/><area shape="rect" id="node5" href="class [...]
+</td></tr>
+<tr><td><img src="inherit_graph_32.png" border="0" alt="" usemap="#qgis_8pktoolsAlgorithm_8pktoolsAlgorithm"/>
+<map name="qgis_8pktoolsAlgorithm_8pktoolsAlgorithm" id="qgis_8pktoolsAlgorithm_8pktoolsAlgorithm">
+<area shape="rect" id="node2" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html" title="qgis.pktoolsAlgorithm.pktools\lAlgorithm" alt="" coords="155,5,349,46"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_33.png" border="0" alt="" usemap="#qgis_8pktoolsAlgorithmProvider_8pktoolsAlgorithmProvider"/>
+<map name="qgis_8pktoolsAlgorithmProvider_8pktoolsAlgorithmProvider" id="qgis_8pktoolsAlgorithmProvider_8pktoolsAlgorithmProvider">
+<area shape="rect" id="node2" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html" title="qgis.pktoolsAlgorithmProvider.pktools\lAlgorithmProvider" alt="" coords="179,5,421,46"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_34.png" border="0" alt="" usemap="#qgis_8pktoolsUtils_8pktoolsUtils"/>
+<map name="qgis_8pktoolsUtils_8pktoolsUtils" id="qgis_8pktoolsUtils_8pktoolsUtils">
+<area shape="rect" id="node1" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html" title="qgis.pktoolsUtils.pktools\lUtils" alt="" coords="5,5,171,46"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_35.png" border="0" alt="" usemap="#qgis_8ProcessingPktoolsPlugin_8ProcessingPktoolsPlugin"/>
+<map name="qgis_8ProcessingPktoolsPlugin_8ProcessingPktoolsPlugin" id="qgis_8ProcessingPktoolsPlugin_8ProcessingPktoolsPlugin">
+<area shape="rect" id="node1" href="classqgis_1_1ProcessingPktoolsPlugin_1_1ProcessingPktoolsPlugin.html" title="qgis.ProcessingPktoolsPlugin.\lProcessingPktoolsPlugin" alt="" coords="6,5,205,46"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_36.png" border="0" alt="" usemap="#QMatrix"/>
+<map name="QMatrix" id="QMatrix">
+<area shape="rect" id="node1" href="classQMatrix.html" title="QMatrix" alt="" coords="6,56,74,83"/><area shape="rect" id="node2" href="classKernel.html" title="Kernel" alt="" coords="123,56,181,83"/><area shape="rect" id="node3" href="classONE__CLASS__Q.html" title="ONE_CLASS_Q" alt="" coords="230,5,349,32"/><area shape="rect" id="node4" href="classSVC__Q.html" title="SVC_Q" alt="" coords="256,56,323,83"/><area shape="rect" id="node5" href="classSVR__Q.html" title="SVR_Q" alt="" coords=" [...]
+</td></tr>
+<tr><td><img src="inherit_graph_37.png" border="0" alt="" usemap="#Solver"/>
+<map name="Solver" id="Solver">
+<area shape="rect" id="node1" href="classSolver.html" title="Solver" alt="" coords="5,5,64,32"/><area shape="rect" id="node2" href="classSolver__NU.html" title="Solver_NU" alt="" coords="113,5,199,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_38.png" border="0" alt="" usemap="#Solver_1_1SolutionInfo"/>
+<map name="Solver_1_1SolutionInfo" id="Solver_1_1SolutionInfo">
+<area shape="rect" id="node1" href="structSolver_1_1SolutionInfo.html" title="Solver::SolutionInfo" alt="" coords="5,5,141,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_39.png" border="0" alt="" usemap="#statfactory_1_1StatFactory"/>
+<map name="statfactory_1_1StatFactory" id="statfactory_1_1StatFactory">
+<area shape="rect" id="node1" href="classstatfactory_1_1StatFactory.html" title="statfactory::StatFactory" alt="" coords="5,5,165,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_40.png" border="0" alt="" usemap="#svm__model"/>
+<map name="svm__model" id="svm__model">
+<area shape="rect" id="node1" href="structsvm__model.html" title="svm_model" alt="" coords="6,5,95,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_41.png" border="0" alt="" usemap="#svm__node"/>
+<map name="svm__node" id="svm__node">
+<area shape="rect" id="node1" href="structsvm__node.html" title="svm_node" alt="" coords="5,5,88,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_42.png" border="0" alt="" usemap="#svm__parameter"/>
+<map name="svm__parameter" id="svm__parameter">
+<area shape="rect" id="node1" href="structsvm__parameter.html" title="svm_parameter" alt="" coords="5,5,117,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_43.png" border="0" alt="" usemap="#svm__problem"/>
+<map name="svm__problem" id="svm__problem">
+<area shape="rect" id="node1" href="structsvm__problem.html" title="svm_problem" alt="" coords="6,5,106,32"/></map>
+</td></tr>
+<tr><td><img src="inherit_graph_44.png" border="0" alt="" usemap="#Ui__MainWindow"/>
+<map name="Ui__MainWindow" id="Ui__MainWindow">
+<area shape="rect" id="node1" href="classUi__MainWindow.html" title="Ui_MainWindow" alt="" coords="5,5,123,32"/><area shape="rect" id="node2" href="classUi_1_1MainWindow.html" title="Ui::MainWindow" alt="" coords="171,5,290,32"/></map>
+</td></tr>
+</table>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/logo.png b/doc/html/logo.png
new file mode 100644
index 0000000..d0b8e2e
Binary files /dev/null and b/doc/html/logo.png differ
diff --git a/doc/html/md_apps.html b/doc/html/md_apps.html
new file mode 100644
index 0000000..79d7a8e
--- /dev/null
+++ b/doc/html/md_apps.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: apps</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">apps </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="available_tools"></a>
+Available tools</h1>
+<ul>
+<li><a class="el" href="pkann.html">pkann</a> classify raster image using Artificial Neural Network</li>
+<li><a class="el" href="pkascii2img.html">pkascii2img</a> program to create raster image based on ascii file</li>
+<li><a class="el" href="pkascii2ogr.html">pkascii2ogr</a> program to create vector points or polygons from text file</li>
+<li><a class="el" href="pkcomposite.html">pkcomposite</a> program to mosaic and composite geo-referenced images</li>
+<li><a class="el" href="pkcreatect.html">pkcreatect</a> program to create and import colour table to GTiff image</li>
+<li><a class="el" href="pkcrop.html">pkcrop</a> perform raster data operations on image such as crop, extract and stack bands</li>
+<li><a class="el" href="pkdiff.html">pkdiff</a> program to compare two raster image files</li>
+<li><a class="el" href="pkdsm2shadow.html">pkdsm2shadow</a> program to calculate sun shadow based on digital surface model and sun angles</li>
+<li><a class="el" href="pkdumpimg.html">pkdumpimg</a> program to dump image content to ascii or std out</li>
+<li><a class="el" href="pkdumpogr.html">pkdumpogr</a> dump ogr file to text file or standard output</li>
+<li><a class="el" href="pkegcs.html">pkegcs</a> Utility for raster files in European Grid Coordinate System</li>
+<li><a class="el" href="pkextract.html">pkextract</a> extract pixel values from raster image from a (vector or raster) sample</li>
+<li><a class="el" href="pkfillnodata.html">pkfillnodata</a> program to fill holes in raster image</li>
+<li><a class="el" href="pkfilterascii.html">pkfilterascii</a> program to filter data in an ASCII file</li>
+<li><a class="el" href="pkfilter.html">pkfilter</a> program to filter raster images</li>
+<li><a class="el" href="pkfilterdem.html">pkfilterdem</a> Filter digital elevation model raster datasets</li>
+<li><a class="el" href="pkfsann.html">pkfsann</a> feature selection for artificial neural network classifier pkann</li>
+<li><a class="el" href="pkfssvm.html">pkfssvm</a> feature selection for support vector machine classifier pksvm</li>
+<li><a class="el" href="pkgetmask.html">pkgetmask</a> program to create mask image based on values in input raster image</li>
+<li><a class="el" href="pkinfo.html">pkinfo</a> Report basic information from raster datasets (similar to gdalinfo)</li>
+<li><a class="el" href="pklas2img.html">pklas2img</a> Rasterize LAS/LAZ point clouds with filtering/compositing options</li>
+<li><a class="el" href="pkoptsvm.html">pkoptsvm</a> program to optimize parameters for support vector machine classifier pksvm</li>
+<li><a class="el" href="pkpolygonize.html">pkpolygonize</a> program to make vector file from raster image</li>
+<li><a class="el" href="pkreclass.html">pkreclass</a> program to replace pixel values in raster image</li>
+<li><a class="el" href="pkregann.html">pkregann</a> regression with artificial neural network (multi-layer perceptron)</li>
+<li><a class="el" href="pksetmask.html">pksetmask</a> program to apply mask image (set invalid values) to raster image</li>
+<li><a class="el" href="pksieve.html">pksieve</a> program to sieve filter raster image</li>
+<li><a class="el" href="pkstatascii.html">pkstatascii</a> program to calculate basic statistics from text file</li>
+<li><a class="el" href="pkstat.html">pkstat</a> program to calculate basic statistics from raster dataset</li>
+<li><a class="el" href="pkstatogr.html">pkstatogr</a> program to calculate basic statistics from vector file</li>
+<li><a class="el" href="pksvm.html">pksvm</a> classify raster image using Support Vector Machine </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkann.html b/doc/html/md_examples_pkann.html
new file mode 100644
index 0000000..1bb4bfd
--- /dev/null
+++ b/doc/html/md_examples_pkann.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkann</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkann </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkann"></a>
+Examples of pkann</h1>
+<p>Classify input image input.tif with an Artificial Neural Network using one hidden layer with 5 neurons. A training sample that is provided as an OGR vector dataset. It contains all features (same dimensionality as input.tif) in its fields (please check <a class="el" href="pkextract.html">pkextract</a> on how to obtain such a file from a "clean" vector file containing locations only). A two-fold cross validation (cv) is performed (output on screen).</p>
+<div class="fragment"><div class="line">pkann -i input.tif -t training.sqlite -o output.tif --nneuron 5 -cv 2</div>
+</div><!-- fragment --><p>Same example as above, but use two hidden layers with 15 and 5 neurons respectively</p>
+<div class="fragment"><div class="line">pkann -i input.tif -t training.sqlite -o output.tif --nneuron 15 --neuron 5 -cv 2</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkascii2img.html b/doc/html/md_examples_pkascii2img.html
new file mode 100644
index 0000000..48d0423
--- /dev/null
+++ b/doc/html/md_examples_pkascii2img.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkascii2img</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkascii2img </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkascii2img"></a>
+Examples of pkascii2img</h1>
+<p>We create a 5x5 raster dataset containing all 0 values except for its center (value=1)</p>
+<div class="fragment"><div class="line">cat input.txt</div>
+<div class="line"></div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 1 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+</div><!-- fragment --><p>We define a pixel size of 25 by 25 m and and a projected in the European projection system ETS89/LAEA. The location of the upper left pixel is also set:</p>
+<div class="fragment"><div class="line">pkascii2img -i input.txt -o output.tif -of GTiff -a_srs epsg:3035 -dx 25 -dy 25 -ulx 1000000 -uly 1000000</div>
+</div><!-- fragment --><p>We check the output GeoTIFF using gdalinfo :</p>
+<div class="fragment"><div class="line">gdalinfo output.tif </div>
+<div class="line"></div>
+<div class="line">Driver: GTiff/GeoTIFF</div>
+<div class="line">Files: output.tif</div>
+<div class="line">Size is 5, 5</div>
+<div class="line">Coordinate System is:</div>
+<div class="line">PROJCS[<span class="stringliteral">"ETRS89 / LAEA Europe"</span>,</div>
+<div class="line"> GEOGCS[<span class="stringliteral">"ETRS89"</span>,</div>
+<div class="line"> DATUM[<span class="stringliteral">"European_Terrestrial_Reference_System_1989"</span>,</div>
+<div class="line"> SPHEROID[<span class="stringliteral">"GRS 1980"</span>,6378137,298.2572221010042,</div>
+<div class="line"> AUTHORITY[<span class="stringliteral">"EPSG"</span>,<span class="stringliteral">"7019"</span>]],</div>
+<div class="line"> TOWGS84[0,0,0,0,0,0,0],</div>
+<div class="line"> AUTHORITY[<span class="stringliteral">"EPSG"</span>,<span class="stringliteral">"6258"</span>]],</div>
+<div class="line"> PRIMEM[<span class="stringliteral">"Greenwich"</span>,0],</div>
+<div class="line"> UNIT[<span class="stringliteral">"degree"</span>,0.0174532925199433],</div>
+<div class="line"> AUTHORITY[<span class="stringliteral">"EPSG"</span>,<span class="stringliteral">"4258"</span>]],</div>
+<div class="line"> PROJECTION[<span class="stringliteral">"Lambert_Azimuthal_Equal_Area"</span>],</div>
+<div class="line"> PARAMETER[<span class="stringliteral">"latitude_of_center"</span>,52],</div>
+<div class="line"> PARAMETER[<span class="stringliteral">"longitude_of_center"</span>,10],</div>
+<div class="line"> PARAMETER[<span class="stringliteral">"false_easting"</span>,4321000],</div>
+<div class="line"> PARAMETER[<span class="stringliteral">"false_northing"</span>,3210000],</div>
+<div class="line"> UNIT[<span class="stringliteral">"metre"</span>,1,</div>
+<div class="line"> AUTHORITY[<span class="stringliteral">"EPSG"</span>,<span class="stringliteral">"9001"</span>]],</div>
+<div class="line"> AUTHORITY[<span class="stringliteral">"EPSG"</span>,<span class="stringliteral">"3035"</span>]]</div>
+<div class="line">Origin = (1000000.000000000000000,1000000.000000000000000)</div>
+<div class="line">Pixel Size = (25.000000000000000,-25.000000000000000)</div>
+<div class="line">Metadata:</div>
+<div class="line"> AREA_OR_POINT=Area</div>
+<div class="line"> TIFFTAG_DATETIME=2014:11:08 11:33:52</div>
+<div class="line"> TIFFTAG_DOCUMENTNAME=output.tif</div>
+<div class="line"> TIFFTAG_SOFTWARE=pktools 2.5.4 by Pieter Kempeneers</div>
+<div class="line">Image Structure Metadata:</div>
+<div class="line"> INTERLEAVE=BAND</div>
+<div class="line">Corner Coordinates:</div>
+<div class="line">Upper Left ( 1000000.000, 1000000.000) ( 23d13<span class="stringliteral">' 9.44"W, 25d30'</span>21.01<span class="stringliteral">"N)</span></div>
+<div class="line"><span class="stringliteral">Lower Left ( 1000000.000, 999875.000) ( 23d13' 8.02"</span>W, 25d30<span class="stringliteral">'17.24"N)</span></div>
+<div class="line"><span class="stringliteral">Upper Right ( 1000125.000, 1000000.000) ( 23d13'</span> 5.27<span class="stringliteral">"W, 25d30'22.72"</span>N)</div>
+<div class="line">Lower Right ( 1000125.000, 999875.000) ( 23d13<span class="stringliteral">' 3.85"W, 25d30'</span>18.95<span class="stringliteral">"N)</span></div>
+<div class="line"><span class="stringliteral">Center ( 1000062.500, 999937.500) ( 23d13' 6.65"</span>W, 25d30<span class="stringliteral">'19.98"N)</span></div>
+<div class="line"><span class="stringliteral">Band 1 Block=5x5 Type=Byte, ColorInterp=Gray</span></div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkascii2ogr.html b/doc/html/md_examples_pkascii2ogr.html
new file mode 100644
index 0000000..9f67b38
--- /dev/null
+++ b/doc/html/md_examples_pkascii2ogr.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkascii2ogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkascii2ogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkascii2ogr"></a>
+Examples of pkascii2ogr</h1>
+<p>Create a vector shape file (output.shp) from input ASCII file (input.txt). The coordinates x (longitude) and y (latitude) can be found in input.txt as columns 3 and 2 respectively (columns start counting from 0). The remaining 2 columns in input.txt are used as fields (attributes) of type integer: id (column 0) and label (column 3). The projection is set to lat lon (epsg:4326).</p>
+<div class="fragment"><div class="line">pkascii2ogr -i input.txt -o output.shp -x 2 -y 1 -n <span class="keywordtype">id</span> -ot Integer -n label -ot Integer -a_srs epsg:4326</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkcomposite.html b/doc/html/md_examples_pkcomposite.html
new file mode 100644
index 0000000..77ca524
--- /dev/null
+++ b/doc/html/md_examples_pkcomposite.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkcomposite</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkcomposite </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkcomposite"></a>
+Examples of pkcomposite</h1>
+<p>Create a composit from two input images. If images overlap, keep only last image (default rule)</p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -o output.tif</div>
+</div><!-- fragment --><p>Create a composit from two input images. Values of 255 in band 1 (starting from 0) are masked as invalid. Typically used when second band of input image is a cloud mask</p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -srcnodata 255 -bndnodata 1 -dstnodata 0 -o output.tif </div>
+</div><!-- fragment --><p>Create a maximum NDVI (normalized difference vegetation index) composit. Values of 255 in band 0 are masked as invalid and flagged as 0 if no other valid coverage. Typically used for (e.g., MODIS) images where red and near infrared spectral bands are stored in bands 0 and 1 respectively. In this particular case, a value of 255 in the first input band indicates a nodata value (e.g., cloud mask is coded within the data values).</p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -cr maxndvi -cb 0 -cb 1 -srcnodata 255 -bndnodata 0 -dstnodata 0 -o output.tif</div>
+</div><!-- fragment --><p>Create a composite image using weighted mean: output=(3/4*input1+6/4*input2+3/4*input2)/3.0</p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -i input3.tif -o output.tif -cr mean -w 0.75 -w 1.5 -w 0.75</div>
+</div><!-- fragment --><p>Create a median composit of all GTiff images found in current directory that cover (at least part of) the image coverage.tif. Values smaller or equal to 0 are set as nodata 0 (default value for -dstnodata)</p>
+<div class="fragment"><div class="line">pkcomposite -i large.tif $(<span class="keywordflow">for</span> IMAGE in *.tif;<span class="keywordflow">do</span> pkinfo -i $IMAGE --cover $(pkinfo -i coverage.tif -bb);done) -cr median -min 0 -o output.tif</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkcreatect.html b/doc/html/md_examples_pkcreatect.html
new file mode 100644
index 0000000..3a2d66b
--- /dev/null
+++ b/doc/html/md_examples_pkcreatect.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkcreatect</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkcreatect </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkcreatect"></a>
+Examples of pkcreatect</h1>
+<p>Attach a color table to image with values between 0 and 50</p>
+<div class="fragment"><div class="line">pkcreatect -i image.tif -o image_ct.tif -min 0 -max 50</div>
+</div><!-- fragment --><p>Attach a grey scale "color" table to image with values between 0 and 100 and create a legend image (annotation needs to be drawn manually)</p>
+<div class="fragment"><div class="line">pkcreatect -i image.tif -o image_ct.tif -min 0 -max 100 -l legend.tif -g</div>
+</div><!-- fragment --><p>Attach a predefined color table to image.tif. The colortable has 5 entries for the values 0 (black), 1 (red), 2 (green), 3 (blue) and 4 (grey)</p>
+<div class="fragment"><div class="line">cat colortable.txt</div>
+<div class="line"></div>
+<div class="line">0 0 0 0 255</div>
+<div class="line">1 255 0 0 255</div>
+<div class="line">2 0 255 0 255</div>
+<div class="line">3 0 0 255 255</div>
+<div class="line">4 100 100 100 255</div>
+</div><!-- fragment --><div class="fragment"><div class="line">pkcreatect -i image.tif -o image_ct.tif -ct colortable.txt</div>
+</div><!-- fragment --><p>Remove the color table from an image</p>
+<div class="fragment"><div class="line">pkcreatect -i image.tif -o image_noct.tif -ct none</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkcrop.html b/doc/html/md_examples_pkcrop.html
new file mode 100644
index 0000000..531d992
--- /dev/null
+++ b/doc/html/md_examples_pkcrop.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkcrop</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkcrop </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkcrop"></a>
+Examples of pkcrop</h1>
+<p>Crop the input image to the given bounding box</p>
+<div class="fragment"><div class="line">pkcrop -i input.tif -ulx 100 -uly 1000 -lrx 600 -lry 100 -o output.tif</div>
+</div><!-- fragment --><p>Crop the input image to the envelop of the given polygon and mask all pixels outside polygon as 0 (using gdal_rasterize)</p>
+<div class="fragment"><div class="line">pkcrop -i input.tif -e extent.shp -o output.tif</div>
+<div class="line">gdal_rasterize -i -burn 0 -l extent extent.shp output.tif</div>
+</div><!-- fragment --><p>Extract bands 3,2,1 (starting from 0) in that order from multi-band raster image input.tif</p>
+<div class="fragment"><div class="line">pkcrop -i input.tif -b 3 -b 2 -b 1 -o output.tif</div>
+</div><!-- fragment --><p>Scale raster floating point image fimage.tif with factor 100 and write as single byte image with the given colourtable (for auto scaling, see next example)</p>
+<div class="fragment"><div class="line">pkcrop -i fimage.tif -s 100 -ot Byte -o bimage.tif -ct colortable.txt</div>
+</div><!-- fragment --><p>Automatically scale raster floating point image fimage.tif to [0:100] and write the output as a single byte image with the given colourtable</p>
+<div class="fragment"><div class="line">pkcrop -i fimage.tif -as 0 -as 100 -ot Byte -o bimage.tif -ct colortable.txt</div>
+</div><!-- fragment --><p>Crop raster image large.tif to the bounding box of raster image small.tif and use the same pixel size.</p>
+<div class="fragment"><div class="line">pkcrop -i large.tif $(pkinfo -i small.tif -bb -dx -dy) -o output.tif</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkdiff.html b/doc/html/md_examples_pkdiff.html
new file mode 100644
index 0000000..835ea9d
--- /dev/null
+++ b/doc/html/md_examples_pkdiff.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkdiff</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkdiff </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkdiff"></a>
+Examples of pkdiff</h1>
+<p>Check if two raster images are different (reports only if images are different or not)</p>
+<div class="fragment"><div class="line">pkdiff -i input.tif -ref reference.tif</div>
+</div><!-- fragment --><p>Validate a classification map using points from a reference sample and report confusion matrix</p>
+<div class="fragment"><div class="line">pkdiff -i classificationMap.tif -ref referencePoints.shp -cm </div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkdsm2shadow.html b/doc/html/md_examples_pkdsm2shadow.html
new file mode 100644
index 0000000..07cce14
--- /dev/null
+++ b/doc/html/md_examples_pkdsm2shadow.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkdsm2shadow</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkdsm2shadow </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkdsm2shadow"></a>
+Examples of pkdsm2shadow</h1>
+<p>Create a shadow mask for the input raster dataset dsm.tif, using Sun zenith angle of 10 degrees and a Sun azimuth angle of 135 degrees (South-South-East). All shadow pixels are set to a value of 1.</p>
+<div class="fragment"><div class="line">pkdsm2shadow -i dsm.tif -sza 10 -saa 170 -f 1 -o shadow.tif</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkdumpimg.html b/doc/html/md_examples_pkdumpimg.html
new file mode 100644
index 0000000..7802292
--- /dev/null
+++ b/doc/html/md_examples_pkdumpimg.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkdumpimg</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkdumpimg </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkdumpimg"></a>
+Examples of pkdumpimg</h1>
+<p>We create a 5x5 raster dataset containing all 0 values except for its center (value=1)</p>
+<div class="fragment"><div class="line">cat input.txt</div>
+<div class="line"></div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 1 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+</div><!-- fragment --><p>Use <a class="el" href="pkascii2img.html">pkascii2img</a> to create an raster dataset from input.txt</p>
+<div class="fragment"><div class="line">pkascii2img -i input.txt -o output.tif -of GTiff -a_srs epsg:3035 -dx 25 -dy 25 -ulx 1000000 -uly 1000000</div>
+</div><!-- fragment --><p>Dump the image content of output.tif to screen</p>
+<div class="fragment"><div class="line">pkdumpimg -i output.tif</div>
+</div><!-- fragment --><div class="fragment"><div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 1 0 0</div>
+<div class="line">0 0 0 0 0</div>
+<div class="line">0 0 0 0 0</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkdumpogr.html b/doc/html/md_examples_pkdumpogr.html
new file mode 100644
index 0000000..0b7f8db
--- /dev/null
+++ b/doc/html/md_examples_pkdumpogr.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkdumpogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkdumpogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkdumpogr"></a>
+Examples of pkdumpogr</h1>
+<p>Dump the attributes label and description for the vector dataset sample.sqlite to standard output (screen)</p>
+<div class="fragment"><div class="line">pkdumpogr -i sample.sqlite -n label -n description</div>
+</div><!-- fragment --><div class="fragment"><div class="line">0 2 noforest</div>
+<div class="line">1 2 noforest</div>
+<div class="line">2 2 noforest</div>
+<div class="line">3 2 noforest</div>
+<div class="line">4 2 noforest</div>
+<div class="line">5 2 noforest</div>
+<div class="line">6 2 noforest</div>
+<div class="line">7 2 noforest</div>
+<div class="line">8 2 noforest</div>
+<div class="line">9 2 noforest</div>
+<div class="line">10 1 forest</div>
+<div class="line">11 2 noforest</div>
+</div><!-- fragment --><p>Similar to previous example, but transpose output (does not work without explicitly defining options -n for attributes)</p>
+<div class="fragment"><div class="line">pkdumpogr -i sample.sqlite -n label -n description -t</div>
+</div><!-- fragment --><div class="fragment"><div class="line">0 2 2 2 2 2 2 2 2 2 2 1 2</div>
+<div class="line">1 noforest noforest noforest noforest noforest noforest noforest noforest noforest noforest forest noforest </div>
+</div><!-- fragment --><p>Dump the entire content of vector dataset input.sqlite to standard output</p>
+<div class="fragment"><div class="line">pkdumpogr -i input.sqlite</div>
+</div><!-- fragment --><p>Dump only ATTRIBUTE of vector dataset input.sqlite including x and y position and output to ASCII file output.txt</p>
+<div class="fragment"><div class="line">pkdumpogr -i input.sqlite -o output.txt -n ATTRIBUTE -pos</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkextract.html b/doc/html/md_examples_pkextract.html
new file mode 100644
index 0000000..851881e
--- /dev/null
+++ b/doc/html/md_examples_pkextract.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkextract</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkextract </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkextract"></a>
+Examples of pkextract</h1>
+<h2><a class="anchor" id="example_pkextract_vector"></a>
+Using vector samples</h2>
+<p>Extract all points for all layers read in points.sqlite from input.tif. Create a new point vector dataset named extracted.sqlite, where each point will contain an attribute for the individual input bands in input.tif. Notice that the default vector format is Spatialite (.sqlite).</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s points.sqlite -o extracted.sqlite</div>
+</div><!-- fragment --><p>Same example as above, but only extract the points for the layer in points.sqlite named "valid"</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s points.sqlite -ln valid -o extracted.sqlite</div>
+</div><!-- fragment --><p>Extract points and write output in ESRI Shapefile format</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s points.shp -f <span class="stringliteral">"ESRI Shapefile"</span> -o extracted.shp</div>
+</div><!-- fragment --><p>Extract the standard deviation for each input band in a 3 by 3 window, centered around the points in the sample vector dataset points.sqlite. The output vector dataset will contain polygon features defined by the buffered points (3x3 window). Use the option -circ to define a circular buffer.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s points.sqlite -o extracted.sqlite -r stdev -buf 3 -polygon</div>
+</div><!-- fragment --><p>Extract all pixels from input.tif covered by the polygons in locations.sqlite. Each polygon can thus result in multiple point features with attributes for each input band. Write the extracted points to a point vector dataset training.sqlite.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s polygons.sqlite -o training.sqlite -r point</div>
+</div><!-- fragment --><p>Extract the first band from input.tif at the centroids of the polygons in vector dataset polygons.sqlite. Assign the extracted point value to a new attribute of the polygon and write to the vector dataset extracted.sqlite.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -b 0 -s polygons.sqlite -r centroid -o extracted.sqlite -polygon </div>
+</div><!-- fragment --><p> Extract the mean values for the second band in input.tif covered by each polygon in polygons.sqlite. The mean values are written to a copy of the polygons in output vector dataset extracted.sqlite</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -b 1 -s polygons.sqlite -r mean -o extracted.sqlite -polygon </div>
+</div><!-- fragment --><p>Extract the majority class in each polygon for the input land cover map. The land cover map contains five valid classes, labeled 1-5. Other class values (e.g., labeled as 0) are not taken into account in the voting.</p>
+<div class="fragment"><div class="line">pkextract -i landcover.tif -s polygons.sqlite -r maxvote -o majority.sqlite -polygon -c 1 -c 2 -c 3 -c 4 -c 5</div>
+</div><!-- fragment --><h2><a class="anchor" id="example_pkextract_random"></a>
+Using random and grid samples</h2>
+<p>Extract 100 sample units following a simple random sampling design. For each sample unit, the median value is extracted from the input raster dataset in a window of 3 by 3 pixels and written to an attribute of the output vector dataset. The output vector dataset contains polygon features defined by the windows centered at the random selected sample units.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -o random.sqlite -rand 100 -r median -buf 3 -polygon</div>
+</div><!-- fragment --><p>Extract points following a systematic grid with grid cell size of 100 m. Discard pixels that have a value 0 in the input raster dataset.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -o systematic.sqlite -grid 100 -srcnodata 0</div>
+</div><!-- fragment --><h2><a class="anchor" id="example_pkextract_raster"></a>
+Using raster samples</h2>
+<p>Typical use where pixels are extracted based on a land cover map (sample.tif). Extract all bands for a random sample of 10 percent of the pixels in the land cover map sample.tif where the land cover classes are either 1,2 or 3 (class values). Write output to the point vector dataset extracted.sqlite.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s sample.tif -o extracted.sqlite -t 10 -c 1 -c 2 -c 3</div>
+</div><!-- fragment --><p>Extract all bands for the first 5000 pixels encountered in sample.tif where pixels have a value equal to 1. Write output to point vector dataset extracted.sqlite.</p>
+<div class="fragment"><div class="line">pkextract -i input.tif -s sample.tif -o extracted.sqlite -t -5000 -c 1</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkfilter.html b/doc/html/md_examples_pkfilter.html
new file mode 100644
index 0000000..7c88391
--- /dev/null
+++ b/doc/html/md_examples_pkfilter.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkfilter</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkfilter </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkfilter"></a>
+Examples of pkfilter</h1>
+<h2><a class="anchor" id="examples_pkfilter_spatial"></a>
+Filtering in spatial domain</h2>
+<p>Filter input.tif with morphological dilation filter. Use a circular kernel (instead of rectangular) of size 3x3.</p>
+<div class="fragment"><div class="line">pkfilter -i input.tif -o filter.tif -dx 3 -dy 3 -f dilate -circ</div>
+</div><!-- fragment --><p>Similar to previous example, but consider only values of 255 for filtering operation. Typical usage: dilate cloud values in input image that are flagged as 255</p>
+<div class="fragment"><div class="line">pkfilter -i input.tif -o filter.tif -dx 3 -dy 3 -<span class="keyword">class </span>255 -f dilate -circ</div>
+</div><!-- fragment --><h2><a class="anchor" id="examples_pkfilter_spectral"></a>
+Filtering in spectral/temporal domain</h2>
+<h3><a class="anchor" id="examples_pkfilter_spectral_moving_window"></a>
+Applications with moving window</h3>
+<p>Calculate the median value for each pixel, calculated on a moving window of width 3 (-dz 3) over all input bands. The output raster dataset will contain as many bands as the input raster dataset.</p>
+<div class="fragment"><div class="line">pkfilter -i input.tif -o filter_stdev.tif -dz 3 -f median</div>
+</div><!-- fragment --><h3><a class="anchor" id="examples_pkfilter_spectral_no_moving_window"></a>
+Applications without moving window</h3>
+<p>Calculate the standard deviation for each pixel, calculated on all input bands. The output raster dataset will contain a single band only, no moving window is used (-dz 1).</p>
+<div class="fragment"><div class="line">pkfilter -i input.tif -o filter_stdev.tif -dz 1 -f stdev</div>
+</div><!-- fragment --><p>"Smooth" (interpolate) nodata in spectral/temporal domain (-dz 1), using a linear interpolation. The following interpolation types are supported: akima (default), linear, polynomial, cspline, cspline_periodic, akima_periodic (please check <a href="http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html">gsl</a> page for more information on the interpolation types).</p>
+<div class="fragment"><div class="line">pkfilter -i input.tif -o input_smoothed.tif -dz 1 -f smoothnodata -interp linear</div>
+</div><!-- fragment --><h3><a class="anchor" id="examples_pkfilter_srf"></a>
+Filter with spectral response functions</h3>
+<p>The following two examples show how to use pkfilter for spectral filtering a high dimensional input (hyperspectral image) to a lower dimensional output (multi-spectral image). Notice that the input wavelenghts must be provided as -win value1 -win value2 -win value3 ... To save typing, we assume the input wavelengths are listed in a text file wavelengths.txt (single column ASCII file with all wavelenghts listed in nanometer).</p>
+<div class="fragment"><div class="line">cat wavelengths.txt | <span class="keywordflow">while</span> read W;<span class="keywordflow">do</span> echo <span class="stringliteral">" -win $W"</span>;done</div>
+</div><!-- fragment --><p>In the first example, the hyperspectral image is filtered with a spectral response function. For each spectral response function provided, a separate output band is created. The spectral response function(s) must be listed in two column ASCII file(s) with the wavelengths and response listed in the first and second column respectively. The response functions can but must not be normalized (this is taken care of by the filter utility).</p>
+<p>In this example, the input is a hyperspectral image with N>>1 spectral wavelengths (bands). The output is a multispectral image with 3 bands, where a spectral response function is provided for each output band.</p>
+<div class="fragment"><div class="line">pkfilter -i hyperspectral.tif -o multispectral.tif -srf srf1.txt -srf srf2.txt -srf srf3.txt $(cat wavelengths.txt | <span class="keywordflow">while</span> read W;<span class="keywordflow">do</span> echo <span class="stringliteral">" -win $W"</span>;done)</div>
+</div><!-- fragment --><p>The next example is similar to the previous. Instead of providing a spectral response function for each output band, you can also provide the center wavelengths and full width half max values. Here, a three band (red, green, blue) output image is produced.</p>
+<div class="fragment"><div class="line">pkfilter -i hyperspectral.tif -o multispectral.tif -wout 650 -wout 510 -wout 475 -fwhm 50 -fwhm 50 -fwhm 50 $(cat wavelengths.txt | <span class="keywordflow">while</span> read W;<span class="keywordflow">do</span> echo <span class="stringliteral">" -win $W"</span>;done)</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkgetmask.html b/doc/html/md_examples_pkgetmask.html
new file mode 100644
index 0000000..6a4ba14
--- /dev/null
+++ b/doc/html/md_examples_pkgetmask.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkgetmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkgetmask </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkgetmask"></a>
+Examples of pkgetmask</h1>
+<div class="fragment"><div class="line">pkgetmask -i input.tif -o output.tif -min 0 -nodata 0 -data 1</div>
+</div><!-- fragment --><p> create mask, setting all negative values to 0 (rest to 1)</p>
+<div class="fragment"><div class="line">pkgetmask -i input.tif -o output.tif -min 0 -max 10 -min 0 -max 250 -b 0 -b 1</div>
+</div><!-- fragment --><p> create mask. Mask is set to 0 (default value for -nodata) if either band 0 is not between 0 and 10 OR (default operator) band 1 is not between 0 and 250. Else mask is set to 1 (default value for -data) </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkinfo.html b/doc/html/md_examples_pkinfo.html
new file mode 100644
index 0000000..a9a9422
--- /dev/null
+++ b/doc/html/md_examples_pkinfo.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkinfo</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkinfo </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkinfo"></a>
+Examples of pkinfo</h1>
+<div class="fragment"><div class="line">pkinfo -i image.tif -nb</div>
+</div><!-- fragment --><p> show number of bands in raster image.tif</p>
+<div class="fragment"><div class="line">pkinfo -i image.tif -max -b 1</div>
+</div><!-- fragment --><p> show maximum value of band 1 (starting from 0) of raster image.tif</p>
+<div class="fragment"><div class="line">pkinfo -i image.tif -x 0 -y 0 -r -b 3 -b 2 -b 1</div>
+</div><!-- fragment --><p> read (dump) upper left pixel value for bands 3,2,1</p>
+<div class="fragment"><div class="line">pkinfo -i image.tif -x 3528120 -y 4329681 -geo -r -b 3 -b 2 -b 1</div>
+</div><!-- fragment --><p> read (dump) pixel value at this geographic location (x,y) for bands 3,2,1</p>
+<div class="fragment"><div class="line">pkinfo -i image1.tif -b</div>
+</div><!-- fragment --><p> show bounding box (-ulx -uly -lrx -lry) in geo coordinates for image1.tif</p>
+<div class="fragment"><div class="line">pkinfo -i image1.tif -i image2.tif -i image3.tif -b</div>
+</div><!-- fragment --><p> show bounding box (-ulx -uly -lrx -lry) in geo coordinates for each image (and union and intersect)</p>
+<div class="fragment"><div class="line">pkinfo -i image1.tif --mask 0 --mask 255 -ref</div>
+</div><!-- fragment --><p> show the reference pixel (centre of gravity) for image1.tif, treating 0 and 255 as NO VALUE</p>
+<div class="fragment"><div class="line">pkinfo -i image.tif $(pkinfo -i image.tif -c) -geo -r</div>
+</div><!-- fragment --><p> read (dump) pixel value at image centre for band 0</p>
+<div class="fragment"><div class="line">pkinfo $(<span class="keywordflow">for</span> IMAGE in modis_2010*.tif; <span class="keywordflow">do</span> pkinfo -i $IMAGE --cover -x 4215500 -y 2534000;done) -x 4215500 -y 253400</div>
+</div><!-- fragment --><p> read (dump) pixel value in band 0 (default) for all images in current directory that cover this geographic location </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkpolygonize.html b/doc/html/md_examples_pkpolygonize.html
new file mode 100644
index 0000000..c6116ec
--- /dev/null
+++ b/doc/html/md_examples_pkpolygonize.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkpolygonize</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkpolygonize </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkpolygonize"></a>
+Examples of pkpolygonize</h1>
+<div class="fragment"><div class="line">pkpolygonize -i input.tif -m input.tif -o ouput.shp</div>
+</div><!-- fragment --><p> create vector file from raster image (typically a classification image), based on pixel (land cover class) values. </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkreclass.html b/doc/html/md_examples_pkreclass.html
new file mode 100644
index 0000000..5b1dea6
--- /dev/null
+++ b/doc/html/md_examples_pkreclass.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkreclass</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkreclass </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkreclass"></a>
+Examples of pkreclass</h1>
+<div class="fragment"><div class="line">pkreclass -i input1.tif -o output.tif -c 1 -r 0 -c 2 -r 0</div>
+</div><!-- fragment --><p> replace pixel values 1 and 2 with value 0</p>
+<div class="fragment"><div class="line">pkreclass -i vector.shp -o output.shp -c FROM -r TO -n INFIELD</div>
+</div><!-- fragment --><p> replace FROM with TO in field INFIELD (of type string) in vector file vector.shp and write to new vector output.shp</p>
+<div class="fragment"><div class="line"><span class="keywordflow">for</span>((i=0;i<256;++i));<span class="keywordflow">do</span> <span class="keywordflow">if</span>(($i<100));then echo <span class="stringliteral">"$i 1"</span>;<span class="keywordflow">else</span> echo <span class="stringliteral">"$i 0"</span>;fi;done > code.txt; pkreclass -i input1.tif -o output.tif --code code.txt</div>
+</div><!-- fragment --><p> replace all values smaller than 100 with 1, all other values with 0</p>
+<div class="fragment"><div class="line">pkreclass -i input1.tif -o output.tif $(<span class="keywordflow">for</span>((i=0;i<256;++i));<span class="keywordflow">do</span> <span class="keywordflow">if</span>(($i<100));then echo -n <span class="stringliteral">" -c $i "</span> <span class="stringliteral">" -r 1"</span>;<span class="keywordflow">else</span> echo <span class="stringliteral">" -c $i "</span> <span class="stringliteral">" -r 0"</span [...]
+</div><!-- fragment --><p> same as previous but without temporary file </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pksetmask.html b/doc/html/md_examples_pksetmask.html
new file mode 100644
index 0000000..5769763
--- /dev/null
+++ b/doc/html/md_examples_pksetmask.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pksetmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pksetmask </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pksetmask"></a>
+Examples of pksetmask</h1>
+<h1><a class="anchor" id="single_mask"></a>
+Using a single mask</h1>
+<p>With a single mask you can provide as many triples (–operator, –msknodata, –nodata) as you wish. All operators work simultaneously on that mask. Caution: the first operator that tests true will be selected. This is explained in the next example:</p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif --<span class="keyword">operator</span>=<span class="charliteral">'>'</span> --msknodata 0 --nodata 0 --<span class="keyword">operator</span>=<span class="charliteral">'>'</span> --msknodata 10 --nodata 10 -o output.tif</div>
+</div><!-- fragment --><p> Warning: second operator will never test true as first will supersede! </p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif --<span class="keyword">operator</span>=<span class="charliteral">'>'</span> --msknodata 10 --nodata 10 --<span class="keyword">operator</span>=<span class="charliteral">'>'</span> --msknodata 0 --nodata 1 -output.tif</div>
+</div><!-- fragment --><p> OK: values above 10 will be 10, values between 0 and 10 will be 1</p>
+<h1><a class="anchor" id="multiple_masks"></a>
+Using multiple masks</h1>
+<p>With multiple masks, you can use one triple (–operator, –msknodata, –nodata) for each corresponding mask (following the same order of input). If the number of triples is not equal to the number of masks, then only the first triple is used for all masks simultaneously </p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask1.tif --<span class="keyword">operator</span> <span class="charliteral">'>'</span> --msknodata 250 --nodata 1 -m mask2.tif --<span class="keyword">operator</span> <span class="charliteral">'>'</span> --msknodata 100 --nodata 2 -o output.tif</div>
+</div><!-- fragment --><p> If mask1.tif is above 250, the output will be 1. If mask2 is above 100, the output will be 2. If both operators test true, the first will supersede (output will be 1)</p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask1.tif -m mask2.tif --<span class="keyword">operator</span> <span class="charliteral">'>'</span> --msknodata 250 --nodata 1 -o output.tif</div>
+</div><!-- fragment --><p> If either mask1.tif or mask2.tif is above 250, the output will be 1</p>
+<h1><a class="anchor" id="more_examples"></a>
+More examples</h1>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 0 -nodata 255</div>
+</div><!-- fragment --><p> copy pixel values from input.tif to output.tif, applying mask.tif, setting all values to 255 where mask is 0.</p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 1 -nodata 255 --<span class="keyword">operator</span> <span class="charliteral">'!'</span></div>
+</div><!-- fragment --><p> copy values from input.tif to output.tif, but set all values to 255 if mask is not 1</p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask1.tif -m mask2.tif -o output.tif -ot Byte --msknodata 0 -nodata 255</div>
+</div><!-- fragment --><p> Application of two masks. Copy pixel values from input.tif to output.tif, setting all values to 255 where either mask is 0.</p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif -o output.tif -ot Byte --msknodata 0 --msknodata 1 -nodata 255 -nodata 255</div>
+</div><!-- fragment --><p> copy pixel values from input.tif to output.tif, applying single masks, setting all values to 255 where mask is either 0 or 1. </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pksieve.html b/doc/html/md_examples_pksieve.html
new file mode 100644
index 0000000..c3e2e91
--- /dev/null
+++ b/doc/html/md_examples_pksieve.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pksieve</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pksieve </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pksieve"></a>
+Examples of pksieve</h1>
+<div class="fragment"><div class="line">pksieve -i input.tif -c 8 -s 5 -o ouput.shp</div>
+</div><!-- fragment --><p> merge all patches smaller than 5 pixels into bigger classes, using 8 connectivity (horizontal, vertical and diagonal) </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pkstatogr.html b/doc/html/md_examples_pkstatogr.html
new file mode 100644
index 0000000..b9d1046
--- /dev/null
+++ b/doc/html/md_examples_pkstatogr.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pkstatogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pkstatogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pkstatogr"></a>
+Examples of pkstatogr</h1>
+<div class="fragment"><div class="line">pkstatogr -i input.shp -f FIELDID -n 100</div>
+</div><!-- fragment --><p> report histogram of values in FIELDID (to standard output)</p>
+<div class="fragment"><div class="line">pkstatogr -i input.shp -f FIELDID -min -max -mean -stdev</div>
+</div><!-- fragment --><p> report min, max, mean and standard deviation of values in FIELDID (to standard output) </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_examples_pksvm.html b/doc/html/md_examples_pksvm.html
new file mode 100644
index 0000000..ff0264a
--- /dev/null
+++ b/doc/html/md_examples_pksvm.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: examples_pksvm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples_pksvm </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="examples_pksvm"></a>
+Examples of pksvm</h1>
+<p>Classify input image input.tif with a support vector machine. A training sample that is provided as an OGR vector dataset. It contains all features (same dimensionality as input.tif) in its fields (please check <a class="el" href="pkextract.html">pkextract</a> on how to obtain such a file from a "clean" vector file containing locations only). A two-fold cross validation (cv) is performed (output on screen). The parameters cost and gamma of the support vector machine are set to 1000 an [...]
+<div class="fragment"><div class="line">pksvm -i input.tif -t training.sqlite -o output.tif -cv 2 -ct colourtable.txt -cc 1000 -g 0.1</div>
+</div><!-- fragment --><p>Classification using bootstrap aggregation. The training sample is randomly split in three subsamples (33% of the original sample each).</p>
+<div class="fragment"><div class="line">pksvm -i input.tif -t training.sqlite -o output.tif -bs 33 -bag 3</div>
+</div><!-- fragment --><p>Classification using prior probabilities for each class. The priors are automatically normalized. The order in which the options -p are provide should respect the alphanumeric order of the class names (class 10 comes before 2...)</p>
+<div class="fragment"><div class="line">pksvm -i input.tif -t training.sqlite -o output.tif -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 1 -p 0.2 -p 1 -p 1 -p 1</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_faq_pkcomposite.html b/doc/html/md_faq_pkcomposite.html
new file mode 100644
index 0000000..9c0d537
--- /dev/null
+++ b/doc/html/md_faq_pkcomposite.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: faq_pkcomposite</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">faq_pkcomposite </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="faq_pkcomposite"></a>
+Frequently asked questions about pkcomposite</h1>
+<ul>
+<li><p class="startli">How to use different nodata values in input images?</p>
+<p class="startli">For individual invalid value(s) in input image, use -srcnodata</p>
+<p class="startli">Usage: use unique value for each invalid bands set in -vb (–bndnodata) or use a single value that will be applied to all invalid bands</p>
+<p class="startli">Example:</p>
+</li>
+</ul>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -o output.tif -srcnodata 0 -srcnodata 255 -bndnodat 0 -bndnodata 1</div>
+</div><!-- fragment --><p> will consider 0 in band 0 and 255 in band 1 of input images as no value</p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -o output.tif -srcnodata 0 -bndnodata 0 -bndnodata 1</div>
+</div><!-- fragment --><p> will consider 0 in both bands 0 and 1 of input images as no value</p>
+<ul>
+<li><p class="startli">How to use a range of nodata values in input images?</p>
+<p class="startli">For range(s) of invalid values in input images: use -min (–min) and -max (–max) Usage: use unique range set for each invalid bands set in -bndnodata</p>
+<p class="startli">Example: </p>
+<div class="fragment"><div class="line">pkcomposite -i input1.tif -i input2.tif -o output.tif -min 0 -max 200 -min 0 -max 2 -bndnodata 0 -bndnodata 1</div>
+</div><!-- fragment --><p> will consider all negative values in band 0 and 1 of input images as invalid. Values larger or equal to 200 in band 0 will be invalid, as well as values larger or equal to 2 in band 1</p>
+</li>
+<li><p class="startli">If I take the mean value as composit rule for multi-band input images, will the output image contain the mean value of overlapping images in each band?</p>
+<p class="startli">Yes </p>
+</li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_faq_pksetmask.html b/doc/html/md_faq_pksetmask.html
new file mode 100644
index 0000000..9fe130a
--- /dev/null
+++ b/doc/html/md_faq_pksetmask.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: faq_pksetmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">faq_pksetmask </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="faq_pksetmask"></a>
+Frequently asked questions about pksetmask</h1>
+<p>Q1. I want to mask my input image (a byte image with values between 0 and 254) with a mask that only covers a spatial subset of the input image. Within the spatial subset of the primary mask, all pixels must be set to 0 where the primary mask equals 1. Outside the spatial subset I want to set all pixel values to 255.</p>
+<p>A1. This can be done using two masks, selecting the input image as the secondary mask. Choose the secondary operator acting on the secondary mask such that the condition is always true (e.g, < 255 ). </p>
+<div class="fragment"><div class="line">pksetmask -i input.tif -m mask.tif -t 1 -f 0 --<span class="keyword">operator</span> <span class="charliteral">'='</span> -m input.tif -t 255 -f 255 --<span class="keyword">operator</span> <span class="charliteral">'<'</span> -o output.tif</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_header.html b/doc/html/md_header.html
new file mode 100644
index 0000000..df02cb8
--- /dev/null
+++ b/doc/html/md_header.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: header</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">header </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="thetool"></a>
+thetool</h1>
+<p>theshortdescription</p>
+<h2>SYNOPSIS</h2>
+<p><code> thesynopsis </code></p>
+<h2>DESCRIPTION</h2>
+<p>thelongdescription</p>
+<h2>OPTIONS</h2>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options |short|long|type|default|description| |--—|-—|-—|----—|--------—| </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_installation_linux.html b/doc/html/md_installation_linux.html
new file mode 100644
index 0000000..3c0ecd7
--- /dev/null
+++ b/doc/html/md_installation_linux.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: installation_linux</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">installation_linux </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="installation_linux"></a>
+Installation on Linux</h1>
+<h2><a class="anchor" id="install_debian"></a>
+Installation for Debian Linux (via repository)</h2>
+<p>A <a href="https://packages.debian.org/source/sid/pktools">binary package</a> of pktools for Debian is maintained by Francesco Paolo Lovergine and available in the repository. You can install it using the advanced package tool (apt):</p>
+<div class="fragment"><div class="line">sudo apt-<span class="keyword">get</span> install pktools</div>
+</div><!-- fragment --><p>The version in the repository might not be the latest available (please check the <a href="https://qa.debian.org/developer.php?login=pkg-grass-devel%40lists.alioth.debian.org">packages overview</a>). The latest version of pktools can always be installed via the <a class="el" href="md_installation_linux.html#install_ubuntu">installation script</a> or from the source code using a <a class="el" href="md_installation_linux.html#install_manual">manual</a> installation.</p>
+<h2><a class="anchor" id="install_ubuntu"></a>
+Installation for Ubuntu (Debian based) Linux distributions (from source code via automatic script)</h2>
+<p>Users working with Debian based distributions (e.g., Ubuntu) can download <a href="http://download.savannah.gnu.org/releases/pktools/install_pktools.sh">install_pktools.sh</a>. This script will automatically download the latest release of pktools and dependencies. You need an internet connection when running the script (as root or sudo):</p>
+<div class="fragment"><div class="line">sudo bash install_pktools.sh</div>
+</div><!-- fragment --><h2><a class="anchor" id="install_manual"></a>
+Manual installation for (all Linux distributions)</h2>
+<p>For a manual installation, download the <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest.tar.gz">latest</a> release from <a href="http://download.savannah.gnu.org/releases/pktools/">Savannah</a></p>
+<p>Optionally: check the release <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest.md5">md5sum</a> to ensure originality.</p>
+<div class="fragment"><div class="line">md5sum pktools-latest.tar.gz</div>
+</div><!-- fragment --><p>The result should be identical to the content of the corresponding md5 file you downloaded.</p>
+<p>Unpack the tar zip file</p>
+<div class="fragment"><div class="line">tar xzvf pktools-latest.tar.gz</div>
+<div class="line">cd pktools-*</div>
+</div><!-- fragment --><p>Basic installation (please refer to INSTALL file for more advanced configuration) </p>
+<div class="fragment"><div class="line">./configure</div>
+<div class="line">make</div>
+<div class="line">sudo make install</div>
+<div class="line">sudo ldconfig</div>
+</div><!-- fragment --><h3><a class="anchor" id="pktools_installation_required"></a>
+Required dependences</h3>
+<p>packages to install before pktools</p>
+<ul>
+<li>g++</li>
+<li>make</li>
+<li>libgdal-dev (see also <a href="http://trac.osgeo.org/gdal/wiki/BuildingOnUnix">http://trac.osgeo.org/gdal/wiki/BuildingOnUnix</a>)</li>
+<li>libgsl0-dev (see also <a href="http://www.gnu.org/software/gsl/">http://www.gnu.org/software/gsl/</a>)</li>
+<li>libarmadillo-dev (see also <a href="http://arma.sourceforge.net/download.html">http://arma.sourceforge.net/download.html</a>)</li>
+</ul>
+<p>Example on how to install required packages in Debian based system (using apt-get):</p>
+<ul>
+<li>sudo apt-get install g++ make libgdal-dev libgsl0-dev libarmadillo-dev</li>
+</ul>
+<h3><a class="anchor" id="pktools_installation_optional"></a>
+Optional dependences</h3>
+<p><b>To enable program <a class="el" href="pkoptsvm.html">pkoptsvm</a></b></p>
+<p>Install additional package</p>
+<ul>
+<li>libnlopt-dev (see also <a href="http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation">http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation</a> )</li>
+</ul>
+<p>Example on how to install required packages in Debian based system (using apt-get):</p>
+<div class="fragment"><div class="line">sudo apt-<span class="keyword">get</span> install libnlopt-dev</div>
+</div><!-- fragment --><p>Note: currently, the repository seems not to include this package anymore and manual installation is required (see also <a href="http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation">http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation</a>)</p>
+<ul>
+<li>Install pktools with with extra configuration option –enable-nlopt:</li>
+</ul>
+<div class="fragment"><div class="line">./configure --enable-nlopt</div>
+<div class="line">make</div>
+<div class="line">sudo make install</div>
+<div class="line">sudo ldconfig</div>
+</div><!-- fragment --><p><b>To enable programs <a class="el" href="pkann.html">pkann</a> and <a class="el" href="pkfsann.html">pkfsann</a></b></p>
+<p>Install package</p>
+<ul>
+<li>libfann-dev (see also <a href="http://leenissen.dk/fann/wp/download/">http://leenissen.dk/fann/wp/download/</a>)</li>
+</ul>
+<p>Example on how to install required packages in Debian based system (using apt-get):</p>
+<div class="fragment"><div class="line">sudo apt-<span class="keyword">get</span> install libfann-dev</div>
+</div><!-- fragment --><p>Install pktools with extra configuration option –libfann-dev:</p>
+<div class="fragment"><div class="line">./configure --enable-fann</div>
+<div class="line">make</div>
+<div class="line">sudo make install</div>
+<div class="line">sudo ldconfig</div>
+</div><!-- fragment --><p><b>To enable program <a class="el" href="pklas2img.html">pklas2img</a></b></p>
+<p>Install additional packages:</p>
+<ul>
+<li>libboost-dev (see also <a href="http://www.boost.org/">http://www.boost.org/</a>)</li>
+<li>liblas1 (from Mateusz Loskot, see also <a href="http://www.liblas.org/tutorial/cpp.html">http://www.liblas.org/tutorial/cpp.html</a>)</li>
+<li>liblas-dev</li>
+<li>python-liblas</li>
+<li>liblas2</li>
+<li>liblas-c2</li>
+<li>liblas-c-dev</li>
+</ul>
+<p>Example on how to install required packages in Debian based system (using apt-get):</p>
+<ul>
+<li>first add the following two lines to /etc/apt/sources.list (replace <codename> with what you get from lsb_release -c)</li>
+</ul>
+<div class="fragment"><div class="line">deb http:<span class="comment">//ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu <codename> main </span></div>
+<div class="line">deb-src http:<span class="comment">//ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu <codename> main </span></div>
+</div><!-- fragment --><ul>
+<li>then install extra packages:</li>
+</ul>
+<div class="fragment"><div class="line">sudo apt-<span class="keyword">get</span> install libboost-dev liblas-dev liblas-c-dev liblas1 liblas2 liblas-c2 python-liblas</div>
+</div><!-- fragment --><p>Or install manually as explained in <a href="http://www.liblas.org/compilation.html#using-unix-makefiles-on-linux">http://www.liblas.org/compilation.html#using-unix-makefiles-on-linux</a></p>
+<p>! Note that if you want support for compressed las format (LAZ), you need to install laszip first (<a href="http://www.laszip.org">http://www.laszip.org</a>) and install liblas manually</p>
+<ul>
+<li>Install pktools with with extra configuration option –enable-las:</li>
+</ul>
+<div class="fragment"><div class="line">./configure --enable-las</div>
+<div class="line">make</div>
+<div class="line">sudo make install</div>
+<div class="line">sudo ldconfig</div>
+</div><!-- fragment --> </div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_installation_windows.html b/doc/html/md_installation_windows.html
new file mode 100644
index 0000000..68dd581
--- /dev/null
+++ b/doc/html/md_installation_windows.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: installation_windows</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">installation_windows </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="installation_windows"></a>
+Installation on Windows machines</h1>
+<h2><a class="anchor" id="installation_windows_dependencies"></a>
+Dependencies: OSGeo4W</h2>
+<p>Download and install the <a href="http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe">32bit</a> or <a href="http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe">64bit</a> version of <a href="osgeo4w.osgeo.org">OSGeo4W</a>. The basic installation with GDAL contains all dependencies that are required for pktools.</p>
+<h2><a class="anchor" id="Installation_windows_pktools"></a>
+pktools</h2>
+<p>The latest version of pktools for Windows is available for <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest_win32.zip">32bit</a> and <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest_win64.zip">64bit</a> architectures from the <a href="http://download.savannah.gnu.org/releases/pktools">download</a> ftp server.</p>
+<p>Unzip the archives to your local hard drive.</p>
+<h2><a class="anchor" id="Installation_windows_cli"></a>
+Command line interface</h2>
+<p>The pktools utilities can be run from the command line using a command prompt window (from the Start button, click All Programs, Accessories, and then Command Prompt). First add the bin directory extracted from the pktools zip archive to the environment variable PATH (from the Start button, click on control panel, then System, Advanced system settings, select Environment Variables and edit PATH)</p>
+<h2><a class="anchor" id="Installation_windows_qgis"></a>
+QGIS plugin</h2>
+<p>A selection of the pktools utiltities can be run from within QGIS, via the Processing Toolbox. First install the pktools plugin via Plugins, Manage and Install Plugins...</p>
+<p>Currently, the pktools <a href="http://plugins.qgis.org/plugins/pktools/">plugin</a> is experimental, so do tick the experimental plugins under Settings. Then set the appropriate path of the pktools bin folder via Processing Options, Providers, pktools, pktools folder. Click OK and open the Processing Toolbox. The pktools utilities should appear when the Advanced interface is selected.</p>
+<h2><a class="anchor" id="Uninstall_windows"></a>
+Older versions of pktools</h2>
+<p>Please make sure the latest version of pktools is always installed. Changes with respect to the previous versions can be checked in the text file <a href="http://git.savannah.gnu.org/cgit/pktools.git/tree/ChangeLog">Changelog</a>. Older versions of pktools were installed with a setup exe file. They should be uninstalled first via Programs and Features in Control Panel. </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/md_mainpage.html b/doc/html/md_mainpage.html
new file mode 100644
index 0000000..d610bbc
--- /dev/null
+++ b/doc/html/md_mainpage.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: mainpage</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainpage </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"></div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/myfann__cpp_8h_source.html b/doc/html/myfann__cpp_8h_source.html
new file mode 100644
index 0000000..605f9d2
--- /dev/null
+++ b/doc/html/myfann__cpp_8h_source.html
@@ -0,0 +1,4061 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/myfann_cpp.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">myfann_cpp.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef FANN_CPP_H_INCLUDED</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"></span><span class="preprocessor">#define FANN_CPP_H_INCLUDED</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Fast Artificial Neural Network (fann) C++ Wrapper</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Copyright (C) 2004-2006 created by freegoldbar (at) yahoo dot com</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This wrapper is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * This wrapper is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Title: FANN Wrapper for C++</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * Overview:</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * The Fann Wrapper for C++ provides two classes: <neural_net></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * and <training_data>. To use the wrapper include</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * doublefann.h, floatfann.h or fixedfann.h before the</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * fann_cpp.h header file. To get started see xor_sample.cpp</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> * in the examples directory. The license is LGPL. Copyright (C)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> * 2004-2006 created by <freegoldbar at yahoo.com>.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"> * Note: Notes and differences from C API</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"> * - The Fann Wrapper for C++ is a minimal wrapper without use of</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment"> * templates or exception handling for efficient use in any environment.</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> * Benefits include stricter type checking, simpler memory</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> * management and possibly code completion in program editor.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> * - Method names are the same as the function names in the C</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> * API except the fann_ prefix has been removed. Enums in the</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> * namespace are similarly defined without the FANN_ prefix.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> * - The arguments to the methods are the same as the C API</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * except that the struct fann *ann/struct fann_train_data *data</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> * arguments are encapsulated so they are not present in the</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * method signatures or are translated into class references.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> * - The various create methods return a boolean set to true to</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> * indicate that the neural network was created, false otherwise.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> * The same goes for the read_train_from_file method.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> * - The neural network and training data is automatically cleaned</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> * up in the destructors and create/read methods.</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> * - To make the destructors virtual define USE_VIRTUAL_DESTRUCTOR</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> * before including the header file.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"> * - Additional methods are available on the training_data class to</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> * give access to the underlying training data. They are get_input,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> * get_output and set_train_data. Finally fann_duplicate_train_data</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> * has been replaced by a copy constructor.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> * Note: Changes</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> * Version 2.1.0:</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> * - General update to fann C library 2.1.0 with support for new functionality</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"> * - Due to changes in the C API the C++ API is not fully backward compatible:</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"> * The create methods have changed names and parameters.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> * The training callback function has different parameters and a set_callback.</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> * Some <training_data> methods have updated names.</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> * Get activation function and steepness is available for neurons, not layers.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> * - Extensions are now part of fann so there is no fann_extensions.h</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> * Version 1.2.0:</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> * - Changed char pointers to const std::string references</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> * - Added const_casts where the C API required it</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> * - Initialized enums from the C enums instead of numeric constants</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> * - Added a method set_train_data that copies and allocates training</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> * - data in a way that is compatible with the way the C API deallocates</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> * - the data thus making it possible to change training data.</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> * - The get_rprop_increase_factor method did not return its value</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> * Version 1.0.0:</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> * - Initial version</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#include <stdarg.h></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#include <cassert></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">/* Namespace: FANN</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> The FANN namespace groups the C++ wrapper definitions */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">namespace </span>FANN</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">/* Enum: error_function_enum</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> Error function used during training.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> ERRORFUNC_LINEAR - Standard linear error function.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> ERRORFUNC_TANH - Tanh error function, usually better </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> but can require a lower learning rate. This error function agressively targets outputs that</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> differ much from the desired, while not targetting outputs that only differ a little that much.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> This activation function is not recommended for cascade training and incremental training.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> <neural_net::set_train_error_function>, <neural_net::get_train_error_function></span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">enum</span> error_function_enum {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> ERRORFUNC_LINEAR = FANN_ERRORFUNC_LINEAR,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> ERRORFUNC_TANH</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> };</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">/* Enum: stop_function_enum</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> Stop criteria used during training.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> STOPFUNC_MSE - Stop criteria is Mean Square Error (MSE) value.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> STOPFUNC_BIT - Stop criteria is number of bits that fail. The number of bits; means the</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> number of output neurons which differ more than the bit fail limit </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> (see <neural_net::get_bit_fail_limit>, <neural_net::set_bit_fail_limit>). </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> The bits are counted in all of the training data, so this number can be higher than</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> the number of training data.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"></span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"> <neural_net::set_train_stop_function>, <neural_net::get_train_stop_function></span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">enum</span> stop_function_enum</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> STOPFUNC_MSE = FANN_STOPFUNC_MSE,</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> STOPFUNC_BIT</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> };</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">/* Enum: training_algorithm_enum</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> The Training algorithms used when training on <training_data> with functions like</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> <neural_net::train_on_data> or <neural_net::train_on_file>. The incremental training</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> looks alters the weights after each time it is presented an input pattern, while batch</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> only alters the weights once after it has been presented to all the patterns.</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"></span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> TRAIN_INCREMENTAL - Standard backpropagation algorithm, where the weights are </span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> updated after each training pattern. This means that the weights are updated many </span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> times during a single epoch. For this reason some problems, will train very fast with </span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> this algorithm, while other more advanced problems will not train very well.</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> TRAIN_BATCH - Standard backpropagation algorithm, where the weights are updated after </span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> calculating the mean square error for the whole training set. This means that the weights </span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> are only updated once during a epoch. For this reason some problems, will train slower with </span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> this algorithm. But since the mean square error is calculated more correctly than in </span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> incremental training, some problems will reach a better solutions with this algorithm.</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> TRAIN_RPROP - A more advanced batch training algorithm which achieves good results </span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"> for many problems. The RPROP training algorithm is adaptive, and does therefore not </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> use the learning_rate. Some other parameters can however be set to change the way the </span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"> RPROP algorithm works, but it is only recommended for users with insight in how the RPROP </span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> training algorithm works. The RPROP training algorithm is described by </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"> [Riedmiller and Braun, 1993], but the actual learning algorithm used here is the </span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"> iRPROP- training algorithm which is described by [Igel and Husken, 2000] which </span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> is an variety of the standard RPROP training algorithm.</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> TRAIN_QUICKPROP - A more advanced batch training algorithm which achieves good results </span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> for many problems. The quickprop training algorithm uses the learning_rate parameter </span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment"> along with other more advanced parameters, but it is only recommended to change these </span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"> advanced parameters, for users with insight in how the quickprop training algorithm works.</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> The quickprop training algorithm is described by [Fahlman, 1988].</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> <neural_net::set_training_algorithm>, <neural_net::get_training_algorithm></span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">enum</span> training_algorithm_enum {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> TRAIN_INCREMENTAL = FANN_TRAIN_INCREMENTAL,</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> TRAIN_BATCH,</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> TRAIN_RPROP,</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> TRAIN_QUICKPROP</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> };</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">/* Enum: activation_function_enum</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment"> The activation functions used for the neurons during training. The activation functions</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> can either be defined for a group of neurons by <neural_net::set_activation_function_hidden></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment"> and <neural_net::set_activation_function_output> or it can be defined for a single neuron by</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> <neural_net::set_activation_function>.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"></span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> The steepness of an activation function is defined in the same way by </span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> <neural_net::set_activation_steepness_hidden>, <neural_net::set_activation_steepness_output></span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"> and <neural_net::set_activation_steepness>.</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> The functions are described with functions where:</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"> * x is the input to the activation function,</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"> * y is the output,</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> * s is the steepness and</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment"> * d is the derivation.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment"></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> FANN_LINEAR - Linear activation function. </span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> * span: -inf < y < inf</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> * y = x*s, d = 1*s</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"> * Can NOT be used in fixed point.</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"></span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"> FANN_THRESHOLD - Threshold activation function.</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> * x < 0 -> y = 0, x >= 0 -> y = 1</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> * Can NOT be used during training.</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"></span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> FANN_THRESHOLD_SYMMETRIC - Threshold activation function.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"> * x < 0 -> y = 0, x >= 0 -> y = 1</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> * Can NOT be used during training.</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"></span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> FANN_SIGMOID - Sigmoid activation function.</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> * One of the most used activation functions.</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> * span: 0 < y < 1</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment"> * y = 1/(1 + exp(-2*s*x))</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> * d = 2*s*y*(1 - y)</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"></span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> FANN_SIGMOID_STEPWISE - Stepwise linear approximation to sigmoid.</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * Faster than sigmoid but a bit less precise.</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment"> FANN_SIGMOID_SYMMETRIC - Symmetric sigmoid activation function, aka. tanh.</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> * One of the most used activation functions.</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> * span: -1 < y < 1</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * y = tanh(s*x) = 2/(1 + exp(-2*s*x)) - 1</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> * d = s*(1-(y*y))</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment"></span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"> FANN_SIGMOID_SYMMETRIC - Stepwise linear approximation to symmetric sigmoid.</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> * Faster than symmetric sigmoid but a bit less precise.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"></span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> FANN_GAUSSIAN - Gaussian activation function.</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> * 0 when x = -inf, 1 when x = 0 and 0 when x = inf</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> * span: 0 < y < 1</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> * y = exp(-x*s*x*s)</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"> * d = -2*x*s*y*s</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment"></span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment"> FANN_GAUSSIAN_SYMMETRIC - Symmetric gaussian activation function.</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment"> * -1 when x = -inf, 1 when x = 0 and 0 when x = inf</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment"> * span: -1 < y < 1</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment"> * y = exp(-x*s*x*s)*2-1</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment"> * d = -2*x*s*(y+1)*s</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment"> FANN_ELLIOT - Fast (sigmoid like) activation function defined by David Elliott</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment"> * span: 0 < y < 1</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment"> * y = ((x*s) / 2) / (1 + |x*s|) + 0.5</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment"> * d = s*1/(2*(1+|x*s|)*(1+|x*s|))</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment"> FANN_ELLIOT_SYMMETRIC - Fast (symmetric sigmoid like) activation function defined by David Elliott</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> * span: -1 < y < 1 </span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment"> * y = (x*s) / (1 + |x*s|)</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment"> * d = s*1/((1+|x*s|)*(1+|x*s|))</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"></span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment"> FANN_LINEAR_PIECE - Bounded linear activation function.</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment"> * span: 0 < y < 1</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment"> * y = x*s, d = 1*s</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment"> FANN_LINEAR_PIECE_SYMMETRIC - Bounded Linear activation function.</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment"> * span: -1 < y < 1</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"> * y = x*s, d = 1*s</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment"> FANN_SIN_SYMMETRIC - Periodical sinus activation function.</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"> * span: -1 <= y <= 1</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment"> * y = sin(x*s)</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"> * d = s*cos(x*s)</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment"> FANN_COS_SYMMETRIC - Periodical cosinus activation function.</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment"> * span: -1 <= y <= 1</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment"> * y = cos(x*s)</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment"> * d = s*-sin(x*s)</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment"> <neural_net::set_activation_function_hidden>,</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment"> <neural_net::set_activation_function_output></span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">enum</span> activation_function_enum {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> LINEAR = FANN_LINEAR,</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> THRESHOLD,</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> THRESHOLD_SYMMETRIC,</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> SIGMOID,</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> SIGMOID_STEPWISE,</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> SIGMOID_SYMMETRIC,</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> SIGMOID_SYMMETRIC_STEPWISE,</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> GAUSSIAN,</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> GAUSSIAN_SYMMETRIC,</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> GAUSSIAN_STEPWISE,</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> ELLIOT,</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> ELLIOT_SYMMETRIC,</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> LINEAR_PIECE,</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> LINEAR_PIECE_SYMMETRIC,</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> SIN_SYMMETRIC,</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> COS_SYMMETRIC</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> };</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">/* Enum: network_type_enum</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment"></span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment"> Definition of network types used by <neural_net::get_network_type></span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"></span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment"> LAYER - Each layer only has connections to the next layer</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment"> SHORTCUT - Each layer has connections to all following layers</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"> See Also:</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment"> <neural_net::get_network_type>, <fann_get_network_type></span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"></span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"> This enumeration appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">enum</span> network_type_enum</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> LAYER = FANN_NETTYPE_LAYER,</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> SHORTCUT</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> };</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">/* Type: connection</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment"></span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment"> Describes a connection between two neurons and its weight</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment"></span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment"> from_neuron - Unique number used to identify source neuron</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment"> to_neuron - Unique number used to identify destination neuron</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment"> weight - The numerical value of the weight</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment"></span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment"> See Also:</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> <neural_net::get_connection_array>, <neural_net::set_weight_array></span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"></span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment"> This structure appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>fann_connection connection;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/* Forward declaration of class neural_net and training_data */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keyword">class </span>neural_net;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">class </span>training_data;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">/* Type: callback_type</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment"> This callback function can be called during training when using <neural_net::train_on_data>, </span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment"> <neural_net::train_on_file> or <neural_net::cascadetrain_on_data>.</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment"> >typedef int (*callback_type) (neural_net &net, training_data &train,</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment"> > unsigned int max_epochs, unsigned int epochs_between_reports,</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment"> > float desired_error, unsigned int epochs, void *user_data);</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment"> The callback can be set by using <neural_net::set_callback> and is very usefull for doing custom </span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment"> things during training. It is recommended to use this function when implementing custom </span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment"> training procedures, or when visualizing the training in a GUI etc. The parameters which the</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment"> callback function takes is the parameters given to the <neural_net::train_on_data>, plus an epochs</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment"> parameter which tells how many epochs the training have taken so far.</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> The callback function should return an integer, if the callback function returns -1, the training</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment"> will terminate.</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment"> Example of a callback function that prints information to cout:</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"> >int print_callback(FANN::neural_net &net, FANN::training_data &train,</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment"> > unsigned int max_epochs, unsigned int epochs_between_reports,</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"> > float desired_error, unsigned int epochs, void *user_data)</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"> >{</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment"> > cout << "Epochs " << setw(8) << epochs << ". "</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment"> > << "Current Error: " << left << net.get_MSE() << right << endl;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment"> > return 0;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment"> >}</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment"> <neural_net::set_callback>, <fann_callback_type></span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">typedef</span> int (*callback_type) (neural_net &net, training_data &train,</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports,</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">float</span> desired_error, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs, <span class="keywordtype">void</span> *user_data);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">/*************************************************************************/</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">/* Class: training_data</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment"></span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment"> Encapsulation of a training data set <struct fann_train_data> and</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment"> associated C API functions.</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classFANN_1_1training__data.html"> 362</a></span> <span class="keyword">class </span><a class="code" href="classFANN_1_1training__data.html">training_data</a></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> {</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">/* Constructor: training_data</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"> Default constructor creates an empty neural net.</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment"> Use <read_train_from_file>, <set_train_data> or <create_train_from_callback> to initialize.</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a>() : train_data(NULL)</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> {</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">/* Constructor: training_data</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment"> Copy constructor constructs a copy of the training data.</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment"> Corresponds to the C API <fann_duplicate_train_data> function.</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a>(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> destroy_train();</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">if</span> (data.train_data != NULL)</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> {</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> train_data = fann_duplicate_train_data(data.train_data);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">/* Destructor: ~training_data</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"></span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> Provides automatic cleanup of data.</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"> Define USE_VIRTUAL_DESTRUCTOR if you need the destructor to be virtual.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"></span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"> <destroy></span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor">#ifdef USE_VIRTUAL_DESTRUCTOR</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"></span> <span class="keyword">virtual</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"></span> ~<a class="code" href="classFANN_1_1training__data.html">training_data</a>()</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> destroy_train();</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">/* Method: destroy</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment"> Destructs the training data. Called automatically by the destructor.</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"></span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> <~training_data></span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">void</span> destroy_train()</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> {</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> fann_destroy_train(train_data);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> train_data = NULL;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">/* Method: read_train_from_file</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="comment"> Reads a file that stores training data.</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment"> The file must be formatted like:</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment"> >num_train_data num_input num_output</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="comment"> >inputdata seperated by space</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment"> >outputdata seperated by space</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment"> ></span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment"> >.</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment"> >.</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment"> >.</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment"> ></span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment"> >inputdata seperated by space</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment"> >outputdata seperated by space</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment"> <neural_net::train_on_data>, <save_train>, <fann_read_train_from_file></span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment"></span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment"> This function appears in FANN >= 1.0.0</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">bool</span> read_train_from_file(<span class="keyword">const</span> std::string &filename)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> {</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> destroy_train();</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> train_data = fann_read_train_from_file(filename.c_str());</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">return</span> (train_data != NULL);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> }</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">/* Method: save_train</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment"> Save the training structure to a file, with the format as specified in <read_train_from_file></span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment"></span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment"> Return:</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment"> The function returns true on success and false on failure.</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="comment"> <read_train_from_file>, <save_train_to_fixed>, <fann_save_train></span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordtype">bool</span> save_train(<span class="keyword">const</span> std::string &filename)</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> {</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> }</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span> (fann_save_train(train_data, filename.c_str()) == -1)</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> {</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">/* Method: save_train_to_fixed</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment"> Saves the training structure to a fixed point data file.</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment"> This function is very usefull for testing the quality of a fixed point network.</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment"> Return:</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment"> The function returns true on success and false on failure.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment"> <save_train>, <fann_save_train_to_fixed></span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment"></span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordtype">bool</span> save_train_to_fixed(<span class="keyword">const</span> std::string &filename, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> decimal_point)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span> (fann_save_train_to_fixed(train_data, filename.c_str(), decimal_point) == -1)</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> {</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment">/* Method: shuffle_train_data</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment"> Shuffles training data, randomizing the order. </span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment"> This is recommended for incremental training, while it have no influence during batch training.</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment"> This function appears in FANN >= 1.1.0.</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">void</span> shuffle_train_data()</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> {</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> {</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> fann_shuffle_train_data(train_data);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">/* Method: merge_train_data</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment"> Merges the data into the data contained in the <training_data>.</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="comment"> This function appears in FANN >= 1.1.0.</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordtype">void</span> merge_train_data(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> fann_train_data *new_data = fann_merge_train_data(train_data, data.train_data);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span> (new_data != NULL)</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> {</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> destroy_train();</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> train_data = new_data;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> }</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="comment">/* Method: length_train_data</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment"> Returns the number of training patterns in the <training_data>.</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="comment"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment"> <num_input_train_data>, <num_output_train_data>, <fann_length_train_data></span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment"></span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length_train_data()</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> {</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> {</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">return</span> fann_length_train_data(train_data);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> }</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> }</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">/* Method: num_input_train_data</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment"></span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment"> Returns the number of inputs in each of the training patterns in the <training_data>.</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment"> <num_output_train_data>, <length_train_data>, <fann_num_input_train_data></span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment"></span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input_train_data()</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> {</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> {</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> {</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">return</span> fann_num_input_train_data(train_data);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">/* Method: num_output_train_data</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment"> Returns the number of outputs in each of the training patterns in the <struct fann_train_data>.</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment"> <num_input_train_data>, <length_train_data>, <fann_num_output_train_data></span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="comment"></span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output_train_data()</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> {</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> {</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">return</span> fann_num_output_train_data(train_data);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> }</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment">/* Grant access to the encapsulated data since many situations</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment"> and applications creates the data from sources other than files</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment"> or uses the training data for testing and related functions */</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment">/* Method: get_input</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment"> A pointer to the array of input training data</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment"></span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment"> <get_output>, <set_train_data></span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> fann_type **get_input()</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> {</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">return</span> train_data->input;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> }</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment">/* Method: get_output</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"> A pointer to the array of output training data</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment"></span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment"> <get_input>, <set_train_data></span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> fann_type **get_output()</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> {</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span> (train_data == NULL)</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> {</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> {</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">return</span> train_data->output;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> }</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment">/* Method: set_train_data</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"> Set the training data to the input and output data provided.</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment"></span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment"> A copy of the data is made so there are no restrictions on the</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment"> allocation of the input/output data and the caller is responsible</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> for the deallocation of the data pointed to by input and output.</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"></span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment"> num_data - The number of training data</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment"> num_input - The number of inputs per training data</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="comment"> num_output - The number of outputs per training data</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment"> input - The set of inputs (a pointer to an array of pointers to arrays of floating point data)</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment"> output - The set of desired outputs (a pointer to an array of pointers to arrays of floating point data)</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment"></span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment"> <get_input>, <get_output></span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">void</span> set_train_data(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data,</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input, fann_type **input,</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output, fann_type **output)</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> {</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment">// Uses the allocation method used in fann</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keyword">struct </span>fann_train_data *data =</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> (<span class="keyword">struct </span>fann_train_data *)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> fann_train_data));</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> data->input = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> data->output = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> data->num_data = num_data;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> data->num_input = num_input;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> data->num_output = num_output;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> fann_type *data_input = (fann_type *)calloc(num_input*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> fann_type *data_output = (fann_type *)calloc(num_output*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_data; ++i)</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> {</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> data->input[i] = data_input;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> data_input += num_input;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < num_input; ++j)</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> {</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> data->input[i][j] = input[i][j];</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> data->output[i] = data_output;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> data_output += num_output;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < num_output; ++j)</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> {</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> data->output[i][j] = output[i][j];</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> set_train_data(data);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordtype">void</span> set_train_data(<span class="keyword">const</span> std::vector< std::vector<fann_type> >& input,</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keyword">const</span> std::vector< std::vector<fann_type> >& output)</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> {</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data=input.size();</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> assert(num_data);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> assert(input.size()==output.size());</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input=input[0].size();</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output=output[0].size();</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="comment">// Uses the allocation method used in fann</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keyword">struct </span>fann_train_data *data =</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> (<span class="keyword">struct </span>fann_train_data *)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> fann_train_data));</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> data->input = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> data->output = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> data->num_data = num_data;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> data->num_input = num_input;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> data->num_output = num_output;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> fann_type *data_input = (fann_type *)calloc(num_input*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> fann_type *data_output = (fann_type *)calloc(num_output*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < num_data; ++i)</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> {</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> data->input[i] = data_input;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> data_input += num_input;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < num_input; ++j)</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> {</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> data->input[i][j] = input[i][j];</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> }</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> data->output[i] = data_output;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> data_output += num_output;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < num_output; ++j)</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> {</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> data->output[i][j] = output[i][j];</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> set_train_data(data);</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordtype">void</span> set_train_data(<span class="keyword">const</span> std::vector< std::vector< std::vector<fann_type> > >& input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data)</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> assert(num_data);</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> assert(input.size());</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_class=input.size();</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> assert(input[0].size());</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input=input[0][0].size();</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output=num_class;</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="comment">// unsigned int num_output=1;</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="comment">// Uses the allocation method used in fann</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keyword">struct </span>fann_train_data *data =</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> (<span class="keyword">struct </span>fann_train_data *)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> fann_train_data));</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> data->input = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> data->output = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> data->num_data = num_data;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> data->num_input = num_input;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> data->num_output = num_output;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> fann_type *data_input = (fann_type *)calloc(num_input*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> fann_type *data_output = (fann_type *)calloc(num_output*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<num_class;++iclass){</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> csample=0;csample<input[iclass].size();++csample){</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> data->input[isample] = data_input;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> data_input += num_input;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input[iclass][csample].size();++iband){</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> assert(input[iclass][csample].size()==num_input);</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> data->input[isample][iband] = input[iclass][csample][iband];</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> }</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> data->output[isample] = data_output;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> data_output += num_output;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<num_output;++ic){</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="comment">//for single neuron output:</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// data->output[isample][ic]=2.0/(num_class-1)*(iclass-(num_class-1)/2.0);</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">if</span>(ic==iclass)</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> data->output[isample][ic] = 1;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> data->output[isample][ic] = -1;</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> ++isample;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> }</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> }</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> set_train_data(data);</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> }</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordtype">void</span> set_train_data(<span class="keyword">const</span> std::vector< <a class="code" href="classVector2d.html">Vector2d<fann_type></a> >& input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data)</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> {</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> assert(num_data);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> assert(input.size());</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_class=input.size();</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> assert(input[0].size());</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input=input[0][0].size();</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output=num_class;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="comment">// unsigned int num_output=1;</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="comment">// Uses the allocation method used in fann</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keyword">struct </span>fann_train_data *data =</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> (<span class="keyword">struct </span>fann_train_data *)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> fann_train_data));</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> data->input = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> data->output = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> data->num_data = num_data;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> data->num_input = num_input;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> data->num_output = num_output;</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> fann_type *data_input = (fann_type *)calloc(num_input*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> fann_type *data_output = (fann_type *)calloc(num_output*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<num_class;++iclass){</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> csample=0;csample<input[iclass].size();++csample){</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> data->input[isample] = data_input;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> data_input += num_input;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input[iclass][csample].size();++iband){</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> assert(input[iclass][csample].size()==num_input);</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> data->input[isample][iband] = input[iclass][csample][iband];</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> data->output[isample] = data_output;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> data_output += num_output;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<num_output;++ic){</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="comment">//for single neuron output:</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment">// data->output[isample][ic]=2.0/(num_class-1)*(iclass-(num_class-1)/2.0);</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span>(ic==iclass)</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> data->output[isample][ic] = 1;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> data->output[isample][ic] = -1;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> ++isample;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> set_train_data(data);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> }</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="comment">/* Set the training data to the struct fann_training_data pointer.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="comment"> The struct has to be allocated with malloc to be compatible</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="comment"> with fann_destroy. */</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordtype">void</span> set_train_data(<span class="keyword">struct</span> fann_train_data *data)</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> {</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> destroy_train();</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> train_data = data;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="comment">/* Method: create_train_from_callback</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="comment"> Creates the training data struct from a user supplied function.</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="comment"> As the training data are numerable (data 1, data 2...), the user must write</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment"> a function that receives the number of the training data set (input,output)</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="comment"> and returns the set.</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment"></span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="comment"> num_data - The number of training data</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment"> num_input - The number of inputs per training data</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="comment"> num_output - The number of outputs per training data</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="comment"> user_function - The user suplied function</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment"></span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="comment"> Parameters for the user function:</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="comment"> num - The number of the training data set</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment"> num_input - The number of inputs per training data</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="comment"> num_output - The number of outputs per training data</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="comment"> input - The set of inputs</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment"> output - The set of desired outputs</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment"> <training_data::read_train_from_file>, <neural_net::train_on_data>,</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="comment"> <fann_create_train_from_callback></span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment"></span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordtype">void</span> create_train_from_callback(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data,</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input,</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output,</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordtype">void</span> (FANN_API *user_function)( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> fann_type * ,</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> fann_type * ))</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> {</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> destroy_train();</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> train_data = fann_create_train_from_callback(num_data, num_input, num_output, user_function);</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> }</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="comment">/* Method: scale_input_train_data</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="comment"> Scales the inputs in the training data to the specified range.</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="comment"></span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment"> <scale_output_train_data>, <scale_train_data>, <fann_scale_input_train_data></span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment"></span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordtype">void</span> scale_input_train_data(fann_type new_min, fann_type new_max)</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> {</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> {</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> fann_scale_input_train_data(train_data, new_min, new_max);</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="comment">/* Method: scale_output_train_data</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment"> Scales the outputs in the training data to the specified range.</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment"></span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment"> <scale_input_train_data>, <scale_train_data>, <fann_scale_output_train_data></span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="comment"></span></div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordtype">void</span> scale_output_train_data(fann_type new_min, fann_type new_max)</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> {</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> {</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> fann_scale_output_train_data(train_data, new_min, new_max);</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> }</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> }</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment">/* Method: scale_train_data</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment"> Scales the inputs and outputs in the training data to the specified range.</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment"> <scale_output_train_data>, <scale_input_train_data>, <fann_scale_train_data></span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment"></span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordtype">void</span> scale_train_data(fann_type new_min, fann_type new_max)</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> {</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> {</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> fann_scale_train_data(train_data, new_min, new_max);</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> }</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="comment">/* Method: subset_train_data</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="comment"> Changes the training data to a subset, starting at position *pos* </span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment"> and *length* elements forward. Use the copy constructor to work</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment"> on a new copy of the training data.</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment"> >FANN::training_data full_data_set;</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment"> >full_data_set.read_train_from_file("somefile.train");</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment"> >FANN::training_data *small_data_set = new FANN::training_data(full_data_set);</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment"> >small_data_set->subset_train_data(0, 2); // Only use first two</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment"> >// Use small_data_set ...</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment"> >delete small_data_set;</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment"></span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment"> <fann_subset_train_data></span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment"></span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="keywordtype">void</span> subset_train_data(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> {</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordflow">if</span> (train_data != NULL)</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> {</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="keyword">struct </span>fann_train_data *temp = fann_subset_train_data(train_data, pos, length);</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> destroy_train();</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> train_data = temp;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> }</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment">/* The neural_net class has direct access to the training data */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classFANN_1_1neural__net.html">neural_net</a>;</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> </div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="comment">/* Pointer to the encapsulated training data */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keyword">struct </span>fann_train_data* train_data;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> };</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment">/*************************************************************************/</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="comment">/* Class: neural_net</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment"></span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment"> Encapsulation of a neural network <struct fann> and</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment"> associated C API functions.</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"><a class="line" href="classFANN_1_1neural__net.html"> 978</a></span> <span class="keyword">class </span><a class="code" href="classFANN_1_1neural__net.html">neural_net</a></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> {</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment">/* Constructor: neural_net</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment"> Default constructor creates an empty neural net.</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment"> Use one of the create functions to create the neural network.</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="comment"></span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment"> <create_standard>, <create_sparse>, <create_shortcut>,</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment"> <create_standard_array>, <create_sparse_array>, <create_shortcut_array></span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <a class="code" href="classFANN_1_1neural__net.html">neural_net</a>() : ann(NULL)</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> {</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> }</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment">/* Destructor: ~neural_net</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment"></span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment"> Provides automatic cleanup of data.</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment"> Define USE_VIRTUAL_DESTRUCTOR if you need the destructor to be virtual.</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment"></span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment"> <destroy></span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="preprocessor">#ifdef USE_VIRTUAL_DESTRUCTOR</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="preprocessor"></span> <span class="keyword">virtual</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="preprocessor"></span> ~<a class="code" href="classFANN_1_1neural__net.html">neural_net</a>()</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> {</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> destroy();</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment">/* Method: destroy</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment"> Destructs the entire network. Called automatically by the destructor.</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment"></span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment"> <~neural_net></span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="keywordtype">void</span> destroy()</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> {</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> user_context *user_data = <span class="keyword">static_cast<</span>user_context *<span class="keyword">></span>(fann_get_user_data(ann));</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">if</span> (user_data != NULL)</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keyword">delete</span> user_data;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> fann_destroy(ann);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> ann = NULL;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="comment">/* Method: create_standard</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment"> Creates a standard fully connected backpropagation neural network.</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment"></span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment"> There will be a bias neuron in each layer (except the output layer),</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment"> and this bias neuron will be connected to all neurons in the next layer.</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment"> When running the network, the bias nodes always emits 1.</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment"> num_layers - The total number of layers including the input and the output layer.</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="comment"> ... - Integer values determining the number of neurons in each layer starting with the </span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment"> input layer and ending with the output layer.</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment"> Boolean true if the network was created, false otherwise.</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment"></span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment"> Example:</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment"> >const unsigned int num_layers = 3;</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment"> >const unsigned int num_input = 2;</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment"> >const unsigned int num_hidden = 3;</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment"> >const unsigned int num_output = 1;</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment"> ></span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment"> >FANN::neural_net net;</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment"> >net.create_standard(num_layers, num_input, num_hidden, num_output);</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="comment"></span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="comment"> <create_standard_array>, <create_sparse>, <create_shortcut>,</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment"> <fann_create_standard_array></span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment"></span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordtype">bool</span> create_standard(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers, ...)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> va_list layers;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> std::vector<unsigned int> arr(num_layers);<span class="comment">//pk</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">//unsigned int arr[num_layers];</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> va_start(layers, num_layers);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">/* bool status = create_standard_array(num_layers, */</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">/* reinterpret_cast<const unsigned int *>(layers)); */</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ii = 0; ii < num_layers; ii++)</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> arr[ii] = va_arg(layers, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordtype">bool</span> status = create_standard_array(num_layers, &(arr[0]));<span class="comment">//pk</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment">//bool status = create_standard_array(num_layers, arr);</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> va_end(layers);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> }</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment">/* Method: create_standard_array</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment"></span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="comment"> Just like <create_standard>, but with an array of layer sizes</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment"> instead of individual parameters.</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment"></span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment"> <create_standard>, <create_sparse>, <create_shortcut>,</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment"> <fann_create_standard></span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"></span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordtype">bool</span> create_standard_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * layers)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> {</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> destroy();</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> ann = fann_create_standard_array(num_layers, layers);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">return</span> (ann != NULL);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> }</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment">/* Method: create_sparse</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment"></span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment"> Creates a standard backpropagation neural network, which is not fully connected.</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment"></span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="comment"> connection_rate - The connection rate controls how many connections there will be in the</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="comment"> network. If the connection rate is set to 1, the network will be fully</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="comment"> connected, but if it is set to 0.5 only half of the connections will be set.</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="comment"> A connection rate of 1 will yield the same result as <fann_create_standard></span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="comment"> num_layers - The total number of layers including the input and the output layer.</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment"> ... - Integer values determining the number of neurons in each layer starting with the </span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="comment"> input layer and ending with the output layer.</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment"> Boolean true if the network was created, false otherwise.</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="comment"></span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment"> <create_standard>, <create_sparse_array>, <create_shortcut>,</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment"> <fann_create_sparse></span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="comment"></span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordtype">bool</span> create_sparse(<span class="keywordtype">float</span> connection_rate, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers, ...)</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> {</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> va_list layers;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> std::vector<unsigned int> arr(num_layers);<span class="comment">//pk</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">//unsigned int arr[num_layers];</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> va_start(layers, num_layers);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment">/* bool status = create_sparse_array(connection_rate, num_layers, */</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">/* reinterpret_cast<const unsigned int *>(layers)); */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ii = 0; ii < num_layers; ii++)</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> arr[ii] = va_arg(layers, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="keywordtype">bool</span> status = create_sparse_array(connection_rate, num_layers, &(arr[0]));<span class="comment">//pk</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="comment">//bool status = create_sparse_array(connection_rate, num_layers, arr);</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> va_end(layers);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment">/* Method: create_sparse_array</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment"> Just like <create_sparse>, but with an array of layer sizes</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment"> instead of individual parameters.</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment"></span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment"> See <create_sparse> for a description of the parameters.</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment"></span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment"> <create_standard>, <create_sparse>, <create_shortcut>,</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment"> <fann_create_sparse_array></span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment"></span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keywordtype">bool</span> create_sparse_array(<span class="keywordtype">float</span> connection_rate,</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * layers)</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> {</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> destroy();</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> ann = fann_create_sparse_array(connection_rate, num_layers, layers);</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="keywordflow">return</span> (ann != NULL);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> }</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">/* Method: create_shortcut</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="comment"></span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment"> Creates a standard backpropagation neural network, which is not fully connected and which</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment"> also has shortcut connections.</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment"></span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="comment"> Shortcut connections are connections that skip layers. A fully connected network with shortcut </span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment"> connections, is a network where all neurons are connected to all neurons in later layers. </span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="comment"> Including direct connections from the input layer to the output layer.</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="comment"></span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="comment"> See <create_standard> for a description of the parameters.</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="comment"></span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="comment"> <create_standard>, <create_sparse>, <create_shortcut_array>,</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="comment"> <fann_create_shortcut></span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment"></span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordtype">bool</span> create_shortcut(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers, ...)</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> {</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> va_list layers;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> std::vector<unsigned int> arr(num_layers);<span class="comment">//pk</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="comment">//unsigned int arr[num_layers];</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> va_start(layers, num_layers);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">/* bool status = create_shortcut_array(num_layers, */</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">/* reinterpret_cast<const unsigned int *>(layers)); */</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ii = 0; ii < num_layers; ii++)</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> arr[ii] = va_arg(layers, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordtype">bool</span> status = create_shortcut_array(num_layers, &(arr[0]));<span class="comment">//</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">//bool status = create_shortcut_array(num_layers, arr);</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> va_end(layers);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment">/* Method: create_shortcut_array</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="comment"></span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="comment"> Just like <create_shortcut>, but with an array of layer sizes</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment"> instead of individual parameters.</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="comment"></span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="comment"> See <create_standard_array> for a description of the parameters.</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="comment"></span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment"> <create_standard>, <create_sparse>, <create_shortcut>,</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment"> <fann_create_shortcut_array></span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment"></span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordtype">bool</span> create_shortcut_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers,</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * layers)</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> {</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> destroy();</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> ann = fann_create_shortcut_array(num_layers, layers);</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">return</span> (ann != NULL);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> }</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">/* Method: run</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="comment"></span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment"> Will run input through the neural network, returning an array of outputs, the number of which being </span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment"> equal to the number of neurons in the output layer.</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="comment"></span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment"> <test>, <fann_run></span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment"></span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> fann_type* run(fann_type *input)</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> {</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> }</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="comment">// for(int iband=0;iband<get_num_input();++iband)</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">// std::cout << (input)[iband] << " ";</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">// std::cout << std::endl;</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="keywordflow">return</span> fann_run(ann, input);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> std::vector<fann_type> run(std::vector<fann_type> input)</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> std::vector<fann_type> vresult;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="keywordflow">return</span> vresult;</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> }</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> vresult.resize(get_num_output());</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> fann_type* result;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> result=fann_run(ann,&(input[0]));</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iout=0;iout<get_num_output();++iout)</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> vresult[iout]=*(result++);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">return</span> vresult;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> }</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">/* Method: randomize_weights</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment"></span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment"> Give each connection a random weight between *min_weight* and *max_weight*</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment"> From the beginning the weights are random between -0.1 and 0.1.</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment"></span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="comment"> <init_weights>, <fann_randomize_weights></span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="comment"></span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordtype">void</span> randomize_weights(fann_type min_weight, fann_type max_weight)</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> {</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> fann_randomize_weights(ann, min_weight, max_weight);</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> }</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment">/* Method: init_weights</span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment"></span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment"> Initialize the weights using Widrow + Nguyen's algorithm.</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment"> This function behaves similarly to fann_randomize_weights. It will use the algorithm developed </span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment"> by Derrick Nguyen and Bernard Widrow to set the weights in such a way </span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="comment"> as to speed up training. This technique is not always successful, and in some cases can be less </span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="comment"> efficient than a purely random initialization.</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment"></span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment"> The algorithm requires access to the range of the input data (ie, largest and smallest input), </span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment"> and therefore accepts a second argument, data, which is the training data that will be used to </span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="comment"> train the network.</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment"></span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment"> <randomize_weights>, <training_data::read_train_from_file>,</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="comment"> <fann_init_weights></span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment"></span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment"> This function appears in FANN >= 1.1.0.</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordtype">void</span> init_weights(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> {</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordflow">if</span> ((ann != NULL) && (data.train_data != NULL))</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> {</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> fann_init_weights(ann, data.train_data);</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> }</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">/* Method: print_connections</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"></span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"> Will print the connections of the ann in a compact matrix, for easy viewing of the internals </span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment"> of the ann.</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"></span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment"> The output from fann_print_connections on a small (2 2 1) network trained on the xor problem</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"> >Layer / Neuron 012345</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment"> >L 1 / N 3 BBa...</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment"> >L 1 / N 4 BBA...</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment"> >L 1 / N 5 ......</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment"> >L 2 / N 6 ...BBA</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment"> >L 2 / N 7 ......</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment"> This network have five real neurons and two bias neurons. This gives a total of seven neurons </span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment"> named from 0 to 6. The connections between these neurons can be seen in the matrix. "." is a </span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment"> place where there is no connection, while a character tells how strong the connection is on a </span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment"> scale from a-z. The two real neurons in the hidden layer (neuron 3 and 4 in layer 1) has </span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment"> connection from the three neurons in the previous layer as is visible in the first two lines. </span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"> The output neuron (6) has connections form the three neurons in the hidden layer 3 - 5 as is </span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment"> visible in the fourth line.</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment"></span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment"> To simplify the matrix output neurons is not visible as neurons that connections can come from, </span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment"> and input and bias neurons are not visible as neurons that connections can go to.</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="comment"></span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="keywordtype">void</span> print_connections()</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> {</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> {</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> fann_print_connections(ann);</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> }</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> }</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">/* Method: create_from_file</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment"> Constructs a backpropagation neural network from a configuration file,</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment"> which have been saved by <save>.</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment"> <save>, <save_to_fixed>, <fann_create_from_file></span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="keywordtype">bool</span> create_from_file(<span class="keyword">const</span> std::string &configuration_file)</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> {</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> destroy();</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> ann = fann_create_from_file(configuration_file.c_str());</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">return</span> (ann != NULL);</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">/* Method: save</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment"></span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment"> Save the entire network to a configuration file.</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="comment"> The configuration file contains all information about the neural network and enables </span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment"> <create_from_file> to create an exact copy of the neural network and all of the</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment"> parameters associated with the neural network.</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment"> These two parameters (<set_callback>, <set_error_log>) are *NOT* saved </span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment"> to the file because they cannot safely be ported to a different location. Also temporary</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment"> parameters generated during training like <get_MSE> is not saved.</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment"> Return:</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment"> The function returns 0 on success and -1 on failure.</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment"> <create_from_file>, <save_to_fixed>, <fann_save></span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment"></span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keywordtype">bool</span> save(<span class="keyword">const</span> std::string &configuration_file)</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> {</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> {</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="keywordflow">if</span> (fann_save(ann, configuration_file.c_str()) == -1)</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> {</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> }</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> </div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">/* Method: save_to_fixed</span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment"></span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment"> Saves the entire network to a configuration file.</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment"> But it is saved in fixed point format no matter which</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment"> format it is currently in.</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="comment"></span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment"> This is usefull for training a network in floating points,</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment"> and then later executing it in fixed point.</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment"></span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"> The function returns the bit position of the fix point, which</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment"> can be used to find out how accurate the fixed point network will be.</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment"> A high value indicates high precision, and a low value indicates low</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment"> precision.</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment"></span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="comment"> A negative value indicates very low precision, and a very</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="comment"> strong possibility for overflow.</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment"> (the actual fix point will be set to 0, since a negative</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="comment"> fix point does not make sence).</span></div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment"></span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="comment"> Generally, a fix point lower than 6 is bad, and should be avoided.</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="comment"> The best way to avoid this, is to have less connections to each neuron,</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment"> or just less neurons in each layer.</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment"></span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="comment"> The fixed point use of this network is only intended for use on machines that</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment"> have no floating point processor, like an iPAQ. On normal computers the floating</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"> point version is actually faster.</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"></span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="comment"> <create_from_file>, <save>, <fann_save_to_fixed></span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="comment"></span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="keywordtype">int</span> save_to_fixed(<span class="keyword">const</span> std::string &configuration_file)</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> {</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="keywordtype">int</span> fixpoint = 0;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> {</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> fixpoint = fann_save_to_fixed(ann, configuration_file.c_str());</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> }</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordflow">return</span> fixpoint;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> }</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="preprocessor">#ifndef FIXEDFANN</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="preprocessor"></span> <span class="comment">/* Method: train</span></div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="comment"></span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="comment"> Train one iteration with a set of inputs, and a set of desired outputs.</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment"> This training is always incremental training (see <FANN::training_algorithm_enum>),</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="comment"> since only one pattern is presented.</span></div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="comment"> ann - The neural network structure</span></div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment"> input - an array of inputs. This array must be exactly <fann_get_num_input> long.</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"> desired_output - an array of desired outputs. This array must be exactly <fann_get_num_output> long.</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment"> <train_on_data>, <train_epoch>, <fann_train></span></div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="keywordtype">void</span> train(fann_type *input, fann_type *desired_output)</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> {</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> {</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> fann_train(ann, input, desired_output);</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> }</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment">/* Method: train_epoch</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="comment"> Train one epoch with a set of training data.</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment"> Train one epoch with the training data stored in data. One epoch is where all of </span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="comment"> the training data is considered exactly once.</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment"></span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment"> This function returns the MSE error as it is calculated either before or during </span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment"> the actual training. This is not the actual MSE after the training epoch, but since </span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment"> calculating this will require to go through the entire training set once more, it is </span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment"> more than adequate to use this value during training.</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="comment"></span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment"> The training algorithm used by this function is chosen by the <fann_set_training_algorithm> </span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment"> function.</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment"> <train_on_data>, <test_data>, <fann_train_epoch></span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="keywordtype">float</span> train_epoch(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> {</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="keywordtype">float</span> mse = 0.0f;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="keywordflow">if</span> ((ann != NULL) && (data.train_data != NULL))</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> {</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> mse = fann_train_epoch(ann, data.train_data);</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> }</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="keywordflow">return</span> mse;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> }</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">/* Method: train_on_data</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="comment"></span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="comment"> Trains on an entire dataset, for a period of time. </span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment"> This training uses the training algorithm chosen by <set_training_algorithm>,</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="comment"> and the parameters set for these training algorithms.</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="comment"> ann - The neural network</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment"> data - The data, which should be used during training</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment"> max_epochs - The maximum number of epochs the training should continue</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"> epochs_between_reports - The number of epochs between printing a status report to stdout.</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment"> A value of zero means no reports should be printed.</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment"> desired_error - The desired <get_MSE> or <get_bit_fail>, depending on which stop function</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="comment"> is chosen by <set_train_stop_function>.</span></div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="comment"></span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="comment"> Instead of printing out reports every epochs_between_reports, a callback function can be called </span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment"> (see <set_callback>).</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment"> <train_on_file>, <train_epoch>, <fann_train_on_data></span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment"></span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="keywordtype">void</span> train_on_data(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports, <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> {</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="keywordflow">if</span> ((ann != NULL) && (data.train_data != NULL))</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> fann_train_on_data(ann, data.train_data, max_epochs,</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> }</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> </div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="keywordtype">void</span> train_on_data(<span class="keyword">const</span> std::vector< std::vector<fann_type> >& input,</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="keyword">const</span> std::vector< std::vector<fann_type> >& output,</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="keywordtype">bool</span> initWeights,</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports,</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> {</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="keywordflow">if</span> ((ann != NULL))</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> {</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> data;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> data.set_train_data(input,output);</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="keywordflow">if</span>(data.train_data != NULL){</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="keywordflow">if</span>(initWeights)</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> init_weights(data);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> fann_train_on_data(ann, data.train_data, max_epochs,</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> }</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> }</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> }</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="keywordtype">void</span> train_on_data(<span class="keyword">const</span> std::vector< <a class="code" href="classVector2d.html">Vector2d<fann_type></a> >& input,</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data,</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="keywordtype">bool</span> initWeights,</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports,</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> {</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="keywordflow">if</span> ((ann != NULL))</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> {</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> data;</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> data.set_train_data(input,num_data);</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="keywordflow">if</span>(data.train_data != NULL){</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordflow">if</span>(initWeights)</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> init_weights(data);</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> fann_train_on_data(ann, data.train_data, max_epochs,</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> }</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> }</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment">//cross validation for classification</span></div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="keywordtype">float</span> cross_validation(std::vector< <a class="code" href="classVector2d.html">Vector2d<fann_type></a> >& trainingFeatures,</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining,</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cv,</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordtype">float</span> desired_error,</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> std::vector<unsigned short>& referenceVector,</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> std::vector<unsigned short>& outputVector,</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="keywordtype">short</span> verbose=0)</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> {</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> referenceVector.clear();</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> outputVector.clear();</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> assert(cv<ntraining);</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <span class="keywordtype">float</span> rmse=0;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="keywordtype">int</span> nclass=trainingFeatures.size();</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> std::vector< Vector2d<float> > testFeatures(nclass);</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="keywordtype">int</span> testclass=0;<span class="comment">//class to leave out</span></div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="keywordtype">int</span> testsample=0;<span class="comment">//sample to leave out</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="keywordtype">int</span> nrun=(cv>1)? cv : ntraining;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <span class="keywordflow">if</span>(nrun>ntraining)</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> nrun=ntraining;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irun=0;irun<nrun;++irun){</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> std::cout << <span class="stringliteral">"run "</span> << irun << std::endl;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">//reset training sample from last run</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> std::cout << <span class="stringliteral">"reset training sample from last run"</span> << std::endl;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="keywordflow">while</span>(testFeatures[iclass].size()){</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> trainingFeatures[iclass].push_back(testFeatures[iclass].back());</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> testFeatures[iclass].pop_back();</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> }</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordflow">if</span>(verbose>1){</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> std::cout << <span class="stringliteral">"training size "</span> << iclass << <span class="stringliteral">": "</span> << trainingFeatures[iclass].size() << std::endl;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> std::cout << <span class="stringliteral">"test size "</span> << iclass << <span class="stringliteral">": "</span> << testFeatures[iclass].size() << std::endl;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> }</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> assert(trainingFeatures[iclass].size());</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> }</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment">//create test sample</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> std::cout << <span class="stringliteral">"create test sample"</span> << std::endl;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="keywordtype">int</span> ntest=(cv>1)? ntraining/cv : 1; <span class="comment">//n-fold cross validation or leave-one-out</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="keywordflow">while</span>(nsample<ntest){</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment">// if(index>=trainingFeatures[testclass].size()){</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">// index=0;</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> testFeatures[testclass].push_back(trainingFeatures[testclass][0]);</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> trainingFeatures[testclass].erase(trainingFeatures[testclass].begin());</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordflow">if</span>(!trainingFeatures[testclass].size())</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> std::cout << <span class="stringliteral">"Error: testclass "</span> << testclass << <span class="stringliteral">" has no training"</span> << std::endl;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> assert(trainingFeatures[testclass].size());</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> ++nsample;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="keywordflow">if</span>(static_cast<float>(trainingFeatures[testclass].size())/static_cast<float>(testFeatures[testclass].size())<=(cv-1)){</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="keywordflow">if</span>(verbose>1){</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> std::cout << <span class="stringliteral">"training size "</span> << testclass << <span class="stringliteral">": "</span> << trainingFeatures[testclass].size() << std::endl;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> std::cout << <span class="stringliteral">"test size "</span> << testclass << <span class="stringliteral">": "</span> << testFeatures[testclass].size() << std::endl;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> }</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> testclass=(testclass+1)%nclass;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> }</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> }</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> assert(nsample==ntest);</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="comment">//training with left out training set</span></div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> std::cout << std::endl << <span class="stringliteral">"Set training data"</span> << std::endl;</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordtype">bool</span> initWeights=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports=0;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> train_on_data(trainingFeatures,ntraining-ntest,initWeights, max_epochs,</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment">//cross validation with testFeatures</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> std::cout << std::endl << <span class="stringliteral">"Cross validation"</span> << std::endl;</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> </div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> std::vector<float> result(nclass);</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="keywordtype">int</span> maxClass=-1;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<testFeatures.size();++iclass){</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> assert(trainingFeatures[iclass].size());</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<testFeatures[iclass].size();++isample){</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> result=run(testFeatures[iclass][isample]);</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment">//search class with maximum posterior probability</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="keywordtype">float</span> maxP=-1;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<nclass;++ic){</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="keywordtype">float</span> pv=(result[ic]+1.0)/2.0;<span class="comment">//bring back to scale [0,1]</span></div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="keywordflow">if</span>(pv>maxP){</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> maxP=pv;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> maxClass=ic;</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> }</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> }</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> assert(maxP>=0);</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> referenceVector.push_back(iclass);</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> outputVector.push_back(maxClass);</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> }</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> }</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="comment">// rmse+=test_data(testFeatures,ntest);</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">// if(verbose>1)</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment">// std::cout << std::endl << "rmse: " << rmse << std::endl;</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> }</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">// rmse/=nrun;</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment">//reset from very last run</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="keywordflow">while</span>(testFeatures[iclass].size()){</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> trainingFeatures[iclass].push_back(testFeatures[iclass].back());</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> testFeatures[iclass].pop_back();</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> }</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> }</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="comment">// return(rmse);</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> }</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> </div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment">//cross validation for regresssion</span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="keywordtype">float</span> cross_validation(std::vector< std::vector<fann_type> >& input,</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> std::vector< std::vector<fann_type> >& output,</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cv,</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="keywordtype">float</span> desired_error,</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> std::vector< std::vector<fann_type> >& referenceVector,</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> std::vector< std::vector<fann_type> >& outputVector,</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="keywordtype">short</span> verbose=0)</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> {</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> assert(input.size());</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> assert(output.size()==input.size());</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining=input.size();</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> noutput=output[0].size();</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> referenceVector.clear();</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> outputVector.clear();</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> assert(cv<ntraining);</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="keywordtype">float</span> rmse=0;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> std::vector< std::vector<fann_type> > testInput;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> std::vector< std::vector<fann_type> > testOutput;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="keywordtype">int</span> testsample=0;<span class="comment">//sample to leave out</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="keywordtype">int</span> nrun=(cv>1)? cv : ntraining;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="keywordflow">if</span>(nrun>ntraining)</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> nrun=ntraining;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irun=0;irun<nrun;++irun){</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> std::cout << <span class="stringliteral">"run "</span> << irun << std::endl;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="comment">//reset training sample from last run</span></div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> std::cout << <span class="stringliteral">"reset training sample from last run"</span> << std::endl;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="keywordflow">while</span>(testInput.size()){</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> input.push_back(testInput.back());</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> testInput.pop_back();</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> }</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="keywordflow">while</span>(testOutput.size()){</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> output.push_back(testOutput.back());</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> testOutput.pop_back();</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> }</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> assert(testInput.size()==testOutput.size());</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> <span class="keywordflow">if</span>(verbose>1){</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> std::cout << <span class="stringliteral">"training size: "</span> << input.size() << std::endl;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> std::cout << <span class="stringliteral">"test size: "</span> << testInput.size() << std::endl;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> assert(input.size());</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment">//create test sample</span></div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> std::cout << <span class="stringliteral">"create test sample"</span> << std::endl;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <span class="keywordtype">int</span> ntest=(cv>1)? ntraining/cv : 1; <span class="comment">//n-fold cross validation or leave-one-out</span></div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="keywordflow">while</span>(nsample<ntest){</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> testInput.push_back(input[0]);</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> testOutput.push_back(output[0]);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> input.erase(input.begin());</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> output.erase(output.begin());</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> assert(input.size());</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> assert(output.size());</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> assert(input.size()==output.size());</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> ++nsample;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> }</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> assert(nsample==ntest);</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> assert(testInput.size()==testOutput.size());</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment">//training with left out training set</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> std::cout << std::endl << <span class="stringliteral">"Set training data"</span> << std::endl;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="keywordtype">bool</span> initWeights=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports=0;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> train_on_data(input,output,initWeights, max_epochs,</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment">//cross validation with testFeatures</span></div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="keywordflow">if</span>(verbose>1)</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> std::cout << std::endl << <span class="stringliteral">"Cross validation"</span> << std::endl;</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> std::vector<fann_type> result(noutput);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<testInput.size();++isample){</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> result=run(testInput[isample]);</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> referenceVector.push_back(testOutput[isample]);</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> outputVector.push_back(result);</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> }</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> }</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">//reset from very last run</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="keywordflow">while</span>(testInput.size()){</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> input.push_back(testInput.back());</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> testInput.pop_back();</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> }</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="keywordflow">while</span>(testOutput.size()){</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> output.push_back(testOutput.back());</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> testOutput.pop_back();</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> }</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> }</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> </div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment">/* Method: train_on_file</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment"> Does the same as <train_on_data>, but reads the training data directly from a file.</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment"> <train_on_data>, <fann_train_on_file></span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment"></span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="keywordtype">void</span> train_on_file(<span class="keyword">const</span> std::string &filename, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs,</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports, <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> {</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> fann_train_on_file(ann, filename.c_str(),</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> max_epochs, epochs_between_reports, desired_error);</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> }</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="preprocessor">#endif </span><span class="comment">/* NOT FIXEDFANN */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment">/* Method: test</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment"></span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment"> Test with a set of inputs, and a set of desired outputs.</span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment"> This operation updates the mean square error, but does not</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment"> change the network in any way.</span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="comment"> <test_data>, <train>, <fann_test></span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> fann_type * test(fann_type *input, fann_type *desired_output)</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> fann_type * output = NULL;</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> {</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> output = fann_test(ann, input, desired_output);</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> }</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="keywordflow">return</span> output;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> }</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment">/* Method: test_data</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment"> Test a set of training data and calculates the MSE for the training data. </span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment"> This function updates the MSE and the bit fail values.</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="comment"> <test>, <get_MSE>, <get_bit_fail>, <fann_test_data></span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="comment"></span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="keywordtype">float</span> test_data(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> {</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> <span class="keywordtype">float</span> mse = 0.0f;</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="keywordflow">if</span> ((ann != NULL) && (data.train_data != NULL))</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> {</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> mse = fann_test_data(ann, data.train_data);</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> }</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="keywordflow">return</span> mse;</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> }</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="keywordtype">float</span> test_data(<span class="keyword">const</span> std::vector< <a class="code" href="classVector2d.html">Vector2d<fann_type></a> >& input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_data)</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> assert(num_data);</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> assert(input.size());</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_class=input.size();</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> assert(input[0].size());</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input=input[0][0].size();</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output=num_class;</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="keyword">struct </span>fann_train_data *data =</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> (<span class="keyword">struct </span>fann_train_data *)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> fann_train_data));</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> data->input = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> data->output = (fann_type **)calloc(num_data, <span class="keyword">sizeof</span>(fann_type *));</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> data->num_data = num_data;</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> data->num_input = num_input;</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> data->num_output = num_output;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> fann_type *data_input = (fann_type *)calloc(num_input*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> fann_type *data_output = (fann_type *)calloc(num_output*num_data, <span class="keyword">sizeof</span>(fann_type));</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> </div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<num_class;++iclass){</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> csample=0;csample<input[iclass].size();++csample){</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> data->input[isample] = data_input;</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> data_input += num_input;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input[iclass][csample].size();++iband){</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> assert(input[iclass][csample].size()==num_input);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> data->input[isample][iband] = input[iclass][csample][iband];</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> }</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> data->output[isample] = data_output;</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> data_output += num_output;</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<num_output;++ic){</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="comment">//for single neuron output:</span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">// data->output[isample][ic]=2.0/(num_class-1)*(iclass-(num_class-1)/2.0);</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="keywordflow">if</span>(ic==iclass)</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> data->output[isample][ic] = 1;</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> data->output[isample][ic] = -1;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> }</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> ++isample;</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> }</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <a class="code" href="classFANN_1_1training__data.html">FANN::training_data</a> trainingData;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> trainingData.train_data = data;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="keywordflow">return</span> test_data(trainingData);</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> }</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> </div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">/* Method: get_MSE</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment"> Reads the mean square error from the network.</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="comment"> Reads the mean square error from the network. This value is calculated during </span></div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="comment"> training or testing, and can therefore sometimes be a bit off if the weights </span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> <span class="comment"> have been changed since the last calculation of the value.</span></div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="comment"> <test_data>, <fann_get_MSE></span></div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="comment"></span></div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="comment"> This function appears in FANN >= 1.1.0.</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="keywordtype">float</span> get_MSE()</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> {</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <span class="keywordtype">float</span> mse = 0.0f;</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> {</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> mse = fann_get_MSE(ann);</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> }</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> <span class="keywordflow">return</span> mse;</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> }</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> </div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="comment">/* Method: reset_MSE</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="comment"></span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment"> Resets the mean square error from the network.</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="comment"> This function also resets the number of bits that fail.</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> <span class="comment"> <get_MSE>, <get_bit_fail_limit>, <fann_reset_MSE></span></div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="comment"> This function appears in FANN >= 1.1.0</span></div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="keywordtype">void</span> reset_MSE()</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> {</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> {</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> fann_reset_MSE(ann);</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> }</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> }</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="comment">/* Method: set_callback</span></div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="comment"> Sets the callback function for use during training. The user_data is passed to</span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="comment"> the callback. It can point to arbitrary data that the callback might require and</span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> <span class="comment"> can be NULL if it is not used.</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> <span class="comment"> See <FANN::callback_type> for more information about the callback function.</span></div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> <span class="comment"> The default callback function simply prints out some status information.</span></div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> <span class="comment"></span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> <span class="keywordtype">void</span> set_callback(callback_type callback, <span class="keywordtype">void</span> *user_data)</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> {</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> {</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">// Allocated data is also deleted in the destroy method called by the destructor</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> user_context *user_instance = <span class="keyword">static_cast<</span>user_context *<span class="keyword">></span>(fann_get_user_data(ann));</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> <span class="keywordflow">if</span> (user_instance != NULL)</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="keyword">delete</span> user_instance;</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> </div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> user_instance = <span class="keyword">new</span> user_context();</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> user_instance->user_callback = callback;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> user_instance->user_data = user_data;</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> user_instance->net = <span class="keyword">this</span>;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> fann_set_user_data(ann, user_instance);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> </div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> <span class="keywordflow">if</span> (callback != NULL)</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> fann_set_callback(ann, &FANN::neural_net::internal_callback);</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> fann_set_callback(ann, NULL);</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> }</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> }</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="comment">/* Method: print_parameters</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="comment"></span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="comment"> Prints all of the parameters and options of the neural network</span></div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> <span class="comment"></span></div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="comment"> <fann_print_parameters></span></div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="comment"></span></div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="keywordtype">void</span> print_parameters()</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> {</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> {</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> fann_print_parameters(ann);</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> }</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> }</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> </div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">/* Method: get_training_algorithm</span></div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> <span class="comment"></span></div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment"> Return the training algorithm as described by <FANN::training_algorithm_enum>.</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment"> This training algorithm is used by <train_on_data> and associated functions.</span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> <span class="comment"> Note that this algorithm is also used during <cascadetrain_on_data>, although only</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment"> FANN::TRAIN_RPROP and FANN::TRAIN_QUICKPROP is allowed during cascade training.</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment"> The default training algorithm is FANN::TRAIN_RPROP.</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment"> <set_training_algorithm>, <FANN::training_algorithm_enum>,</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment"> <fann_get_training_algorithm></span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment"></span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> training_algorithm_enum get_training_algorithm()</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> {</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> fann_train_enum training_algorithm = FANN_TRAIN_INCREMENTAL;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> {</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> training_algorithm = fann_get_training_algorithm(ann);</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> }</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>training_algorithm_enum<span class="keyword">></span>(training_algorithm);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> }</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> </div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="comment">/* Method: set_training_algorithm</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="comment"></span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="comment"> Set the training algorithm.</span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="comment"> </span></div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="comment"> More info available in <get_training_algorithm></span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <span class="comment"></span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> <span class="keywordtype">void</span> set_training_algorithm(training_algorithm_enum training_algorithm)</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> {</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> {</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> fann_set_training_algorithm(ann,</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> static_cast<fann_train_enum>(training_algorithm));</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> }</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> }</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> </div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="comment">/* Method: get_learning_rate</span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="comment"></span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="comment"> Return the learning rate.</span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment"> The learning rate is used to determine how aggressive training should be for some of the</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="comment"> training algorithms (FANN::TRAIN_INCREMENTAL, FANN::TRAIN_BATCH, FANN::TRAIN_QUICKPROP).</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="comment"> Do however note that it is not used in FANN::TRAIN_RPROP.</span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="comment"> The default learning rate is 0.7.</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="comment"> <set_learning_rate>, <set_training_algorithm>,</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="comment"> <fann_get_learning_rate></span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="keywordtype">float</span> get_learning_rate()</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> {</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> <span class="keywordtype">float</span> learning_rate = 0.0f;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> {</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> learning_rate = fann_get_learning_rate(ann);</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> }</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="keywordflow">return</span> learning_rate;</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> }</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> </div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment">/* Method: set_learning_rate</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="comment"></span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment"> Set the learning rate.</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment"> More info available in <get_learning_rate></span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment"></span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment"> This function appears in FANN >= 1.0.0. </span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="keywordtype">void</span> set_learning_rate(<span class="keywordtype">float</span> learning_rate)</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> {</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> {</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> fann_set_learning_rate(ann, learning_rate);</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> }</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> }</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment">/*************************************************************************************************************/</span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> </div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="comment">/* Method: get_activation_function</span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment"></span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment"> Get the activation function for neuron number *neuron* in layer number *layer*, </span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment"> It is not possible to get activation functions for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="comment"> Information about the individual activation functions is available at <FANN::activation_function_enum>.</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="comment"></span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <span class="comment"> The activation function for the neuron or -1 if the neuron is not defined in the neural network.</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="comment"> <set_activation_function_layer>, <set_activation_function_hidden>,</span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="comment"> <set_activation_function_output>, <set_activation_steepness>,</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="comment"> <set_activation_function>, <fann_get_activation_function></span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> <span class="comment"></span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> activation_function_enum get_activation_function(<span class="keywordtype">int</span> layer, <span class="keywordtype">int</span> neuron)</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> {</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> activation_function = 0;</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> {</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> activation_function = fann_get_activation_function(ann, layer, neuron);</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> }</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>activation_function_enum<span class="keyword">></span>(activation_function);</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> }</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> </div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> <span class="comment">/* Method: set_activation_function</span></div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> <span class="comment"></span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> <span class="comment"> Set the activation function for neuron number *neuron* in layer number *layer*, </span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment"> It is not possible to set activation functions for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="comment"> When choosing an activation function it is important to note that the activation </span></div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> <span class="comment"> functions have different range. FANN::SIGMOID is e.g. in the 0 - 1 range while </span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="comment"> FANN::SIGMOID_SYMMETRIC is in the -1 - 1 range and FANN::LINEAR is unbound.</span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> <span class="comment"> Information about the individual activation functions is available at <FANN::activation_function_enum>.</span></div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="comment"> The default activation function is FANN::SIGMOID_STEPWISE.</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="comment"> <set_activation_function_layer>, <set_activation_function_hidden>,</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <span class="comment"> <set_activation_function_output>, <set_activation_steepness>,</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> <span class="comment"> <get_activation_function>, <fann_set_activation_function></span></div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> <span class="comment"></span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="keywordtype">void</span> set_activation_function(activation_function_enum activation_function, <span class="keywordtype">int</span> layer, <span class="keywordtype">int</span> neuron)</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> {</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> {</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> fann_set_activation_function(ann,</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> static_cast<fann_activationfunc_enum>(activation_function), layer, neuron);</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> }</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> }</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> </div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <span class="comment">/* Method: set_activation_function_layer</span></div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="comment"></span></div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment"> Set the activation function for all the neurons in the layer number *layer*, </span></div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment"> It is not possible to set activation functions for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <span class="comment"></span></div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="comment"> <set_activation_function>, <set_activation_function_hidden>,</span></div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <span class="comment"> <set_activation_function_output>, <set_activation_steepness_layer>,</span></div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> <span class="comment"> <fann_set_activation_function_layer></span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> <span class="comment"></span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="keywordtype">void</span> set_activation_function_layer(activation_function_enum activation_function, <span class="keywordtype">int</span> layer)</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> {</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> {</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> fann_set_activation_function_layer(ann,</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> static_cast<fann_activationfunc_enum>(activation_function), layer);</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> }</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> }</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> </div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="comment">/* Method: set_activation_function_hidden</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="comment"></span></div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> <span class="comment"> Set the activation function for all of the hidden layers.</span></div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="comment"></span></div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> <span class="comment"> <set_activation_function>, <set_activation_function_layer>,</span></div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> <span class="comment"> <set_activation_function_output>, <set_activation_steepness_hidden>,</span></div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> <span class="comment"> <fann_set_activation_function_hidden></span></div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> <span class="comment"></span></div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> <span class="keywordtype">void</span> set_activation_function_hidden(activation_function_enum activation_function)</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> {</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> {</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> fann_set_activation_function_hidden(ann,</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> static_cast<fann_activationfunc_enum>(activation_function));</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> }</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> }</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> </div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> <span class="comment">/* Method: set_activation_function_output</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> <span class="comment"></span></div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> <span class="comment"> Set the activation function for the output layer.</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <span class="comment"></span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="comment"> <set_activation_function>, <set_activation_function_layer>,</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="comment"> <set_activation_function_hidden>, <set_activation_steepness_output>,</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> <span class="comment"> <fann_set_activation_function_output></span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="comment"></span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="keywordtype">void</span> set_activation_function_output(activation_function_enum activation_function)</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> {</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> {</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> fann_set_activation_function_output(ann,</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> static_cast<fann_activationfunc_enum>(activation_function));</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> }</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> }</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> </div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> <span class="comment">/* Method: get_activation_steepness</span></div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> <span class="comment"></span></div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> <span class="comment"> Get the activation steepness for neuron number *neuron* in layer number *layer*, </span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> <span class="comment"> It is not possible to get activation steepness for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> <span class="comment"> The steepness of an activation function says something about how fast the activation function </span></div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="comment"> goes from the minimum to the maximum. A high value for the activation function will also</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="comment"> give a more agressive training.</span></div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> <span class="comment"> When training neural networks where the output values should be at the extremes (usually 0 and 1, </span></div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="comment"> depending on the activation function), a steep activation function can be used (e.g. 1.0).</span></div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> <span class="comment"> The default activation steepness is 0.5.</span></div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> <span class="comment"> The activation steepness for the neuron or -1 if the neuron is not defined in the neural network.</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="comment"> <set_activation_steepness_layer>, <set_activation_steepness_hidden>,</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="comment"> <set_activation_steepness_output>, <set_activation_function>,</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> <span class="comment"> <set_activation_steepness>, <fann_get_activation_steepness></span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="comment"></span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> fann_type get_activation_steepness(<span class="keywordtype">int</span> layer, <span class="keywordtype">int</span> neuron)</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> {</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> fann_type activation_steepness = 0;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> {</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> activation_steepness = fann_get_activation_steepness(ann, layer, neuron);</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> }</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <span class="keywordflow">return</span> activation_steepness;</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> }</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> </div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="comment">/* Method: set_activation_steepness</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="comment"></span></div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> <span class="comment"> Set the activation steepness for neuron number *neuron* in layer number *layer*, </span></div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="comment"> It is not possible to set activation steepness for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> <span class="comment"> The steepness of an activation function says something about how fast the activation function </span></div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> <span class="comment"> goes from the minimum to the maximum. A high value for the activation function will also</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="comment"> give a more agressive training.</span></div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> <span class="comment"> When training neural networks where the output values should be at the extremes (usually 0 and 1, </span></div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="comment"> depending on the activation function), a steep activation function can be used (e.g. 1.0).</span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="comment"> The default activation steepness is 0.5.</span></div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="comment"> <set_activation_steepness_layer>, <set_activation_steepness_hidden>,</span></div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="comment"> <set_activation_steepness_output>, <set_activation_function>,</span></div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="comment"> <get_activation_steepness>, <fann_set_activation_steepness></span></div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment"></span></div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> <span class="keywordtype">void</span> set_activation_steepness(fann_type steepness, <span class="keywordtype">int</span> layer, <span class="keywordtype">int</span> neuron)</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> {</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> {</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> fann_set_activation_steepness(ann, steepness, layer, neuron);</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> }</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> }</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> </div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> <span class="comment">/* Method: set_activation_steepness_layer</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="comment"></span></div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> <span class="comment"> Set the activation steepness all of the neurons in layer number *layer*, </span></div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="comment"> counting the input layer as layer 0. </span></div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="comment"> It is not possible to set activation steepness for the neurons in the input layer.</span></div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="comment"> <set_activation_steepness>, <set_activation_steepness_hidden>,</span></div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> <span class="comment"> <set_activation_steepness_output>, <set_activation_function_layer>,</span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> <span class="comment"> <fann_set_activation_steepness_layer></span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="comment"></span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="keywordtype">void</span> set_activation_steepness_layer(fann_type steepness, <span class="keywordtype">int</span> layer)</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> {</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> {</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> fann_set_activation_steepness_layer(ann, steepness, layer);</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> }</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> }</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> </div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="comment">/* Method: set_activation_steepness_hidden</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="comment"></span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="comment"> Set the steepness of the activation steepness in all of the hidden layers.</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> <span class="comment"></span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="comment"> <set_activation_steepness>, <set_activation_steepness_layer>,</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> <span class="comment"> <set_activation_steepness_output>, <set_activation_function_hidden>,</span></div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> <span class="comment"> <fann_set_activation_steepness_hidden></span></div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="comment"></span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="keywordtype">void</span> set_activation_steepness_hidden(fann_type steepness)</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> {</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> {</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> fann_set_activation_steepness_hidden(ann, steepness);</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> }</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> }</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="comment">/* Method: set_activation_steepness_output</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="comment"></span></div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> <span class="comment"> Set the steepness of the activation steepness in the output layer.</span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="comment"></span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="comment"> <set_activation_steepness>, <set_activation_steepness_layer>,</span></div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="comment"> <set_activation_steepness_hidden>, <set_activation_function_output>,</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="comment"> <fann_set_activation_steepness_output></span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="comment"></span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="keywordtype">void</span> set_activation_steepness_output(fann_type steepness)</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> {</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> fann_set_activation_steepness_output(ann, steepness);</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> }</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> }</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> </div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="comment">/*************************************************************************************************************/</span></div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> </div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="comment">/* Method: get_train_error_function</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="comment"></span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="comment"> Returns the error function used during training.</span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="comment"></span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="comment"> The error functions is described further in <FANN::error_function_enum></span></div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="comment"> The default error function is FANN::ERRORFUNC_TANH</span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="comment"> <set_train_error_function>, <fann_get_train_error_function></span></div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> error_function_enum get_train_error_function()</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> {</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> fann_errorfunc_enum train_error_function = FANN_ERRORFUNC_LINEAR;</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> {</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> train_error_function = fann_get_train_error_function(ann);</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> }</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>error_function_enum<span class="keyword">></span>(train_error_function);</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> }</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> </div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="comment">/* Method: set_train_error_function</span></div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <span class="comment"></span></div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> <span class="comment"> Set the error function used during training.</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> <span class="comment"> The error functions is described further in <FANN::error_function_enum></span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="comment"> <get_train_error_function>, <fann_set_train_error_function></span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> <span class="keywordtype">void</span> set_train_error_function(error_function_enum train_error_function)</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> {</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> {</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> fann_set_train_error_function(ann,</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> static_cast<fann_errorfunc_enum>(train_error_function));</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> }</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> </div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="comment">/* Method: get_quickprop_decay</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="comment"></span></div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="comment"> The decay is a small negative valued number which is the factor that the weights </span></div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="comment"> should become smaller in each iteration during quickprop training. This is used </span></div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> <span class="comment"> to make sure that the weights do not become too high during training.</span></div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> <span class="comment"> The default decay is -0.0001.</span></div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="comment"> <set_quickprop_decay>, <fann_get_quickprop_decay></span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="comment"></span></div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="keywordtype">float</span> get_quickprop_decay()</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> {</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="keywordtype">float</span> quickprop_decay = 0.0f;</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> {</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> quickprop_decay = fann_get_quickprop_decay(ann);</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> }</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="keywordflow">return</span> quickprop_decay;</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> }</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> </div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="comment">/* Method: set_quickprop_decay</span></div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="comment"> Sets the quickprop decay factor.</span></div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> <span class="comment"> <get_quickprop_decay>, <fann_set_quickprop_decay></span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="comment"></span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="keywordtype">void</span> set_quickprop_decay(<span class="keywordtype">float</span> quickprop_decay)</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> {</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> {</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> fann_set_quickprop_decay(ann, quickprop_decay);</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> }</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> }</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> </div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="comment">/* Method: get_quickprop_mu</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="comment"></span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="comment"> The mu factor is used to increase and decrease the step-size during quickprop training. </span></div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <span class="comment"> The mu factor should always be above 1, since it would otherwise decrease the step-size </span></div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> <span class="comment"> when it was suppose to increase it.</span></div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <span class="comment"> The default mu factor is 1.75. </span></div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <span class="comment"> <set_quickprop_mu>, <fann_get_quickprop_mu></span></div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> <span class="comment"></span></div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> <span class="keywordtype">float</span> get_quickprop_mu()</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> {</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <span class="keywordtype">float</span> quickprop_mu = 0.0f;</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> {</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> quickprop_mu = fann_get_quickprop_mu(ann);</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> }</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="keywordflow">return</span> quickprop_mu;</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> }</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> </div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="comment">/* Method: set_quickprop_mu</span></div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> <span class="comment"></span></div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> <span class="comment"> Sets the quickprop mu factor.</span></div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> <span class="comment"> <get_quickprop_mu>, <fann_set_quickprop_mu></span></div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> <span class="comment"></span></div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> <span class="keywordtype">void</span> set_quickprop_mu(<span class="keywordtype">float</span> quickprop_mu)</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> {</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> {</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> fann_set_quickprop_mu(ann, quickprop_mu);</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> }</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> }</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> </div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="comment">/* Method: get_rprop_increase_factor</span></div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="comment"></span></div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> <span class="comment"> The increase factor is a value larger than 1, which is used to </span></div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> <span class="comment"> increase the step-size during RPROP training.</span></div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> <span class="comment"></span></div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="comment"> The default increase factor is 1.2.</span></div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> <span class="comment"> <set_rprop_increase_factor>, <fann_get_rprop_increase_factor></span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="comment"></span></div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> <span class="keywordtype">float</span> get_rprop_increase_factor()</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> {</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="keywordtype">float</span> factor = 0.0f;</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> {</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> factor = fann_get_rprop_increase_factor(ann);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> }</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="keywordflow">return</span> factor;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> }</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> </div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="comment">/* Method: set_rprop_increase_factor</span></div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="comment"></span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="comment"> The increase factor used during RPROP training.</span></div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> <span class="comment"></span></div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> <span class="comment"> <get_rprop_increase_factor>, <fann_set_rprop_increase_factor></span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> <span class="comment"></span></div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="keywordtype">void</span> set_rprop_increase_factor(<span class="keywordtype">float</span> rprop_increase_factor)</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> {</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> {</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> fann_set_rprop_increase_factor(ann, rprop_increase_factor);</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> }</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> }</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="comment">/* Method: get_rprop_decrease_factor</span></div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="comment"></span></div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="comment"> The decrease factor is a value smaller than 1, which is used to decrease the step-size during RPROP training.</span></div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> <span class="comment"></span></div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="comment"> The default decrease factor is 0.5.</span></div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="comment"></span></div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> <span class="comment"> <set_rprop_decrease_factor>, <fann_get_rprop_decrease_factor></span></div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> <span class="comment"></span></div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> <span class="keywordtype">float</span> get_rprop_decrease_factor()</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> {</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> <span class="keywordtype">float</span> factor = 0.0f;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> {</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> factor = fann_get_rprop_decrease_factor(ann);</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> }</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <span class="keywordflow">return</span> factor;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> }</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> </div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="comment">/* Method: set_rprop_decrease_factor</span></div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="comment"></span></div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="comment"> The decrease factor is a value smaller than 1, which is used to decrease the step-size during RPROP training.</span></div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="comment"></span></div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> <span class="comment"> <get_rprop_decrease_factor>, <fann_set_rprop_decrease_factor></span></div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> <span class="comment"></span></div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> <span class="keywordtype">void</span> set_rprop_decrease_factor(<span class="keywordtype">float</span> rprop_decrease_factor)</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> {</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> {</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> fann_set_rprop_decrease_factor(ann, rprop_decrease_factor);</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> }</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> }</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> </div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> <span class="comment">/* Method: get_rprop_delta_min</span></div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> <span class="comment"></span></div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> <span class="comment"> The minimum step-size is a small positive number determining how small the minimum step-size may be.</span></div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="comment"></span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> <span class="comment"> The default value delta min is 0.0.</span></div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> <span class="comment"></span></div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <span class="comment"> <set_rprop_delta_min>, <fann_get_rprop_delta_min></span></div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="keywordtype">float</span> get_rprop_delta_min()</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> {</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <span class="keywordtype">float</span> delta = 0.0f;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> {</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> delta = fann_get_rprop_delta_min(ann);</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> }</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> <span class="keywordflow">return</span> delta;</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> }</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> </div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> <span class="comment">/* Method: set_rprop_delta_min</span></div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> <span class="comment"></span></div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> <span class="comment"> The minimum step-size is a small positive number determining how small the minimum step-size may be.</span></div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> <span class="comment"></span></div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> <span class="comment"> <get_rprop_delta_min>, <fann_set_rprop_delta_min></span></div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> <span class="keywordtype">void</span> set_rprop_delta_min(<span class="keywordtype">float</span> rprop_delta_min)</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> {</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span> {</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> fann_set_rprop_delta_min(ann, rprop_delta_min);</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> }</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> }</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> </div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> <span class="comment">/* Method: get_rprop_delta_max</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> <span class="comment"></span></div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> <span class="comment"> The maximum step-size is a positive number determining how large the maximum step-size may be.</span></div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> <span class="comment"></span></div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> <span class="comment"> The default delta max is 50.0.</span></div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> <span class="comment"></span></div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> <span class="comment"> <set_rprop_delta_max>, <get_rprop_delta_min>, <fann_get_rprop_delta_max></span></div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> <span class="comment"></span></div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> <span class="keywordtype">float</span> get_rprop_delta_max()</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span> {</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> <span class="keywordtype">float</span> delta = 0.0f;</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> {</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> delta = fann_get_rprop_delta_max(ann);</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> }</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span> <span class="keywordflow">return</span> delta;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> }</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> </div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> <span class="comment">/* Method: set_rprop_delta_max</span></div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> <span class="comment"></span></div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> <span class="comment"> The maximum step-size is a positive number determining how large the maximum step-size may be.</span></div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <span class="comment"></span></div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="comment"> <get_rprop_delta_max>, <get_rprop_delta_min>, <fann_set_rprop_delta_max></span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <span class="comment"></span></div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="comment"> This function appears in FANN >= 1.2.0.</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> <span class="keywordtype">void</span> set_rprop_delta_max(<span class="keywordtype">float</span> rprop_delta_max)</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> {</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> {</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> fann_set_rprop_delta_max(ann, rprop_delta_max);</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> }</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> }</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> </div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="comment">/* Method: get_num_input</span></div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> <span class="comment"></span></div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> <span class="comment"> Get the number of input neurons.</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> <span class="comment"></span></div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_num_input()</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> {</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_input = 0;</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> {</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> num_input = fann_get_num_input(ann);</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> }</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> <span class="keywordflow">return</span> num_input;</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> }</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> </div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> <span class="comment">/* Method: get_num_output</span></div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> <span class="comment"></span></div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> <span class="comment"> Get the number of output neurons.</span></div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> <span class="comment"></span></div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_num_output()</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> {</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_output = 0;</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> {</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> num_output = fann_get_num_output(ann);</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> }</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> <span class="keywordflow">return</span> num_output;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="comment">/* Method: get_total_neurons</span></div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> <span class="comment"></span></div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> <span class="comment"> Get the total number of neurons in the entire network. This number does also include the </span></div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> <span class="comment"> bias neurons, so a 2-4-2 network has 2+4+2 +2(bias) = 10 neurons.</span></div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span> <span class="comment"></span></div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_total_neurons()</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> {</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> {</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> }</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span> <span class="keywordflow">return</span> fann_get_total_neurons(ann);</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> }</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> </div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> <span class="comment">/* Method: get_total_connections</span></div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span> <span class="comment"></span></div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> <span class="comment"> Get the total number of connections in the entire network.</span></div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span> <span class="comment"></span></div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_total_connections()</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> {</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> {</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> }</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> <span class="keywordflow">return</span> fann_get_total_connections(ann);</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> }</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> </div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> <span class="preprocessor">#ifdef FIXEDFANN</span></div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> <span class="preprocessor"></span> <span class="comment">/* Method: get_decimal_point</span></div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> <span class="comment"></span></div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> <span class="comment"> Returns the position of the decimal point in the ann.</span></div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> <span class="comment"></span></div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span> <span class="comment"> This function is only available when the ANN is in fixed point mode.</span></div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> <span class="comment"></span></div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> <span class="comment"> The decimal point is described in greater detail in the tutorial <Fixed Point Usage>.</span></div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> <span class="comment"></span></div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> <span class="comment"> <Fixed Point Usage>, <get_multiplier>, <save_to_fixed>,</span></div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> <span class="comment"> <training_data::save_train_to_fixed>, <fann_get_decimal_point></span></div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> <span class="comment"></span></div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_decimal_point()</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span> {</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> {</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span> }</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span> <span class="keywordflow">return</span> fann_get_decimal_point(ann);</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span> }</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span> </div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span> <span class="comment">/* Method: get_multiplier</span></div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> <span class="comment"></span></div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span> <span class="comment"> Returns the multiplier that fix point data is multiplied with.</span></div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span> <span class="comment"></span></div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span> <span class="comment"> This function is only available when the ANN is in fixed point mode.</span></div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span> <span class="comment"></span></div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> <span class="comment"> The multiplier is the used to convert between floating point and fixed point notation. </span></div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span> <span class="comment"> A floating point number is multiplied with the multiplier in order to get the fixed point</span></div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> <span class="comment"> number and visa versa.</span></div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span> <span class="comment"></span></div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span> <span class="comment"> The multiplier is described in greater detail in the tutorial <Fixed Point Usage>.</span></div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span> <span class="comment"></span></div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> <span class="comment"> <Fixed Point Usage>, <get_decimal_point>, <save_to_fixed>,</span></div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span> <span class="comment"> <training_data::save_train_to_fixed>, <fann_get_multiplier></span></div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span> <span class="comment"></span></div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span> <span class="comment"> This function appears in FANN >= 1.0.0.</span></div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_multiplier()</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> {</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span> {</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> }</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span> <span class="keywordflow">return</span> fann_get_multiplier(ann);</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> }</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> <span class="preprocessor">#endif </span><span class="comment">/* FIXEDFANN */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span> </div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span> <span class="comment">/* Method: get_network_type</span></div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> <span class="comment"></span></div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> <span class="comment"> Get the type of neural network it was created as.</span></div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span> <span class="comment"></span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span> <span class="comment"> The neural network type from enum <FANN::network_type_enum></span></div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> <span class="comment"></span></div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span> <span class="comment"> See Also:</span></div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span> <span class="comment"> <fann_get_network_type></span></div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span> <span class="comment"></span></div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> network_type_enum get_network_type()</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> {</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> fann_nettype_enum network_type = FANN_NETTYPE_LAYER;</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> {</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> network_type = fann_get_network_type(ann);</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> }</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>network_type_enum<span class="keyword">></span>(network_type);</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> }</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> </div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span> <span class="comment">/* Method: get_connection_rate</span></div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span> <span class="comment"></span></div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span> <span class="comment"> Get the connection rate used when the network was created</span></div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> <span class="comment"></span></div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span> <span class="comment"> The connection rate</span></div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span> <span class="comment"></span></div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span> <span class="comment"> <fann_get_connection_rate></span></div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span> <span class="comment"></span></div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span> <span class="keywordtype">float</span> get_connection_rate()</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> {</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> {</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span> }</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span> <span class="keywordflow">return</span> fann_get_connection_rate(ann);</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span> }</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span> </div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span> <span class="comment">/* Method: get_num_layers</span></div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span> <span class="comment"></span></div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> <span class="comment"> Get the number of layers in the network</span></div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span> <span class="comment"></span></div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span> <span class="comment"> Returns:</span></div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> <span class="comment"> The number of layers in the neural network</span></div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> <span class="comment"></span></div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> <span class="comment"> <fann_get_num_layers></span></div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span> <span class="comment"></span></div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_num_layers()</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> {</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> <span class="keywordflow">if</span> (ann == NULL)</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> {</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> }</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> <span class="keywordflow">return</span> fann_get_num_layers(ann);</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span> }</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> </div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span> <span class="comment">/* Method: get_layer_array</span></div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> <span class="comment"></span></div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> <span class="comment"> Get the number of neurons in each layer in the network.</span></div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span> <span class="comment"></span></div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span> <span class="comment"> Bias is not included so the layers match the create methods.</span></div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span> <span class="comment"></span></div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span> <span class="comment"> The layers array must be preallocated to at least</span></div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="comment"> sizeof(unsigned int) * get_num_layers() long.</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> <span class="comment"></span></div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span> <span class="comment"> <fann_get_layer_array></span></div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> <span class="comment"></span></div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> <span class="keywordtype">void</span> get_layer_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *layers)</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> {</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span> {</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span> fann_get_layer_array(ann, layers);</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span> }</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span> }</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span> </div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span> <span class="keywordtype">void</span> get_layer_array(std::vector<unsigned int> vlayers)</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span> {</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> vlayers.clear();</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span> <span class="keywordflow">if</span> (ann != NULL){</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span> vlayers.resize(get_num_layers());</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* layers=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *)calloc(get_num_layers(),<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> int));</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span> fann_get_layer_array(ann, layers);</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<get_num_layers();++ilayer)</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span> vlayers[ilayer]=*(layers++);</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span> }</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span> }</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> </div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span> <span class="comment">/* Method: get_bias_array</span></div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span> <span class="comment"></span></div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span> <span class="comment"> Get the number of bias in each layer in the network.</span></div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span> <span class="comment"></span></div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> <span class="comment"> The bias array must be preallocated to at least</span></div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> <span class="comment"> sizeof(unsigned int) * get_num_layers() long.</span></div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> <span class="comment"></span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> <span class="comment"> <fann_get_bias_array></span></div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span> <span class="comment"></span></div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span> <span class="keywordtype">void</span> get_bias_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *bias)</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> {</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> {</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span> fann_get_bias_array(ann, bias);</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> }</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span> }</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span> </div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> <span class="comment">/* Method: get_connection_array</span></div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> <span class="comment"></span></div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span> <span class="comment"> Get the connections in the network.</span></div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span> <span class="comment"></span></div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span> <span class="comment"> The connections array must be preallocated to at least</span></div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> <span class="comment"> sizeof(struct fann_connection) * get_total_connections() long.</span></div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span> <span class="comment"></span></div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span> <span class="comment"> <fann_get_connection_array></span></div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span> <span class="comment"></span></div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> <span class="keywordtype">void</span> get_connection_array(connection *connections)</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> {</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span> {</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span> fann_get_connection_array(ann, connections);</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span> }</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span> }</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span> </div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> <span class="keywordtype">void</span> get_connection_array(std::vector<connection>& convector)</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> {</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span> convector.clear();</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> {</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span> convector.resize(get_total_connections());</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> connection* connections=(connection*)calloc(get_total_connections(),<span class="keyword">sizeof</span>(connection));</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span> fann_get_connection_array(ann, connections);</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icon=0;icon<get_total_connections();++icon)</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span> convector[icon]=*(connections++);</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> }</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span> }</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span> </div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span> <span class="comment">/* Method: set_weight_array</span></div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> <span class="comment"></span></div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span> <span class="comment"> Set connections in the network.</span></div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span> <span class="comment"></span></div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span> <span class="comment"> Only the weights can be changed, connections and weights are ignored</span></div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> <span class="comment"> if they do not already exist in the network.</span></div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> <span class="comment"></span></div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span> <span class="comment"> The array must have sizeof(struct fann_connection) * num_connections size.</span></div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> <span class="comment"></span></div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span> <span class="comment"> <fann_set_weight_array></span></div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span> <span class="comment"></span></div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span> <span class="keywordtype">void</span> set_weight_array(connection *connections, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_connections)</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span> {</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span> {</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> fann_set_weight_array(ann, connections, num_connections);</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span> }</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> }</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> </div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> <span class="keywordtype">void</span> set_weight_array(std::vector<connection> convector)</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> {</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span> {</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_connections=convector.size();</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span> connection* connections=(connection*)calloc(num_connections,<span class="keyword">sizeof</span>(connection));</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> connections=&(convector[0]);</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span> fann_set_weight_array(ann, connections, num_connections);</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span> }</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> }</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span> </div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span> <span class="comment">/* Method: set_weight</span></div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span> <span class="comment"></span></div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> <span class="comment"> Set a connection in the network.</span></div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span> <span class="comment"></span></div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span> <span class="comment"> Only the weights can be changed. The connection/weight is</span></div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span> <span class="comment"> ignored if it does not already exist in the network.</span></div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span> <span class="comment"></span></div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span> <span class="comment"> <fann_set_weight></span></div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> <span class="comment"></span></div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span> <span class="comment"> This function appears in FANN >= 2.1.0</span></div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span> <span class="keywordtype">void</span> set_weight(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> from_neuron, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> to_neuron, fann_type weight)</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span> {</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span> {</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span> fann_set_weight(ann, from_neuron, to_neuron, weight);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span> }</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span> }</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span> </div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> </div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span> <span class="comment">/* Method: get_learning_momentum</span></div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span> <span class="comment"></span></div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> <span class="comment"> Get the learning momentum.</span></div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span> <span class="comment"> The learning momentum can be used to speed up FANN::TRAIN_INCREMENTAL training.</span></div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span> <span class="comment"> A too high momentum will however not benefit training. Setting momentum to 0 will</span></div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span> <span class="comment"> be the same as not using the momentum parameter. The recommended value of this parameter</span></div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span> <span class="comment"> is between 0.0 and 1.0.</span></div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span> <span class="comment"></span></div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> <span class="comment"> The default momentum is 0.</span></div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span> <span class="comment"> <set_learning_momentum>, <set_training_algorithm></span></div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span> <span class="comment"></span></div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> <span class="comment"> This function appears in FANN >= 2.0.0. </span></div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span> <span class="keywordtype">float</span> get_learning_momentum()</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> {</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> <span class="keywordtype">float</span> learning_momentum = 0.0f;</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> {</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span> learning_momentum = fann_get_learning_momentum(ann);</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> }</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> <span class="keywordflow">return</span> learning_momentum;</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> }</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> </div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> <span class="comment">/* Method: set_learning_momentum</span></div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span> <span class="comment"></span></div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span> <span class="comment"> Set the learning momentum.</span></div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> <span class="comment"></span></div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> <span class="comment"> More info available in <get_learning_momentum></span></div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span> <span class="comment"></span></div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span> <span class="comment"> This function appears in FANN >= 2.0.0. </span></div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> <span class="keywordtype">void</span> set_learning_momentum(<span class="keywordtype">float</span> learning_momentum)</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> {</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span> {</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> fann_set_learning_momentum(ann, learning_momentum);</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span> }</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> }</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span> </div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span> <span class="comment">/* Method: get_train_stop_function</span></div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span> <span class="comment"></span></div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span> <span class="comment"> Returns the the stop function used during training.</span></div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span> <span class="comment"> The stop function is described further in <FANN::stop_function_enum></span></div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span> <span class="comment"> The default stop function is FANN::STOPFUNC_MSE</span></div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> <span class="comment"> <get_train_stop_function>, <get_bit_fail_limit></span></div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> stop_function_enum get_train_stop_function()</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span> {</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span> <span class="keyword">enum</span> fann_stopfunc_enum stopfunc = FANN_STOPFUNC_MSE;</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> {</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> stopfunc = fann_get_train_stop_function(ann);</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> }</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>stop_function_enum<span class="keyword">></span>(stopfunc);</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span> }</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> </div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> <span class="comment">/* Method: set_train_stop_function</span></div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> <span class="comment"></span></div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> <span class="comment"> Set the stop function used during training.</span></div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> <span class="comment"></span></div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> <span class="comment"> The stop function is described further in <FANN::stop_function_enum></span></div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> <span class="comment"> <get_train_stop_function></span></div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> <span class="keywordtype">void</span> set_train_stop_function(stop_function_enum train_stop_function)</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> {</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span> {</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> fann_set_train_stop_function(ann,</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> static_cast<enum fann_stopfunc_enum>(train_stop_function));</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> }</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span> }</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> </div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> <span class="comment">/* Method: get_bit_fail_limit</span></div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> <span class="comment"></span></div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> <span class="comment"> Returns the bit fail limit used during training.</span></div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> <span class="comment"> The bit fail limit is used during training when the <FANN::stop_function_enum> is set to FANN_STOPFUNC_BIT.</span></div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span> <span class="comment"></span></div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> <span class="comment"> The limit is the maximum accepted difference between the desired output and the actual output during</span></div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> <span class="comment"> training. Each output that diverges more than this limit is counted as an error bit.</span></div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> <span class="comment"> This difference is divided by two when dealing with symmetric activation functions,</span></div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> <span class="comment"> so that symmetric and not symmetric activation functions can use the same limit.</span></div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> <span class="comment"> The default bit fail limit is 0.35.</span></div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span> <span class="comment"> <set_bit_fail_limit></span></div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span> <span class="comment"> </span></div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span> fann_type get_bit_fail_limit()</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span> {</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span> fann_type bit_fail_limit = 0.0f;</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> </div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span> {</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> bit_fail_limit = fann_get_bit_fail_limit(ann);</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> }</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span> <span class="keywordflow">return</span> bit_fail_limit;</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span> }</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> </div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> <span class="comment">/* Method: set_bit_fail_limit</span></div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span> <span class="comment"></span></div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span> <span class="comment"> Set the bit fail limit used during training.</span></div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span> <span class="comment"> <get_bit_fail_limit></span></div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> <span class="keywordtype">void</span> set_bit_fail_limit(fann_type bit_fail_limit)</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> {</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> {</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> fann_set_bit_fail_limit(ann, bit_fail_limit);</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> }</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span> }</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span> </div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span> <span class="comment">/* Method: get_bit_fail</span></div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> <span class="comment"> The number of fail bits; means the number of output neurons which differ more </span></div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> <span class="comment"> than the bit fail limit (see <get_bit_fail_limit>, <set_bit_fail_limit>). </span></div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> <span class="comment"> The bits are counted in all of the training data, so this number can be higher than</span></div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> <span class="comment"> the number of training data.</span></div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> <span class="comment"> This value is reset by <reset_MSE> and updated by all the same functions which also</span></div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span> <span class="comment"> updates the MSE value (e.g. <test_data>, <train_epoch>)</span></div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span> <span class="comment"> <FANN::stop_function_enum>, <get_MSE></span></div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="comment"></span></div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> <span class="comment"> This function appears in FANN >= 2.0.0</span></div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_bit_fail()</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> {</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bit_fail = 0;</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> {</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> bit_fail = fann_get_bit_fail(ann);</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> }</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span> <span class="keywordflow">return</span> bit_fail;</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span> }</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span> </div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span> <span class="comment">/* Method: cascadetrain_on_data</span></div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> <span class="comment"></span></div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span> <span class="comment"> Trains on an entire dataset, for a period of time using the Cascade2 training algorithm.</span></div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span> <span class="comment"> This algorithm adds neurons to the neural network while training, which means that it</span></div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> <span class="comment"> needs to start with an ANN without any hidden layers. The neural network should also use</span></div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> <span class="comment"> shortcut connections, so <create_shortcut> should be used to create the ANN like this:</span></div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> <span class="comment"> >net.create_shortcut(2, train_data.num_input_train_data(), train_data.num_output_train_data());</span></div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> <span class="comment"> This training uses the parameters set using the set_cascade_..., but it also uses another</span></div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> <span class="comment"> training algorithm as it's internal training algorithm. This algorithm can be set to either</span></div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span> <span class="comment"> FANN::TRAIN_RPROP or FANN::TRAIN_QUICKPROP by <set_training_algorithm>, and the parameters </span></div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span> <span class="comment"> set for these training algorithms will also affect the cascade training.</span></div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> <span class="comment"> Parameters:</span></div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span> <span class="comment"> data - The data, which should be used during training</span></div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> <span class="comment"> max_neuron - The maximum number of neurons to be added to neural network</span></div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> <span class="comment"> neurons_between_reports - The number of neurons between printing a status report to stdout.</span></div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> <span class="comment"> A value of zero means no reports should be printed.</span></div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> <span class="comment"> desired_error - The desired <fann_get_MSE> or <fann_get_bit_fail>, depending on which stop function</span></div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span> <span class="comment"> is chosen by <fann_set_train_stop_function>.</span></div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> <span class="comment"></span></div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> <span class="comment"> Instead of printing out reports every neurons_between_reports, a callback function can be called </span></div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span> <span class="comment"> (see <set_callback>).</span></div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> <span class="comment"> <train_on_data>, <cascadetrain_on_file>, <fann_cascadetrain_on_data></span></div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span> <span class="comment"></span></div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span> <span class="comment"> This function appears in FANN >= 2.0.0. </span></div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span> <span class="keywordtype">void</span> cascadetrain_on_data(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_neurons,</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> neurons_between_reports, <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span> {</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span> <span class="keywordflow">if</span> ((ann != NULL) && (data.train_data != NULL))</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span> {</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span> fann_cascadetrain_on_data(ann, data.train_data, max_neurons,</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span> neurons_between_reports, desired_error);</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span> }</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span> }</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> </div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span> <span class="comment">/* Method: cascadetrain_on_file</span></div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> <span class="comment"> Does the same as <cascadetrain_on_data>, but reads the training data directly from a file.</span></div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span> <span class="comment"> <fann_cascadetrain_on_data>, <fann_cascadetrain_on_file></span></div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> <span class="comment"></span></div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span> <span class="keywordtype">void</span> cascadetrain_on_file(<span class="keyword">const</span> std::string &filename, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_neurons,</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> neurons_between_reports, <span class="keywordtype">float</span> desired_error)</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span> {</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span> {</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span> fann_cascadetrain_on_file(ann, filename.c_str(),</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> max_neurons, neurons_between_reports, desired_error);</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> }</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> }</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> </div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span> <span class="comment">/* Method: get_cascade_output_change_fraction</span></div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> <span class="comment"></span></div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span> <span class="comment"> The cascade output change fraction is a number between 0 and 1 determining how large a fraction</span></div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> <span class="comment"> the <get_MSE> value should change within <get_cascade_output_stagnation_epochs> during</span></div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span> <span class="comment"> training of the output connections, in order for the training not to stagnate. If the training </span></div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span> <span class="comment"> stagnates, the training of the output connections will be ended and new candidates will be prepared.</span></div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span> <span class="comment"> This means:</span></div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span> <span class="comment"> If the MSE does not change by a fraction of <get_cascade_output_change_fraction> during a </span></div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span> <span class="comment"> period of <get_cascade_output_stagnation_epochs>, the training of the output connections</span></div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span> <span class="comment"> is stopped because the training has stagnated.</span></div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span> <span class="comment"></span></div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span> <span class="comment"> If the cascade output change fraction is low, the output connections will be trained more and if the</span></div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> <span class="comment"> fraction is high they will be trained less.</span></div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span> <span class="comment"> The default cascade output change fraction is 0.01, which is equalent to a 1% change in MSE.</span></div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> <span class="comment"></span></div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span> <span class="comment"> <set_cascade_output_change_fraction>, <get_MSE>,</span></div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> <span class="comment"> <get_cascade_output_stagnation_epochs>, <fann_get_cascade_output_change_fraction></span></div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> <span class="comment"></span></div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span> <span class="keywordtype">float</span> get_cascade_output_change_fraction()</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> {</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> <span class="keywordtype">float</span> change_fraction = 0.0f;</div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> {</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> change_fraction = fann_get_cascade_output_change_fraction(ann);</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> }</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span> <span class="keywordflow">return</span> change_fraction;</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span> }</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span> </div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span> <span class="comment">/* Method: set_cascade_output_change_fraction</span></div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span> <span class="comment"></span></div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span> <span class="comment"> Sets the cascade output change fraction.</span></div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span> <span class="comment"> <get_cascade_output_change_fraction>, <fann_set_cascade_output_change_fraction></span></div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span> <span class="comment"></span></div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span> <span class="keywordtype">void</span> set_cascade_output_change_fraction(<span class="keywordtype">float</span> cascade_output_change_fraction)</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span> {</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span> {</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span> fann_set_cascade_output_change_fraction(ann, cascade_output_change_fraction);</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span> }</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span> }</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span> </div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span> <span class="comment">/* Method: get_cascade_output_stagnation_epochs</span></div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span> <span class="comment"></span></div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span> <span class="comment"> The number of cascade output stagnation epochs determines the number of epochs training is allowed to</span></div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> <span class="comment"> continue without changing the MSE by a fraction of <get_cascade_output_change_fraction>.</span></div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> <span class="comment"> See more info about this parameter in <get_cascade_output_change_fraction>.</span></div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> <span class="comment"> The default number of cascade output stagnation epochs is 12.</span></div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span> <span class="comment"></span></div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span> <span class="comment"> <set_cascade_output_stagnation_epochs>, <get_cascade_output_change_fraction>,</span></div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span> <span class="comment"> <fann_get_cascade_output_stagnation_epochs></span></div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span> <span class="comment"></span></div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_output_stagnation_epochs()</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> {</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stagnation_epochs = 0;</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span> {</div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span> stagnation_epochs = fann_get_cascade_output_stagnation_epochs(ann);</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span> }</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span> <span class="keywordflow">return</span> stagnation_epochs;</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span> }</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span> </div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span> <span class="comment">/* Method: set_cascade_output_stagnation_epochs</span></div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> <span class="comment"></span></div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span> <span class="comment"> Sets the number of cascade output stagnation epochs.</span></div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span> <span class="comment"> <get_cascade_output_stagnation_epochs>, <fann_set_cascade_output_stagnation_epochs></span></div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span> <span class="comment"></span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span> <span class="keywordtype">void</span> set_cascade_output_stagnation_epochs(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_output_stagnation_epochs)</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> {</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span> {</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span> fann_set_cascade_output_stagnation_epochs(ann, cascade_output_stagnation_epochs);</div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span> }</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span> }</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span> </div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span> <span class="comment">/* Method: get_cascade_candidate_change_fraction</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="comment"></span></div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="comment"> The cascade candidate change fraction is a number between 0 and 1 determining how large a fraction</span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> <span class="comment"> the <get_MSE> value should change within <get_cascade_candidate_stagnation_epochs> during</span></div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> <span class="comment"> training of the candidate neurons, in order for the training not to stagnate. If the training </span></div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> <span class="comment"> stagnates, the training of the candidate neurons will be ended and the best candidate will be selected.</span></div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span> <span class="comment"> This means:</span></div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span> <span class="comment"> If the MSE does not change by a fraction of <get_cascade_candidate_change_fraction> during a </span></div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span> <span class="comment"> period of <get_cascade_candidate_stagnation_epochs>, the training of the candidate neurons</span></div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> <span class="comment"> is stopped because the training has stagnated.</span></div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> <span class="comment"></span></div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span> <span class="comment"> If the cascade candidate change fraction is low, the candidate neurons will be trained more and if the</span></div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> <span class="comment"> fraction is high they will be trained less.</span></div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span> <span class="comment"> The default cascade candidate change fraction is 0.01, which is equalent to a 1% change in MSE.</span></div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span> <span class="comment"></span></div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span> <span class="comment"> <set_cascade_candidate_change_fraction>, <get_MSE>,</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span> <span class="comment"> <get_cascade_candidate_stagnation_epochs>, <fann_get_cascade_candidate_change_fraction></span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span> <span class="comment"></span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> <span class="keywordtype">float</span> get_cascade_candidate_change_fraction()</div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span> {</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span> <span class="keywordtype">float</span> change_fraction = 0.0f;</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span> {</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span> change_fraction = fann_get_cascade_candidate_change_fraction(ann);</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span> }</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span> <span class="keywordflow">return</span> change_fraction;</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span> }</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> </div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span> <span class="comment">/* Method: set_cascade_candidate_change_fraction</span></div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span> <span class="comment"></span></div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span> <span class="comment"> Sets the cascade candidate change fraction.</span></div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span> <span class="comment"> <get_cascade_candidate_change_fraction>,</span></div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> <span class="comment"> <fann_set_cascade_candidate_change_fraction></span></div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span> <span class="comment"></span></div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span> <span class="keywordtype">void</span> set_cascade_candidate_change_fraction(<span class="keywordtype">float</span> cascade_candidate_change_fraction)</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span> {</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> {</div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> fann_set_cascade_candidate_change_fraction(ann, cascade_candidate_change_fraction);</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> }</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> }</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> </div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span> <span class="comment">/* Method: get_cascade_candidate_stagnation_epochs</span></div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> <span class="comment"></span></div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> <span class="comment"> The number of cascade candidate stagnation epochs determines the number of epochs training is allowed to</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> <span class="comment"> continue without changing the MSE by a fraction of <get_cascade_candidate_change_fraction>.</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> <span class="comment"> See more info about this parameter in <get_cascade_candidate_change_fraction>.</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> <span class="comment"></span></div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> <span class="comment"> The default number of cascade candidate stagnation epochs is 12.</span></div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> <span class="comment"></span></div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> <span class="comment"> <set_cascade_candidate_stagnation_epochs>, <get_cascade_candidate_change_fraction>,</span></div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> <span class="comment"> <fann_get_cascade_candidate_stagnation_epochs></span></div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span> <span class="comment"></span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_candidate_stagnation_epochs()</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> {</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stagnation_epochs = 0;</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span> {</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span> stagnation_epochs = fann_get_cascade_candidate_stagnation_epochs(ann);</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span> }</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span> <span class="keywordflow">return</span> stagnation_epochs;</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> }</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span> </div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> <span class="comment">/* Method: set_cascade_candidate_stagnation_epochs</span></div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> <span class="comment"></span></div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span> <span class="comment"> Sets the number of cascade candidate stagnation epochs.</span></div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span> <span class="comment"> <get_cascade_candidate_stagnation_epochs>,</span></div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> <span class="comment"> <fann_set_cascade_candidate_stagnation_epochs></span></div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> <span class="comment"></span></div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> <span class="keywordtype">void</span> set_cascade_candidate_stagnation_epochs(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_candidate_stagnation_epochs)</div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> {</div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span> {</div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> fann_set_cascade_candidate_stagnation_epochs(ann, cascade_candidate_stagnation_epochs);</div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span> }</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span> }</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> </div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span> <span class="comment">/* Method: get_cascade_weight_multiplier</span></div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span> <span class="comment"></span></div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span> <span class="comment"> The weight multiplier is a parameter which is used to multiply the weights from the candidate neuron</span></div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> <span class="comment"> before adding the neuron to the neural network. This parameter is usually between 0 and 1, and is used</span></div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> <span class="comment"> to make the training a bit less aggressive.</span></div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span> <span class="comment"></span></div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> <span class="comment"> The default weight multiplier is 0.4</span></div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> <span class="comment"></span></div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> <span class="comment"> <set_cascade_weight_multiplier>, <fann_get_cascade_weight_multiplier></span></div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span> <span class="comment"></span></div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span> fann_type get_cascade_weight_multiplier()</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span> {</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span> fann_type weight_multiplier = 0;</div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> {</div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> weight_multiplier = fann_get_cascade_weight_multiplier(ann);</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span> }</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> <span class="keywordflow">return</span> weight_multiplier;</div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span> }</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span> </div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> <span class="comment">/* Method: set_cascade_weight_multiplier</span></div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span> <span class="comment"> Sets the weight multiplier.</span></div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span> <span class="comment"> <get_cascade_weight_multiplier>, <fann_set_cascade_weight_multiplier></span></div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span> <span class="comment"></span></div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span> <span class="keywordtype">void</span> set_cascade_weight_multiplier(fann_type cascade_weight_multiplier)</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span> {</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> {</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span> fann_set_cascade_weight_multiplier(ann, cascade_weight_multiplier);</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span> }</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> }</div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span> </div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span> <span class="comment">/* Method: get_cascade_candidate_limit</span></div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span> <span class="comment"></span></div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> <span class="comment"> The candidate limit is a limit for how much the candidate neuron may be trained.</span></div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span> <span class="comment"> The limit is a limit on the proportion between the MSE and candidate score.</span></div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> <span class="comment"> Set this to a lower value to avoid overfitting and to a higher if overfitting is</span></div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span> <span class="comment"> not a problem.</span></div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> <span class="comment"> The default candidate limit is 1000.0</span></div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> <span class="comment"></span></div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span> <span class="comment"> <set_cascade_candidate_limit>, <fann_get_cascade_candidate_limit></span></div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span> <span class="comment"></span></div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span> fann_type get_cascade_candidate_limit()</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span> {</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span> fann_type candidate_limit = 0;</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span> {</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span> candidate_limit = fann_get_cascade_candidate_limit(ann);</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> }</div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span> <span class="keywordflow">return</span> candidate_limit;</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span> }</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span> </div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span> <span class="comment">/* Method: set_cascade_candidate_limit</span></div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span> <span class="comment"></span></div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span> <span class="comment"> Sets the candidate limit.</span></div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span> <span class="comment"> <get_cascade_candidate_limit>, <fann_set_cascade_candidate_limit></span></div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span> <span class="comment"></span></div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span> <span class="keywordtype">void</span> set_cascade_candidate_limit(fann_type cascade_candidate_limit)</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span> {</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span> {</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span> fann_set_cascade_candidate_limit(ann, cascade_candidate_limit);</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span> }</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span> }</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span> </div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span> <span class="comment">/* Method: get_cascade_max_out_epochs</span></div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> <span class="comment"></span></div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span> <span class="comment"> The maximum out epochs determines the maximum number of epochs the output connections</span></div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span> <span class="comment"> may be trained after adding a new candidate neuron.</span></div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> <span class="comment"> The default max out epochs is 150</span></div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> <span class="comment"></span></div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span> <span class="comment"> <set_cascade_max_out_epochs>, <fann_get_cascade_max_out_epochs></span></div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span> <span class="comment"></span></div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_max_out_epochs()</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span> {</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_out_epochs = 0;</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span> {</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span> max_out_epochs = fann_get_cascade_max_out_epochs(ann);</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> }</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span> <span class="keywordflow">return</span> max_out_epochs;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span> }</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span> </div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> <span class="comment">/* Method: set_cascade_max_out_epochs</span></div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span> <span class="comment"></span></div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span> <span class="comment"> Sets the maximum out epochs.</span></div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span> <span class="comment"></span></div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span> <span class="comment"> <get_cascade_max_out_epochs>, <fann_set_cascade_max_out_epochs></span></div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> <span class="comment"></span></div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span> <span class="keywordtype">void</span> set_cascade_max_out_epochs(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_max_out_epochs)</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span> {</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span> {</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span> fann_set_cascade_max_out_epochs(ann, cascade_max_out_epochs);</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span> }</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span> }</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span> </div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span> <span class="comment">/* Method: get_cascade_max_cand_epochs</span></div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span> <span class="comment"></span></div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span> <span class="comment"> The maximum candidate epochs determines the maximum number of epochs the input </span></div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span> <span class="comment"> connections to the candidates may be trained before adding a new candidate neuron.</span></div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span> <span class="comment"> The default max candidate epochs is 150</span></div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span> <span class="comment"></span></div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span> <span class="comment"> <set_cascade_max_cand_epochs>, <fann_get_cascade_max_cand_epochs></span></div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span> <span class="comment"></span></div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_max_cand_epochs()</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span> {</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_cand_epochs = 0;</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span> {</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span> max_cand_epochs = fann_get_cascade_max_cand_epochs(ann);</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span> }</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span> <span class="keywordflow">return</span> max_cand_epochs;</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span> }</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> </div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span> <span class="comment">/* Method: set_cascade_max_cand_epochs</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span> <span class="comment"></span></div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span> <span class="comment"> Sets the max candidate epochs.</span></div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span> <span class="comment"> <get_cascade_max_cand_epochs>, <fann_set_cascade_max_cand_epochs></span></div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> <span class="comment"></span></div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> <span class="keywordtype">void</span> set_cascade_max_cand_epochs(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_max_cand_epochs)</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span> {</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> {</div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span> fann_set_cascade_max_cand_epochs(ann, cascade_max_cand_epochs);</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span> }</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span> }</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span> </div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span> <span class="comment">/* Method: get_cascade_num_candidates</span></div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span> <span class="comment"></span></div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span> <span class="comment"> The number of candidates used during training (calculated by multiplying <get_cascade_activation_functions_count>,</span></div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> <span class="comment"> <get_cascade_activation_steepnesses_count> and <get_cascade_num_candidate_groups>). </span></div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> <span class="comment"></span></div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span> <span class="comment"> The actual candidates is defined by the <get_cascade_activation_functions> and </span></div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span> <span class="comment"> <get_cascade_activation_steepnesses> arrays. These arrays define the activation functions </span></div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span> <span class="comment"> and activation steepnesses used for the candidate neurons. If there are 2 activation functions</span></div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span> <span class="comment"> in the activation function array and 3 steepnesses in the steepness array, then there will be </span></div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span> <span class="comment"> 2x3=6 different candidates which will be trained. These 6 different candidates can be copied into</span></div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span> <span class="comment"> several candidate groups, where the only difference between these groups is the initial weights.</span></div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span> <span class="comment"> If the number of groups is set to 2, then the number of candidate neurons will be 2x3x2=12. The </span></div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> <span class="comment"> number of candidate groups is defined by <set_cascade_num_candidate_groups>.</span></div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> <span class="comment"></span></div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> <span class="comment"> The default number of candidates is 6x4x2 = 48</span></div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> <span class="comment"></span></div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span> <span class="comment"> <get_cascade_activation_functions>, <get_cascade_activation_functions_count>, </span></div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span> <span class="comment"> <get_cascade_activation_steepnesses>, <get_cascade_activation_steepnesses_count>,</span></div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> <span class="comment"> <get_cascade_num_candidate_groups>, <fann_get_cascade_num_candidates></span></div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span> <span class="comment"></span></div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_num_candidates()</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> {</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_candidates = 0;</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> {</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span> num_candidates = fann_get_cascade_num_candidates(ann);</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span> }</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span> <span class="keywordflow">return</span> num_candidates;</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> }</div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span> </div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> <span class="comment">/* Method: get_cascade_activation_functions_count</span></div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span> <span class="comment"></span></div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span> <span class="comment"> The number of activation functions in the <get_cascade_activation_functions> array.</span></div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span> <span class="comment"></span></div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span> <span class="comment"> The default number of activation functions is 6.</span></div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span> <span class="comment"></span></div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span> <span class="comment"> <get_cascade_activation_functions>, <set_cascade_activation_functions>,</span></div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> <span class="comment"> <fann_get_cascade_activation_functions_count></span></div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span> <span class="comment"></span></div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_activation_functions_count()</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> {</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> activation_functions_count = 0;</div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span> {</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span> activation_functions_count = fann_get_cascade_activation_functions_count(ann);</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span> }</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> <span class="keywordflow">return</span> activation_functions_count;</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> }</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span> </div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span> <span class="comment">/* Method: get_cascade_activation_functions</span></div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span> <span class="comment"></span></div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> <span class="comment"> The cascade activation functions array is an array of the different activation functions used by</span></div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> <span class="comment"> the candidates. </span></div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span> <span class="comment"> See <get_cascade_num_candidates> for a description of which candidate neurons will be </span></div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span> <span class="comment"> generated by this array.</span></div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> <span class="comment"> <get_cascade_activation_functions_count>, <set_cascade_activation_functions>,</span></div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span> <span class="comment"> <FANN::activation_function_enum></span></div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span> <span class="comment"></span></div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span> activation_function_enum * get_cascade_activation_functions()</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span> {</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> <span class="keyword">enum</span> fann_activationfunc_enum *activation_functions = NULL;</div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span> {</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> activation_functions = fann_get_cascade_activation_functions(ann);</div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span> }</div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>activation_function_enum *<span class="keyword">></span>(activation_functions);</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span> }</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span> </div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span> <span class="comment">/* Method: set_cascade_activation_functions</span></div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> <span class="comment"></span></div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span> <span class="comment"> Sets the array of cascade candidate activation functions. The array must be just as long</span></div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span> <span class="comment"> as defined by the count.</span></div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span> <span class="comment"></span></div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span> <span class="comment"> See <get_cascade_num_candidates> for a description of which candidate neurons will be </span></div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span> <span class="comment"> generated by this array.</span></div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span> <span class="comment"></span></div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> <span class="comment"> <get_cascade_activation_steepnesses_count>, <get_cascade_activation_steepnesses>,</span></div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span> <span class="comment"> <fann_set_cascade_activation_functions></span></div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span> <span class="comment"></span></div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span> <span class="keywordtype">void</span> set_cascade_activation_functions(activation_function_enum *cascade_activation_functions,</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_activation_functions_count)</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span> {</div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span> {</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> fann_set_cascade_activation_functions(ann,</div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span> reinterpret_cast<enum fann_activationfunc_enum *>(cascade_activation_functions),</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> cascade_activation_functions_count);</div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> }</div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span> }</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span> </div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> <span class="comment">/* Method: get_cascade_activation_steepnesses_count</span></div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span> <span class="comment"></span></div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span> <span class="comment"> The number of activation steepnesses in the <get_cascade_activation_functions> array.</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> <span class="comment"></span></div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span> <span class="comment"> The default number of activation steepnesses is 4.</span></div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span> <span class="comment"></span></div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span> <span class="comment"> <get_cascade_activation_steepnesses>, <set_cascade_activation_functions>,</span></div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> <span class="comment"> <fann_get_cascade_activation_steepnesses_count></span></div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span> <span class="comment"></span></div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_activation_steepnesses_count()</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span> {</div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> activation_steepness_count = 0;</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span> {</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span> activation_steepness_count = fann_get_cascade_activation_steepnesses_count(ann);</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span> }</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span> <span class="keywordflow">return</span> activation_steepness_count;</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span> }</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span> </div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span> <span class="comment">/* Method: get_cascade_activation_steepnesses</span></div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span> <span class="comment"></span></div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span> <span class="comment"> The cascade activation steepnesses array is an array of the different activation functions used by</span></div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span> <span class="comment"> the candidates.</span></div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span> <span class="comment"></span></div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span> <span class="comment"> See <get_cascade_num_candidates> for a description of which candidate neurons will be </span></div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span> <span class="comment"> generated by this array.</span></div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span> <span class="comment"></span></div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span> <span class="comment"> The default activation steepnesses is {0.25, 0.50, 0.75, 1.00}</span></div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span> <span class="comment"></span></div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span> <span class="comment"> <set_cascade_activation_steepnesses>, <get_cascade_activation_steepnesses_count>,</span></div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span> <span class="comment"> <fann_get_cascade_activation_steepnesses></span></div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span> <span class="comment"></span></div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span> fann_type *get_cascade_activation_steepnesses()</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> {</div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> fann_type *activation_steepnesses = NULL;</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> {</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> activation_steepnesses = fann_get_cascade_activation_steepnesses(ann);</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span> }</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span> <span class="keywordflow">return</span> activation_steepnesses;</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span> } </div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> </div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> <span class="comment">/* Method: set_cascade_activation_steepnesses</span></div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span> <span class="comment"></span></div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span> <span class="comment"> Sets the array of cascade candidate activation steepnesses. The array must be just as long</span></div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span> <span class="comment"> as defined by the count.</span></div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span> <span class="comment"></span></div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span> <span class="comment"> See <get_cascade_num_candidates> for a description of which candidate neurons will be </span></div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span> <span class="comment"> generated by this array.</span></div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span> <span class="comment"></span></div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span> <span class="comment"> <get_cascade_activation_steepnesses>, <get_cascade_activation_steepnesses_count>,</span></div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span> <span class="comment"> <fann_set_cascade_activation_steepnesses></span></div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span> <span class="comment"></span></div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span> <span class="keywordtype">void</span> set_cascade_activation_steepnesses(fann_type *cascade_activation_steepnesses,</div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_activation_steepnesses_count)</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span> {</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> {</div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span> fann_set_cascade_activation_steepnesses(ann,</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span> cascade_activation_steepnesses, cascade_activation_steepnesses_count);</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span> }</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span> }</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span> </div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span> <span class="comment">/* Method: get_cascade_num_candidate_groups</span></div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span> <span class="comment"></span></div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span> <span class="comment"> The number of candidate groups is the number of groups of identical candidates which will be used</span></div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span> <span class="comment"> during training.</span></div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span> <span class="comment"> This number can be used to have more candidates without having to define new parameters for the candidates.</span></div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span> <span class="comment"> See <get_cascade_num_candidates> for a description of which candidate neurons will be </span></div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span> <span class="comment"> generated by this parameter.</span></div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span> <span class="comment"> The default number of candidate groups is 2</span></div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span> <span class="comment"></span></div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span> <span class="comment"> <set_cascade_num_candidate_groups>, <fann_get_cascade_num_candidate_groups></span></div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span> <span class="comment"></span></div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_cascade_num_candidate_groups()</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span> {</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_candidate_groups = 0;</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span> {</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span> num_candidate_groups = fann_get_cascade_num_candidate_groups(ann);</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span> }</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span> <span class="keywordflow">return</span> num_candidate_groups;</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span> }</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span> </div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span> <span class="comment">/* Method: set_cascade_num_candidate_groups</span></div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span> <span class="comment"></span></div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span> <span class="comment"> Sets the number of candidate groups.</span></div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span> <span class="comment"></span></div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span> <span class="comment"> <get_cascade_num_candidate_groups>, <fann_set_cascade_num_candidate_groups></span></div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span> <span class="comment"></span></div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span> <span class="comment"> This function appears in FANN >= 2.0.0.</span></div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span> <span class="keywordtype">void</span> set_cascade_num_candidate_groups(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cascade_num_candidate_groups)</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span> {</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span> {</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span> fann_set_cascade_num_candidate_groups(ann, cascade_num_candidate_groups);</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span> }</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span> }</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span> </div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span> </div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span> <span class="preprocessor">#ifndef FIXEDFANN</span></div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span> <span class="preprocessor"></span> <span class="comment">/* Method: scale_train</span></div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span> <span class="comment"></span></div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span> <span class="comment"> Scale input and output data based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span> <span class="comment"></span></div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span> <span class="comment"> <descale_train>, <fann_scale_train></span></div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span> <span class="comment"></span></div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span> <span class="keywordtype">void</span> scale_train(<a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span> {</div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span> {</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span> fann_scale_train(ann, data.train_data);</div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span> }</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span> }</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span> </div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span> <span class="comment">/* Method: descale_train</span></div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span> <span class="comment"></span></div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span> <span class="comment"> Descale input and output data based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span> <span class="comment"></span></div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span> <span class="comment"> <scale_train>, <fann_descale_train></span></div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span> <span class="comment"></span></div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span> <span class="keywordtype">void</span> descale_train(<a class="code" href="classFANN_1_1training__data.html">training_data</a> &data)</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span> {</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span> {</div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span> fann_descale_train(ann, data.train_data);</div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span> }</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span> }</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span> </div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span> <span class="comment">/* Method: set_input_scaling_params</span></div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span> <span class="comment"></span></div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span> <span class="comment"> Calculate scaling parameters for future use based on training data.</span></div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span> <span class="comment"></span></div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span> <span class="comment"> <set_output_scaling_params>, <fann_set_input_scaling_params></span></div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span> <span class="comment"></span></div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span> <span class="keywordtype">bool</span> set_input_scaling_params(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data, <span class="keywordtype">float</span> new_input_min, <span class="keywordtype">float</span> new_input_max)</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span> {</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span> <span class="keywordtype">bool</span> status = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span> {</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span> status = (fann_set_input_scaling_params(ann, data.train_data, new_input_min, new_input_max) != -1);</div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span> }</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span> }</div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span> </div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span> <span class="comment">/* Method: set_output_scaling_params</span></div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span> <span class="comment"></span></div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span> <span class="comment"> Calculate scaling parameters for future use based on training data.</span></div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span> <span class="comment"></span></div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span> <span class="comment"> <set_input_scaling_params>, <fann_set_output_scaling_params></span></div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span> <span class="comment"></span></div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span> <span class="keywordtype">bool</span> set_output_scaling_params(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data, <span class="keywordtype">float</span> new_output_min, <span class="keywordtype">float</span> new_output_max)</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span> {</div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span> <span class="keywordtype">bool</span> status = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span> {</div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span> status = (fann_set_output_scaling_params(ann, data.train_data, new_output_min, new_output_max) != -1);</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span> }</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span> }</div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span> </div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span> <span class="comment">/* Method: set_scaling_params</span></div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span> <span class="comment"></span></div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span> <span class="comment"> Calculate scaling parameters for future use based on training data.</span></div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span> <span class="comment"></span></div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span> <span class="comment"> <clear_scaling_params>, <fann_set_scaling_params></span></div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span> <span class="comment"></span></div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span> <span class="keywordtype">bool</span> set_scaling_params(<span class="keyword">const</span> <a class="code" href="classFANN_1_1training__data.html">training_data</a> &data,</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span> <span class="keywordtype">float</span> new_input_min, <span class="keywordtype">float</span> new_input_max, <span class="keywordtype">float</span> new_output_min, <span class="keywordtype">float</span> new_output_max)</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span> {</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span> <span class="keywordtype">bool</span> status = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span> {</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span> status = (fann_set_scaling_params(ann, data.train_data,</div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span> new_input_min, new_input_max, new_output_min, new_output_max) != -1);</div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span> }</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span> }</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span> </div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> <span class="comment">/* Method: clear_scaling_params</span></div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span> <span class="comment"></span></div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span> <span class="comment"> Clears scaling parameters.</span></div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span> <span class="comment"></span></div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span> <span class="comment"> <set_scaling_params>, <fann_clear_scaling_params></span></div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span> <span class="comment"></span></div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span> <span class="keywordtype">bool</span> clear_scaling_params()</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span> {</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span> <span class="keywordtype">bool</span> status = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span> {</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span> status = (fann_clear_scaling_params(ann) != -1);</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span> }</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span> <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span> }</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span> </div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span> <span class="comment">/* Method: scale_input</span></div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span> <span class="comment"></span></div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span> <span class="comment"> Scale data in input vector before feed it to ann based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span> <span class="comment"></span></div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span> <span class="comment"> <descale_input>, <scale_output>, <fann_scale_input></span></div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span> <span class="comment"></span></div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span> <span class="keywordtype">void</span> scale_input(fann_type *input_vector)</div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span> {</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span> {</div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span> fann_scale_input(ann, input_vector );</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span> }</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span> }</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span> </div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span> <span class="comment">/* Method: scale_output</span></div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span> <span class="comment"></span></div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span> <span class="comment"> Scale data in output vector before feed it to ann based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span> <span class="comment"></span></div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span> <span class="comment"> <descale_output>, <scale_input>, <fann_scale_output></span></div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span> <span class="comment"></span></div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span> <span class="keywordtype">void</span> scale_output(fann_type *output_vector)</div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span> {</div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span> {</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span> fann_scale_output(ann, output_vector );</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span> }</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span> }</div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span> </div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span> <span class="comment">/* Method: descale_input</span></div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span> <span class="comment"></span></div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span> <span class="comment"> Scale data in input vector after get it from ann based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span> <span class="comment"></span></div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span> <span class="comment"> <scale_input>, <descale_output>, <fann_descale_input></span></div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span> <span class="comment"></span></div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span> <span class="keywordtype">void</span> descale_input(fann_type *input_vector)</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span> {</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span> {</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> fann_descale_input(ann, input_vector );</div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span> }</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span> }</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span> </div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span> <span class="comment">/* Method: descale_output</span></div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span> <span class="comment"></span></div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span> <span class="comment"> Scale data in output vector after get it from ann based on previously calculated parameters.</span></div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span> <span class="comment"></span></div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span> <span class="comment"> <scale_output>, <descale_input>, <fann_descale_output></span></div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span> <span class="comment"></span></div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span> <span class="comment"> This function appears in FANN >= 2.1.0.</span></div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span> <span class="keywordtype">void</span> descale_output(fann_type *output_vector)</div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span> {</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span> <span class="keywordflow">if</span> (ann != NULL)</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span> {</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span> fann_descale_output(ann, output_vector );</div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span> }</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span> }</div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span> </div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span> <span class="preprocessor">#endif </span><span class="comment">/* FIXEDFANN */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span> </div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span> <span class="comment">/* Method: set_error_log</span></div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span> <span class="comment"></span></div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span> <span class="comment"> Change where errors are logged to.</span></div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span> <span class="comment"> If log_file is NULL, no errors will be printed.</span></div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span> <span class="comment"> If neural_net is empty i.e. ann is NULL, the default log will be set.</span></div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span> <span class="comment"> The default log is the log used when creating a neural_net.</span></div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span> <span class="comment"> This default log will also be the default for all new structs</span></div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span> <span class="comment"> that are created.</span></div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span> <span class="comment"> The default behavior is to log them to stderr.</span></div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span> <span class="comment"> <struct fann_error>, <fann_set_error_log></span></div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span> <span class="keywordtype">void</span> set_error_log(FILE *log_file)</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span> {</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span> fann_set_error_log(reinterpret_cast<struct fann_error *>(ann), log_file);</div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span> }</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span> </div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span> <span class="comment">/* Method: get_errno</span></div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span> <span class="comment"></span></div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span> <span class="comment"> Returns the last error number.</span></div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span> <span class="comment"> See also:</span></div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span> <span class="comment"> <fann_errno_enum>, <fann_reset_errno>, <fann_get_errno></span></div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> get_errno()</div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span> {</div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span> <span class="keywordflow">return</span> fann_get_errno(reinterpret_cast<struct fann_error *>(ann));</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span> }</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span> </div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span> <span class="comment">/* Method: reset_errno</span></div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span> <span class="comment"></span></div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span> <span class="comment"> Resets the last error number.</span></div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span> <span class="keywordtype">void</span> reset_errno()</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span> {</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span> fann_reset_errno(reinterpret_cast<struct fann_error *>(ann));</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span> }</div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span> </div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span> <span class="comment">/* Method: reset_errstr</span></div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span> <span class="comment"></span></div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span> <span class="comment"> Resets the last error string.</span></div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span> <span class="comment"></span></div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span> <span class="keywordtype">void</span> reset_errstr()</div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span> {</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span> fann_reset_errstr(reinterpret_cast<struct fann_error *>(ann));</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span> }</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span> </div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span> <span class="comment">/* Method: get_errstr</span></div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span> <span class="comment"></span></div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span> <span class="comment"> Returns the last errstr.</span></div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span> <span class="comment"> </span></div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span> <span class="comment"> This function calls <fann_reset_errno> and <fann_reset_errstr></span></div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span> <span class="comment"></span></div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span> std::string get_errstr()</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span> {</div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span> <span class="keywordflow">return</span> std::string(fann_get_errstr(reinterpret_cast<struct fann_error *>(ann)));</div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span> }</div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span> </div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span> <span class="comment">/* Method: print_error</span></div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span> <span class="comment"></span></div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span> <span class="comment"> Prints the last error to stderr.</span></div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span> <span class="comment"></span></div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span> <span class="comment"> This function appears in FANN >= 1.1.0. </span></div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span> <span class="comment"> */</span> </div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span> <span class="keywordtype">void</span> print_error()</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span> {</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span> fann_print_error(reinterpret_cast<struct fann_error *>(ann));</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span> }</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span> </div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span> <span class="comment">/*********************************************************************/</span></div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span> </div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span> <span class="comment">// Structure used by set_callback to hold information about a user callback</span></div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>user_context_type</div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span> {</div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span> callback_type user_callback; <span class="comment">// Pointer to user callback function</span></div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span> <span class="keywordtype">void</span> *user_data; <span class="comment">// Arbitrary data pointer passed to the callback</span></div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span> <a class="code" href="classFANN_1_1neural__net.html">neural_net</a> *net; <span class="comment">// This pointer for the neural network</span></div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span> } user_context;</div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span> </div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span> <span class="comment">// Internal callback used to convert from pointers to class references</span></div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span> <span class="keyword">static</span> <span class="keywordtype">int</span> FANN_API internal_callback(<span class="keyword">struct</span> fann *ann, <span class="keyword">struct</span> fann_train_data *train, </div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_epochs, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs_between_reports, <span class="keywordtype">float</span> desired_error, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> epochs)</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span> {</div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span> user_context *user_data = <span class="keyword">static_cast<</span>user_context *<span class="keyword">></span>(fann_get_user_data(ann));</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span> <span class="keywordflow">if</span> (user_data != NULL)</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span> {</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span> <a class="code" href="classFANN_1_1training__data.html">FANN::training_data</a> data;</div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span> data.train_data = train;</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span> </div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span> <span class="keywordtype">int</span> result = (*user_data->user_callback)(*user_data->net,</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span> data, max_epochs, epochs_between_reports, desired_error, epochs, user_data);</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span> </div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span> data.train_data = NULL; <span class="comment">// Prevent automatic cleanup</span></div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span> }</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span> {</div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span> <span class="keywordflow">return</span> -1; <span class="comment">// This should not occur except if out of memory</span></div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span> }</div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span> }</div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span> <span class="comment">// Pointer the encapsulated fann neural net structure</span></div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span> <span class="keyword">struct </span>fann *ann;</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span> };</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span> </div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span> <span class="comment">/*************************************************************************/</span></div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span> };</div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span> </div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span> <span class="preprocessor">#endif </span><span class="comment">/* FANN_CPP_H_INCLUDED */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classFANN_1_1training__data_html"><div class="ttname"><a href="classFANN_1_1training__data.html">FANN::training_data</a></div><div class="ttdef"><b>Definition:</b> <a href="myfann__cpp_8h_source.html#l00362">myfann_cpp.h:362</a></div></div>
+<div class="ttc" id="classFANN_1_1neural__net_html"><div class="ttname"><a href="classFANN_1_1neural__net.html">FANN::neural_net</a></div><div class="ttdef"><b>Definition:</b> <a href="myfann__cpp_8h_source.html#l00978">myfann_cpp.h:978</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/nav_f.png b/doc/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
Binary files /dev/null and b/doc/html/nav_f.png differ
diff --git a/doc/html/nav_g.png b/doc/html/nav_g.png
new file mode 100644
index 0000000..2093a23
Binary files /dev/null and b/doc/html/nav_g.png differ
diff --git a/doc/html/nav_h.png b/doc/html/nav_h.png
new file mode 100644
index 0000000..33389b1
Binary files /dev/null and b/doc/html/nav_h.png differ
diff --git a/doc/html/open.png b/doc/html/open.png
new file mode 100644
index 0000000..30f75c7
Binary files /dev/null and b/doc/html/open.png differ
diff --git a/doc/html/pages.html b/doc/html/pages.html
new file mode 100644
index 0000000..65a84a6
--- /dev/null
+++ b/doc/html/pages.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Related Pages</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Related Pages</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_apps.html" target="_self">apps</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkann.html" target="_self">examples_pkann</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkascii2img.html" target="_self">examples_pkascii2img</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkascii2ogr.html" target="_self">examples_pkascii2ogr</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkcomposite.html" target="_self">examples_pkcomposite</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkcreatect.html" target="_self">examples_pkcreatect</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkcrop.html" target="_self">examples_pkcrop</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkdiff.html" target="_self">examples_pkdiff</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkdsm2shadow.html" target="_self">examples_pkdsm2shadow</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkdumpimg.html" target="_self">examples_pkdumpimg</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkdumpogr.html" target="_self">examples_pkdumpogr</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkextract.html" target="_self">examples_pkextract</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkfilter.html" target="_self">examples_pkfilter</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkgetmask.html" target="_self">examples_pkgetmask</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkinfo.html" target="_self">examples_pkinfo</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkpolygonize.html" target="_self">examples_pkpolygonize</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkreclass.html" target="_self">examples_pkreclass</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pksetmask.html" target="_self">examples_pksetmask</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pksieve.html" target="_self">examples_pksieve</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pkstatogr.html" target="_self">examples_pkstatogr</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_examples_pksvm.html" target="_self">examples_pksvm</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_faq_pkcomposite.html" target="_self">faq_pkcomposite</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_faq_pksetmask.html" target="_self">faq_pksetmask</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_header.html" target="_self">header</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_installation_linux.html" target="_self">installation_linux</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_installation_windows.html" target="_self">installation_windows</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md_mainpage.html" target="_self">mainpage</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkann.html" target="_self">pkann</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkascii2img.html" target="_self">pkascii2img</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkascii2ogr.html" target="_self">pkascii2ogr</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkcomposite.html" target="_self">pkcomposite</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkcreatect.html" target="_self">pkcreatect</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkcrop.html" target="_self">pkcrop</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkdiff.html" target="_self">pkdiff</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkdsm2shadow.html" target="_self">pkdsm2shadow</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkdumpimg.html" target="_self">pkdumpimg</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkdumpogr.html" target="_self">pkdumpogr</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkegcs.html" target="_self">pkegcs</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkextract.html" target="_self">pkextract</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfillnodata.html" target="_self">pkfillnodata</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfilter.html" target="_self">pkfilter</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfilterascii.html" target="_self">pkfilterascii</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfilterdem.html" target="_self">pkfilterdem</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfsann.html" target="_self">pkfsann</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkfssvm.html" target="_self">pkfssvm</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkgetmask.html" target="_self">pkgetmask</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkinfo.html" target="_self">pkinfo</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkkalman.html" target="_self">pkkalman</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pklas2img.html" target="_self">pklas2img</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkoptsvm.html" target="_self">pkoptsvm</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkpolygonize.html" target="_self">pkpolygonize</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkreclass.html" target="_self">pkreclass</a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkregann.html" target="_self">pkregann</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pksetmask.html" target="_self">pksetmask</a></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pksieve.html" target="_self">pksieve</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkstat.html" target="_self">pkstat</a></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkstatascii.html" target="_self">pkstatascii</a></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="pkstatogr.html" target="_self">pkstatogr</a></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="pksvm.html" target="_self">pksvm</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkann.html b/doc/html/pkann.html
new file mode 100644
index 0000000..e3b75fe
--- /dev/null
+++ b/doc/html/pkann.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkann</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkann </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>classify raster image using Artificial Neural Network </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkann -t training [-i input -o output] [-cv value] </code></p>
+<p><code></code></p>
+<p><code> Options: [-tln layer]* [-c name -r value]* [-of GDALformat|-f OGRformat] [-co NAME=VALUE]* [-ct filename] [-label attribute] [-prior value]* [-nn number]* [-m filename [-msknodata value]*] [-nodata value]</code></p>
+<p><code> Advanced options: [-b band] [-s band] [-e band] [-bal size]* [-min] [-bag value] [-bs value] [-comb rule] [-cb filename] [-prob filename] [-pim priorimage] [–offset value] [–scale value] [–connection 0|1] [-w weights]* [–learning rate] [–maxit number] </code></p>
+<h1><a class="anchor" id="pkann_description"></a>
+Description</h1>
+<p>The utility pkann implements an artificial neural network (ANN) to solve a supervised classification problem. The implementation is based on the open source C++ library <a href="http://leenissen.dk/fann/wp/">fann</a>). Both raster and vector files are supported as input. The output will contain the classification result, either in raster or vector format, corresponding to the format of the input. A training sample must be provided as an OGR vector dataset that contains the class label [...]
+<h1><a class="anchor" id="pkann_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image </td></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) </td></tr>
+<tr>
+<td>tln </td><td>tln </td><td>std::string </td><td></td><td>training layer name(s) </td></tr>
+<tr>
+<td>label </td><td>label </td><td>std::string </td><td>label </td><td>identifier for class label in training vector file. </td></tr>
+<tr>
+<td>bal </td><td>balance </td><td>unsigned int </td><td>0 </td><td>balance the input data to this number of samples for each class </td></tr>
+<tr>
+<td>min </td><td>min </td><td>int </td><td>0 </td><td>if number of training pixels is less then min, do not take this class into account (0: consider all classes) </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td></td><td>band index (starting from 0, either use band option or use start to end) </td></tr>
+<tr>
+<td>s </td><td>start </td><td>double </td><td>0 </td><td>start band sequence number </td></tr>
+<tr>
+<td>e </td><td>end </td><td>double </td><td>0 </td><td>end band sequence number (set to 0 to include bands) </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td>a </td><td>aggreg </td><td>unsigned short </td><td>1 </td><td>how to combine aggregated classifiers, see also rc option (1: sum rule, 2: max rule). </td></tr>
+<tr>
+<td>prior </td><td>prior </td><td>double </td><td>0 </td><td>prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ) </td></tr>
+<tr>
+<td>pim </td><td>priorimg </td><td>std::string </td><td></td><td>prior probability image (multi-band img with band for each class </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>0 </td><td>n-fold cross validation mode </td></tr>
+<tr>
+<td>cmf </td><td>cmf </td><td>std::string </td><td>ascii </td><td>Format for confusion matrix (ascii or latex) </td></tr>
+<tr>
+<td>nn </td><td>nneuron </td><td>unsigned int </td><td>5 </td><td>number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) </td></tr>
+<tr>
+<td></td><td>connection </td><td>float </td><td>1 </td><td>connection reate (default: 1.0 for a fully connected network) </td></tr>
+<tr>
+<td>w </td><td>weights </td><td>float </td><td>0 </td><td>weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer) </td></tr>
+<tr>
+<td>l </td><td>learning </td><td>float </td><td>0.7 </td><td>learning rate (default: 0.7) </td></tr>
+<tr>
+<td></td><td>maxit </td><td>unsigned int </td><td>500 </td><td>number of maximum iterations (epoch) (default: 500) </td></tr>
+<tr>
+<td>comb </td><td>comb </td><td>unsigned short </td><td>0 </td><td>how to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option. Default is sum rule (0) </td></tr>
+<tr>
+<td>bag </td><td>bag </td><td>unsigned short </td><td>1 </td><td>Number of bootstrap aggregations (default is no bagging: 1) </td></tr>
+<tr>
+<td>bs </td><td>bsize </td><td>int </td><td>100 </td><td>Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively </td></tr>
+<tr>
+<td>cb </td><td>classbag </td><td>std::string </td><td></td><td>output for each individual bootstrap aggregation (default is blank) </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. </td></tr>
+<tr>
+<td>msknodata </td><td>msknodata </td><td>short </td><td>0 </td><td>mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image. Default is 0 </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>unsigned short </td><td>0 </td><td>nodata value to put where image is masked as nodata </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>output classification image </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>colour table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td></td><td>prob </td><td>std::string </td><td></td><td>probability image. Default is no probability image </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>SQLite </td><td>Output ogr format for active training sample </td></tr>
+<tr>
+<td>na </td><td>nactive </td><td>unsigned int </td><td>1 </td><td>number of active training points </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>list of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>list of class values (use same order as in class opt). </td></tr>
+</table>
+Usage: pkann -t training [-i input -o output] [-cv value]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkann can be found <a class="el" href="md_examples_pkann.html#examples_pkann">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkann_8cc_source.html b/doc/html/pkann_8cc_source.html
new file mode 100644
index 0000000..c37ad08
--- /dev/null
+++ b/doc/html/pkann_8cc_source.html
@@ -0,0 +1,1274 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkann.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkann.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkann.cc: classify raster image using Artificial Neural Network</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "base/PosValue.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "floatfann.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "algorithms/myfann_cpp.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> vector<double> priors;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">//--------------------------- command line options ------------------------------------</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input image"</span>); </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> tlayer_opt(<span class="stringliteral">"tln"</span>, <span class="stringliteral">"tln"</span>, <span class="stringliteral">"training layer name(s)"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"label"</span>, <span class="stringliteral">"label"</span>, <span class="stringliteral">"identifier for class label in training vector file."</span>,<span class="stringliteral">"label"</span>); </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> balance_opt(<span class="stringliteral">"bal"</span>, <span class="stringliteral">"balance"</span>, <span class="stringliteral">"balance the input data to this number of samples for each class"</span>, 0);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> random_opt(<span class="stringliteral">"random"</span>, <span class="stringliteral">"random"</span>, <span class="stringliteral">"in case of balance, randomize input data"</span>, <span class="keyword">true</span>,2);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minSize_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"if number of training pixels is less then min, do not take this class into account (0: consider all classes)"</span>, 0);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index (starting from 0, either use band option or use start to end)"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bstart_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"start"</span>, <span class="stringliteral">"start band sequence number"</span>,0); </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bend_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"end"</span>, <span class="stringliteral">"end band sequence number (set to 0 to include bands)"</span>, 0); </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> aggreg_opt(<span class="stringliteral">"a"</span>, <span class="stringliteral">"aggreg"</span>, <span class="stringliteral">"how to combine aggregated classifiers, see also rc option (1: sum rule, 2: max rule)."</span>,1);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> priors_opt(<span class="stringliteral">"prior"</span>, <span class="stringliteral">"prior"</span>, <span class="stringliteral">"prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 )"</span>, 0.0); </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> priorimg_opt(<span class="stringliteral">"pim"</span>, <span class="stringliteral">"priorimg"</span>, <span class="stringliteral">"prior probability image (multi-band img with band for each class"</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"n-fold cross validation mode"</span>,0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> cmformat_opt(<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"Format for confusion matrix (ascii or latex)"</span>,<span class="stringliteral">"ascii"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nneuron_opt(<span class="stringliteral">"nn"</span>, <span class="stringliteral">"nneuron"</span>, <span class="stringliteral">"number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons)&quo [...]
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> connection_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"connection"</span>, <span class="stringliteral">"connection reate (default: 1.0 for a fully connected network)"</span>, 1.0); </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> learning_opt(<span class="stringliteral">"l"</span>, <span class="stringliteral">"learning"</span>, <span class="stringliteral">"learning rate (default: 0.7)"</span>, 0.7); </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> weights_opt(<span class="stringliteral">"w"</span>, <span class="stringliteral">"weights"</span>, <span class="stringliteral">"weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer)" [...]
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> maxit_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"maxit"</span>, <span class="stringliteral">"number of maximum iterations (epoch) (default: 500)"</span>, 500); </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> comb_opt(<span class="stringliteral">"comb"</span>, <span class="stringliteral">"comb"</span>, <span class="stringliteral">"how to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option. Default is sum rule (0)"</span>,0); </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> bag_opt(<span class="stringliteral">"bag"</span>, <span class="stringliteral">"bag"</span>, <span class="stringliteral">"Number of bootstrap aggregations (default is no bagging: 1)"</span>, 1);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> bagSize_opt(<span class="stringliteral">"bs"</span>, <span class="stringliteral">"bsize"</span>, <span class="stringliteral">"Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively"</span>, 100);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classBag_opt(<span class="stringliteral">"cb"</span>, <span class="stringliteral">"classbag"</span>, <span class="stringliteral">"output for each individual bootstrap aggregation (default is blank)"</span>); </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata."</span>);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> msknodata_opt(<span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image. Default [...]
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value to put where image is masked as nodata"</span>, 0);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"output classification image"</span>); </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"colour table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>); </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> prob_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"prob"</span>, <span class="stringliteral">"probability image. Default is no probability image"</span>); </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> entropy_opt(<span class="stringliteral">"entropy"</span>, <span class="stringliteral">"entropy"</span>, <span class="stringliteral">"entropy image (measure for uncertainty of classifier output"</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> active_opt(<span class="stringliteral">"active"</span>, <span class="stringliteral">"active"</span>, <span class="stringliteral">"ogr output for active training sample."</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output ogr format for active training sample"</span>,<span class="stringliteral">"SQLite"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nactive_opt(<span class="stringliteral">"na"</span>, <span class="stringliteral">"nactive"</span>, <span class="stringliteral">"number of active training points"</span>,1);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"list of class names."</span>); </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"list of class values (use same order as in class opt)."</span>); </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"set to: 0 (results only), 1 (confusion matrix), 2 (debug)"</span>,0,2);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> bstart_opt.setHide(1);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> bend_opt.setHide(1);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> balance_opt.setHide(1);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> bag_opt.setHide(1);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> bagSize_opt.setHide(1);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> comb_opt.setHide(1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> classBag_opt.setHide(1);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> prob_opt.setHide(1);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> priorimg_opt.setHide(1);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> connection_opt.setHide(1);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> weights_opt.setHide(1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> maxit_opt.setHide(1);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> learning_opt.setHide(1);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> tlayer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> balance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> minSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> bstart_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> bend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> aggreg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> priors_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> priorimg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> cmformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> nneuron_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> connection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> weights_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> learning_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> maxit_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> comb_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> bag_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> bagSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> classBag_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> msknodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> prob_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> entropy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> active_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> nactive_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> exit(0);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> cout << endl;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> cout << <span class="stringliteral">"Usage: pkann -t training [-i input -o output] [-cv value]"</span> << endl;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> cout << endl;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span>(entropy_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> entropy_opt.clear();</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span>(active_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> active_opt.clear();</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(priorimg_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> priorimg_opt.clear();</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> cout << <span class="stringliteral">"image filename: "</span> << input_opt[0] << endl;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> cout << <span class="stringliteral">"mask filename: "</span> << mask_opt[0] << endl;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(training_opt.size()){</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> cout << <span class="stringliteral">"training vector file: "</span> << endl;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<training_opt.size();++ifile)</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> cout << training_opt[ifile] << endl;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> cerr << <span class="stringliteral">"no training file set!"</span> << endl;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> cout << <span class="stringliteral">"verbose: "</span> << verbose_opt[0] << endl;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nbag=(training_opt.size()>1)?training_opt.size():bag_opt[0];</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> cout << <span class="stringliteral">"number of bootstrap aggregations: "</span> << nbag << endl;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> activeWriter;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReader(training_opt[0]);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> activeWriter.open(active_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> activeWriter.createLayer(active_opt[0],trainingReader.getProjection(),wkbPoint,NULL);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> activeWriter.copyFields(trainingReader);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> vector<PosValue> activePoints(nactive_opt[0]);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iactive=0;iactive<activePoints.size();++iactive){</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> activePoints[iactive].value=1.0;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> activePoints[iactive].posx=0.0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> activePoints[iactive].posy=0.0;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalSamples=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nactive=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> vector<FANN::neural_net> net(nbag);<span class="comment">//the neural network</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nclass=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">int</span> startBand=2;<span class="comment">//first two bands represent X and Y pos</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(priors_opt.size()>1){<span class="comment">//priors from argument list</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> priors.resize(priors_opt.size());</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">double</span> normPrior=0;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<priors_opt.size();++iclass){</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> priors[iclass]=priors_opt[iclass];</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> normPrior+=priors[iclass];</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">//normalize</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<priors_opt.size();++iclass)</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> priors[iclass]/=normPrior;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">//sort bands</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> std::sort(band_opt.begin(),band_opt.end());</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> map<string,short> classValueMap;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> vector<std::string> nameVector;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> classValueMap[classname_opt[iclass]]=classvalue_opt[iclass];</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">//----------------------------------- Training -------------------------------</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> cm;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> vector< vector<double> > offset(nbag);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> vector< vector<double> > scale(nbag);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> map<string,Vector2d<float> > trainingMap;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> vector< Vector2d<float> > trainingPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> vector<string> fields;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">//organize training data</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(ibag<training_opt.size()){<span class="comment">//if bag contains new training pixels</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> trainingMap.clear();</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> trainingPixels.clear();</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> cout << <span class="stringliteral">"reading imageVector file "</span> << training_opt[0] << endl;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReaderBag(training_opt[ibag]);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span>(trainingMap.size()<2){</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from training file, did you provide class labels in training sample (see option label)?"</span>;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> trainingReaderBag.close();</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> exit(1);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> exit(1);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">//delete class 0 ?</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// if(verbose_opt[0]>=1)</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// std::cout << "erasing class 0 from training set (" << trainingMap[0].size() << " from " << totalSamples << ") samples" << std::endl;</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">// totalSamples-=trainingMap[0].size();</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">// trainingMap.erase(0);</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">//convert map to vector</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> std::cout << <span class="stringliteral">"training pixels: "</span> << std::endl;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">//delete small classes</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>((mapit->second).size()<minSize_opt[0]){</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> trainingMap.erase(mapit);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> trainingPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> ++mapit;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span>(!ibag){</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> nclass=trainingPixels.size();</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(classname_opt.size())</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> assert(nclass==classname_opt.size());</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> nband=(training_opt.size())?trainingPixels[0][0].size()-2:trainingPixels[0][0].size();<span class="comment">//X and Y</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> assert(nclass==trainingPixels.size());</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> assert(nband==(training_opt.size())?trainingPixels[0][0].size()-2:trainingPixels[0][0].size());</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment">//do not remove outliers here: could easily be obtained through ogr2ogr -where 'B2<110' output.shp input.shp</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">//balance training data</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span>(balance_opt[0]>0){</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">while</span>(balance_opt.size()<nclass)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> balance_opt.push_back(balance_opt.back());</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> srand(time(NULL));</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> totalSamples=0;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">if</span>(trainingPixels[iclass].size()>balance_opt[iclass]){</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">while</span>(trainingPixels[iclass].size()>balance_opt[iclass]){</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordtype">int</span> index=rand()%trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> trainingPixels[iclass].erase(trainingPixels[iclass].begin()+index);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">int</span> oldsize=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=trainingPixels[iclass].size();isample<balance_opt[iclass];++isample){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">int</span> index = rand()%oldsize;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> trainingPixels[iclass].push_back(trainingPixels[iclass][index]);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> totalSamples+=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> offset[ibag].resize(nband);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> scale[ibag].resize(nband);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> assert(offset_opt.size()==nband);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> assert(scale_opt.size()==nband);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> cout << <span class="stringliteral">"scaling for band"</span> << iband << endl;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> offset[ibag][iband]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iband];</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> scale[ibag][iband]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iband];</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>(scale[ibag][iband]<=0){</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">float</span> theMin=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">float</span> theMax=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingPixels[iclass].size();++isample){</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(theMin>trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> theMin=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">if</span>(theMax<trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> theMax=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> offset[ibag][iband]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> scale[ibag][iband]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> std::cout << <span class="stringliteral">"Extreme image values for band "</span> << iband << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset[ibag][iband] << <span class="stringliteral">", "</span> << scale[ibag][iband] << std::endl;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> std::cout << <span class="stringliteral">"scaled values for band "</span> << iband << <span class="stringliteral">": ["</span> << (theMin-offset[ibag][iband])/scale[ibag][iband] << <span class="stringliteral">","</span> << (theMax-offset[ibag][iband])/scale[ibag][iband] << <span class="stringliteral">"]"</span> << [...]
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">else</span>{<span class="comment">//use same offset and scale </span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> offset[ibag].resize(nband);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> scale[ibag].resize(nband);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> offset[ibag][iband]=offset[0][iband];</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> scale[ibag][iband]=scale[0][iband];</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(!ibag){</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">if</span>(priors_opt.size()==1){<span class="comment">//default: equal priors for each class</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> priors.resize(nclass);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> priors[iclass]=1.0/nclass;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> }</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> assert(priors_opt.size()==1||priors_opt.size()==nclass);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">//set bagsize for each class if not done already via command line</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">while</span>(bagSize_opt.size()<nclass)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> bagSize_opt.push_back(bagSize_opt.back());</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> std::cout << <span class="stringliteral">"number of classes: "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> std::cout << <span class="stringliteral">"priors:"</span>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(priorimg_opt.empty()){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> std::cout << <span class="stringliteral">" "</span> << priors[iclass];</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">bool</span> doSort=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> nameVector.push_back(mapit->first);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment">//check if name in training is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span>(classValueMap[mapit->first]>0){</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span>(cm.getClassIndex(type2string<short>(classValueMap[mapit->first]))<0)</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> cm.pushBackClassName(type2string<short>(classValueMap[mapit->first]),doSort);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> std::cerr << <span class="stringliteral">"Error: names in classname option are not complete, please check names in training vector and make sure classvalue is > 0"</span> << std::endl;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> exit(1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> cm.pushBackClassName(mapit->first,doSort);</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> ++mapit;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> }</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(classname_opt.empty()){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">//std::cerr << "Warning: no class name and value pair provided for all " << nclass << " classes, using string2type<int> instead!" << std::endl;</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> std::cout << iclass << <span class="stringliteral">" "</span> << cm.getClass(iclass) << <span class="stringliteral">" -> "</span> << string2type<short>(cm.getClass(iclass)) << std::endl;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> classValueMap[cm.getClass(iclass)]=string2type<short>(cm.getClass(iclass));</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> }</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">if</span>(priors_opt.size()==nameVector.size()){</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> std::cerr << <span class="stringliteral">"Warning: please check if priors are provided in correct order!!!"</span> << std::endl;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nameVector.size();++iclass)</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> std::cerr << nameVector[iclass] << <span class="stringliteral">" "</span> << priors_opt[iclass] << std::endl;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> }<span class="comment">//if(!ibag)</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment">//Calculate features of training set</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> vector< Vector2d<float> > trainingFeatures(nclass);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">int</span> nctraining=0;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> cout << <span class="stringliteral">"calculating features for class "</span> << iclass << endl;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> srand(time(NULL));</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> nctraining=(bagSize_opt[iclass]<100)? trainingPixels[iclass].size()/100.0*bagSize_opt[iclass] : trainingPixels[iclass].size();<span class="comment">//bagSize_opt[iclass] given in % of training size</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">if</span>(nctraining<=0)</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> nctraining=1;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> assert(nctraining<=trainingPixels[iclass].size());</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordtype">int</span> index=0;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span>(bagSize_opt[iclass]<100)</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> random_shuffle(trainingPixels[iclass].begin(),trainingPixels[iclass].end());</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> trainingFeatures[iclass].resize(nctraining);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctraining;++isample){</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordtype">float</span> value=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> trainingFeatures[iclass][isample].push_back((value-offset[ibag][iband])/scale[ibag][iband]);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> assert(trainingFeatures[iclass].size()==nctraining);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining=0;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> ntraining+=trainingFeatures[iclass].size();</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers = nneuron_opt.size()+2;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">const</span> <span class="keywordtype">float</span> desired_error = 0.0003;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations_between_reports = (verbose_opt[0])? maxit_opt[0]+1:0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> cout << <span class="stringliteral">"number of features: "</span> << nFeatures << endl;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> cout << <span class="stringliteral">"creating artificial neural network with "</span> << nneuron_opt.size() << <span class="stringliteral">" hidden layer, having "</span> << endl;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nneuron_opt.size();++ilayer)</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> cout << nneuron_opt[ilayer] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> cout << <span class="stringliteral">"neurons"</span> << endl;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> cout << <span class="stringliteral">"connection_opt[0]: "</span> << connection_opt[0] << std::endl;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> cout << <span class="stringliteral">"num_layers: "</span> << num_layers << std::endl;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> cout << <span class="stringliteral">"nFeatures: "</span> << nFeatures << std::endl;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> cout << <span class="stringliteral">"nneuron_opt[0]: "</span> << nneuron_opt[0] << std::endl;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> cout << <span class="stringliteral">"number of classes (nclass): "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">switch</span>(num_layers){</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">case</span>(3):{</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">// net[ibag].create_sparse(connection_opt[0],num_layers, nFeatures, nneuron_opt[0], nclass);//replace all create_sparse with create_sparse_array due to bug in FANN!</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[3];</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> layers[0]=nFeatures;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> layers[1]=nneuron_opt[0];</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> layers[2]=nclass;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> net[ibag].create_sparse_array(connection_opt[0],num_layers,layers);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">case</span>(4):{</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[4];</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> layers[0]=nFeatures;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> layers[1]=nneuron_opt[0];</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> layers[2]=nneuron_opt[1];</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> layers[3]=nclass;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// layers.push_back(nFeatures);</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// for(int ihidden=0;ihidden<nneuron_opt.size();++ihidden)</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// layers.push_back(nneuron_opt[ihidden]);</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// layers.push_back(nclass);</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> net[ibag].create_sparse_array(connection_opt[0],num_layers,layers);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> cerr << <span class="stringliteral">"Only 1 or 2 hidden layers are supported!"</span> << endl;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> exit(1);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> cout << <span class="stringliteral">"network created"</span> << endl;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> net[ibag].set_learning_rate(learning_opt[0]);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// net.set_activation_steepness_hidden(1.0);</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// net.set_activation_steepness_output(1.0);</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> net[ibag].set_activation_function_hidden(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> net[ibag].set_activation_function_output(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="comment">// Set additional properties such as the training algorithm</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// net.set_training_algorithm(FANN::TRAIN_QUICKPROP);</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// Output network type and parameters</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> cout << endl << <span class="stringliteral">"Network Type : "</span>;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">switch</span> (net[ibag].get_network_type())</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> {</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">case</span> FANN::LAYER:</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> cout << <span class="stringliteral">"LAYER"</span> << endl;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">case</span> FANN::SHORTCUT:</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> cout << <span class="stringliteral">"SHORTCUT"</span> << endl;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> cout << <span class="stringliteral">"UNKNOWN"</span> << endl;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> net[ibag].print_parameters();</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(cv_opt[0]>1){</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> std::cout << <span class="stringliteral">"cross validation"</span> << std::endl;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> vector<unsigned short> referenceVector;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> vector<unsigned short> outputVector;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">float</span> rmse=net[ibag].cross_validation(trainingFeatures,</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> ntraining,</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> cv_opt[0],</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> maxit_opt[0],</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> desired_error,</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> referenceVector,</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> outputVector,</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> verbose_opt[0]);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<referenceVector.size();++isample){</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">string</span> refClassName=nameVector[referenceVector[isample]];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordtype">string</span> className=nameVector[outputVector[isample]];</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> cm.incrementResult(type2string<short>(classValueMap[refClassName]),type2string<short>(classValueMap[className]),1.0/nbag);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> cm.incrementResult(cm.getClass(referenceVector[isample]),cm.getClass(outputVector[isample]),1.0/nbag);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> } </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> cout << endl << <span class="stringliteral">"Set training data"</span> << endl;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> cout << endl << <span class="stringliteral">"Training network"</span> << endl;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> cout << <span class="stringliteral">"Max Epochs "</span> << setw(8) << maxit_opt[0] << <span class="stringliteral">". "</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> << <span class="stringliteral">"Desired Error: "</span> << left << desired_error << right << endl;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span>(weights_opt.size()==net[ibag].get_total_connections()){<span class="comment">//no new training needed (same training sample)</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> vector<fann_connection> convector;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> net[ibag].get_connection_array(convector);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i_connection=0;i_connection<net[ibag].get_total_connections();++i_connection)</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> convector[i_connection].weight=weights_opt[i_connection];</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> net[ibag].set_weight_array(convector);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> }</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">bool</span> initWeights=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> net[ibag].train_on_data(trainingFeatures,ntraining,initWeights, maxit_opt[0],</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> iterations_between_reports, desired_error);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> }</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">if</span>(verbose_opt[0]>=2){</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> net[ibag].print_connections();</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> vector<fann_connection> convector;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> net[ibag].get_connection_array(convector);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i_connection=0;i_connection<net[ibag].get_total_connections();++i_connection)</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> cout << <span class="stringliteral">"connection "</span> << i_connection << <span class="stringliteral">": "</span> << convector[i_connection].weight << endl;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }<span class="comment">//for ibag</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span>(cv_opt[0]>1){</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> assert(cm.nReference());</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> cm.setFormat(cmformat_opt[0]);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> cm.reportSE95(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> std::cout << cm << std::endl;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> cout << <span class="stringliteral">"class #samples userAcc prodAcc"</span> << endl;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordtype">double</span> se95_ua=0;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordtype">double</span> se95_pa=0;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordtype">double</span> se95_oa=0;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordtype">double</span> dua=0;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordtype">double</span> dpa=0;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordtype">double</span> doa=0;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass){</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> dua=cm.ua_pct(cm.getClass(iclass),&se95_ua);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> dpa=cm.pa_pct(cm.getClass(iclass),&se95_pa);</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> cout << cm.getClass(iclass) << <span class="stringliteral">" "</span> << cm.nReference(cm.getClass(iclass)) << <span class="stringliteral">" "</span> << dua << <span class="stringliteral">" ("</span> << se95_ua << <span class="stringliteral">")"</span> << <span class="stringliteral">" "</span> << [...]
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> std::cout << <span class="stringliteral">"Kappa: "</span> << cm.kappa() << std::endl;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> doa=cm.oa_pct(&se95_oa);</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> std::cout << <span class="stringliteral">"Overall Accuracy: "</span> << doa << <span class="stringliteral">" ("</span> << se95_oa << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment">//--------------------------------- end of training -----------------------------------</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">if</span>(input_opt.empty())</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> exit(0);</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keywordtype">float</span> progress=0;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">//-------------------------------- open image file ------------------------------------</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">bool</span> inputIsRaster=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> imgReaderOgr;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> imgReaderOgr.open(input_opt[0]);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> imgReaderOgr.close();</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> }</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> inputIsRaster=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span>(inputIsRaster){</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="comment">// if(input_opt[0].find(".shp")==string::npos){</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> testImage;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> cout << <span class="stringliteral">"opening image "</span> << input_opt[0] << endl; </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> testImage.open(input_opt[0]);</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> cerr << error << endl;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> exit(2);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> }</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> std::cout << <span class="stringliteral">"opening mask image file "</span> << mask_opt[0] << std::endl;</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> cerr << error << endl;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> exit(2);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> }</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> cerr << <span class="stringliteral">"error catched"</span> << endl;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> exit(1);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> priorReader;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> std::cout << <span class="stringliteral">"opening prior image "</span> << priorimg_opt[0] << std::endl;</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> priorReader.open(priorimg_opt[0]);</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> assert(priorReader.nrOfCol()==testImage.nrOfCol());</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> assert(priorReader.nrOfRow()==testImage.nrOfRow());</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> }</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> exit(2);</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> exit(1);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> }</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordtype">int</span> nrow=testImage.nrOfRow();</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">int</span> ncol=testImage.nrOfCol();</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> theInterleave+=testImage.getInterleave();</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> }</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> vector<char> classOut(ncol);<span class="comment">//classified line for writing to image file</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="comment">// assert(nband==testImage.nrOfBand());</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> classImageBag;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> classImageOut;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> probImage;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> entropyImage;</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordtype">string</span> imageType=testImage.getImageType();</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> cout << <span class="stringliteral">"opening class image for writing output "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> classImageBag.open(classBag_opt[0],ncol,nrow,nbag,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> classImageBag.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> classImageBag.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> classImageBag.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> classImageOut.open(output_opt[0],ncol,nrow,1,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> classImageOut.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> classImageOut.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> classImageOut.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> classImageOut.setColorTable(colorTable_opt[0],0);</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">if</span>(prob_opt.size()){</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> probImage.open(prob_opt[0],ncol,nrow,nclass,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> probImage.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> probImage.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> probImage.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">if</span>(entropy_opt.size()){</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> entropyImage.open(entropy_opt[0],ncol,nrow,1,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> entropyImage.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> entropyImage.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> entropyImage.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> }</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> cerr << error << endl;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> }</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=0;iline<nrow;++iline){</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> vector<float> buffer(ncol);</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> vector<short> lineMask;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> lineMask.resize(maskReader.nrOfCol());</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <a class="code" href="classVector2d.html">Vector2d<float></a> linePrior;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> linePrior.resize(nclass,ncol);<span class="comment">//prior prob for each class</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <a class="code" href="classVector2d.html">Vector2d<float></a> hpixel(ncol);</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <a class="code" href="classVector2d.html">Vector2d<float></a> fpixel(ncol);</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <a class="code" href="classVector2d.html">Vector2d<float></a> probOut(nclass,ncol);<span class="comment">//posterior prob for each (internal) class</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> vector<float> entropy(ncol);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <a class="code" href="classVector2d.html">Vector2d<char></a> classBag;<span class="comment">//classified line for writing to image file</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> classBag.resize(nbag,ncol);</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="comment">//read all bands of all pixels in this line in hline</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband){</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> std::cout << <span class="stringliteral">"reading band "</span> << band_opt[iband] << std::endl;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> assert(band_opt[iband]>=0);</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> assert(band_opt[iband]<testImage.nrOfBand());</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> testImage.readData(buffer,GDT_Float32,iline,band_opt[iband]);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> hpixel[icol].push_back(buffer[icol]);</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> }</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=bstart_opt[0];iband<bstart_opt[0]+nband;++iband){</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> std::cout << <span class="stringliteral">"reading band "</span> << iband << std::endl;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> assert(iband>=0);</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> assert(iband<testImage.nrOfBand());</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> testImage.readData(buffer,GDT_Float32,iline,iband);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> hpixel[icol].push_back(buffer[icol]);</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> }</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> }</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> }</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> cerr << <span class="stringliteral">"Error reading "</span> << input_opt[0] << <span class="stringliteral">": "</span> << theError << std::endl;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> exit(3);</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> exit(3);</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> }</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> assert(nband==hpixel[0].size());</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> cout << <span class="stringliteral">"used bands: "</span> << nband << endl;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment">//read prior</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keywordflow">if</span>(verbose_opt.size()>1)</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> std::cout << <span class="stringliteral">"Reading "</span> << priorimg_opt[0] << <span class="stringliteral">" band "</span> << iclass << <span class="stringliteral">" line "</span> << iline << std::endl;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> priorReader.readData(linePrior[iclass],GDT_Float32,iline,iclass);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> std::cerr << <span class="stringliteral">"Error reading "</span> << priorimg_opt[0] << <span class="stringliteral">": "</span> << theError << std::endl;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> exit(3);</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> }</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> exit(3);</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> }</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> }</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="keywordtype">double</span> oldRowMask=-1;<span class="comment">//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment">//process per pixel</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol){</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> assert(hpixel[icol].size()==nband);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="comment">//read mask</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordtype">double</span> colMask=0;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordtype">double</span> rowMask=0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordtype">double</span> geox=0;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordtype">double</span> geoy=0;</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> testImage.image2geo(icol,iline,geox,geoy);</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> maskReader.geo2image(geox,geoy,colMask,rowMask);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> colMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(colMask);</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> rowMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rowMask);</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">if</span>(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldRowMask)){</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> assert(rowMask>=0&&rowMask<maskReader.nrOfRow());</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="comment">// maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> }</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> exit(1);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> exit(3);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> oldRowMask=rowMask;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordtype">short</span> theMask=0;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> ivalue=0;ivalue<msknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">if</span>(msknodata_opt[ivalue]>=0){<span class="comment">//values set in msknodata_opt are invalid</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">if</span>(lineMask[colMask]==msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> theMask=lineMask[colMask];</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> }</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> }</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">else</span>{<span class="comment">//only values set in msknodata_opt are valid</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">if</span>(lineMask[colMask]!=-msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> theMask=lineMask[colMask];</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> }</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> }</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">if</span>(masked){</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> classBag[ibag][icol]=theMask;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> classOut[icol]=theMask;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> }</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> }</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="keywordtype">bool</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">if</span>(hpixel[icol][iband]){</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> }</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">if</span>(!valid){</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> classBag[ibag][icol]=nodata_opt[0];</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> classOut[icol]=nodata_opt[0];</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">continue</span>;<span class="comment">//next column</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> }</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> }</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> probOut[iclass][icol]=0;</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> std::cout << <span class="stringliteral">"begin classification "</span> << std::endl;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">//----------------------------------- classification -------------------</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment">//calculate image features</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> fpixel[icol].clear();</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> fpixel[icol].push_back((hpixel[icol][iband]-offset[ibag][iband])/scale[ibag][iband]);</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> vector<float> result(nclass);</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> result=net[ibag].run(fpixel[icol]);</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordtype">int</span> maxClass=0;</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> vector<float> prValues(nclass);</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="keywordtype">float</span> maxP=0;</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="comment">//calculate posterior prob of bag </span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment">//search for max prob within bag</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> maxP=0;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> classBag[ibag][icol]=0;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> }</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keywordtype">double</span> normPrior=0;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> normPrior+=linePrior[iclass][icol];</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> }</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> result[iclass]=(result[iclass]+1.0)/2.0;<span class="comment">//bring back to scale [0,1]</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> priors[iclass]=linePrior[iclass][icol]/normPrior;<span class="comment">//todo: check if correct for all cases... (automatic classValueMap and manual input for names and values)</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">switch</span>(comb_opt[0]){</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keywordflow">case</span>(0):<span class="comment">//sum rule</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> probOut[iclass][icol]+=result[iclass]*priors[iclass];<span class="comment">//add probabilities for each bag</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordflow">case</span>(1):<span class="comment">//product rule</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> probOut[iclass][icol]*=pow(static_cast<float>(priors[iclass]),static_cast<float>(1.0-nbag)/nbag)*result[iclass];<span class="comment">//multiply probabilities for each bag</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">case</span>(2):<span class="comment">//max rule</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordflow">if</span>(priors[iclass]*result[iclass]>probOut[iclass][icol])</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> probOut[iclass][icol]=priors[iclass]*result[iclass];</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> }</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">//search for max prob within bag</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment">// if(prValues[iclass]>maxP){</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment">// maxP=prValues[iclass];</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment">// classBag[ibag][icol]=vcode[iclass];</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="keywordflow">if</span>(result[iclass]>maxP){</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> maxP=result[iclass];</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> classBag[ibag][icol]=iclass;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> }</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> }</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }<span class="comment">//ibag</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment">//search for max class prob</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordtype">float</span> maxBag1=0;<span class="comment">//max probability</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordtype">float</span> maxBag2=0;<span class="comment">//second max probability</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">float</span> normBag=0;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordflow">if</span>(probOut[iclass][icol]>maxBag1){</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> maxBag1=probOut[iclass][icol];</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> classOut[icol]=classValueMap[nameVector[iclass]];</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> }</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(probOut[iclass][icol]>maxBag2)</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> maxBag2=probOut[iclass][icol];</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> normBag+=probOut[iclass][icol];</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment">//normalize probOut and convert to percentage</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> entropy[icol]=0;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordtype">float</span> prv=probOut[iclass][icol];</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> prv/=normBag;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> entropy[icol]-=prv*log(prv)/log(2.0);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> prv*=100.0;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> probOut[iclass][icol]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(prv+0.5);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">// assert(classValueMap[nameVector[iclass]]<probOut.size());</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment">// assert(classValueMap[nameVector[iclass]]>=0);</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">// probOut[classValueMap[nameVector[iclass]]][icol]=static_cast<short>(prv+0.5);</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> entropy[icol]/=log(static_cast<double>(nclass))/log(2.0);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> entropy[icol]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(100*entropy[icol]+0.5);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordflow">if</span>(entropy[icol]>activePoints.back().value){</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> activePoints.back().value=entropy[icol];<span class="comment">//replace largest value (last)</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> activePoints.back().posx=icol;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> activePoints.back().posy=iline;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> std::sort(activePoints.begin(),activePoints.end(),<a class="code" href="classDecrease__PosValue.html">Decrease_PosValue</a>());<span class="comment">//sort in descending order (largest first, smallest last)</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> std::cout << activePoints.back().posx << <span class="stringliteral">" "</span> << activePoints.back().posy << <span class="stringliteral">" "</span> << activePoints.back().value << std::endl;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> }</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> }<span class="comment">//icol</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">//----------------------------------- write output ------------------------------------------</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> classImageBag.writeData(classBag[ibag],GDT_Byte,iline,ibag);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordflow">if</span>(prob_opt.size()){</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> probImage.writeData(probOut[iclass],GDT_Float32,iline,iclass);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> }</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordflow">if</span>(entropy_opt.size()){</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> entropyImage.writeData(entropy,GDT_Float32,iline);</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> }</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> classImageOut.writeData(classOut,GDT_Byte,iline);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordflow">if</span>(!verbose_opt[0]){</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(iline+1.0)/classImageOut.nrOfRow();</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> }</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">//write active learning points</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iactive=0;iactive<activePoints.size();++iactive){</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> std::map<string,double> pointMap;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<testImage.nrOfBand();++iband){</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> testImage.readData(value,GDT_Float64,static_cast<int>(activePoints[iactive].posx),static_cast<int>(activePoints[iactive].posy),iband);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> ostringstream fs;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> fs << <span class="stringliteral">"B"</span> << iband;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> pointMap[fs.str()]=value;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> }</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> pointMap[label_opt[0]]=0;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordtype">double</span> x, y;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> testImage.image2geo(activePoints[iactive].posx,activePoints[iactive].posy,x,y);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> std::string fieldname=<span class="stringliteral">"id"</span>;<span class="comment">//number of the point</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> activeWriter.addPoint(x,y,pointMap,fieldname,++nactive);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> testImage.close();</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> maskReader.close();</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> priorReader.close();</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordflow">if</span>(prob_opt.size())</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> probImage.close();</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">if</span>(entropy_opt.size())</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> entropyImage.close();</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> classImageBag.close();</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> classImageOut.close();</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordflow">else</span>{<span class="comment">//classify vector file</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> cm.clearResults();</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">//notice that fields have already been set by readDataImageOgr (taking into account appropriate bands)</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalidation=0;ivalidation<input_opt.size();++ivalidation){</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> assert(output_opt.size()==input_opt.size());</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> cout << <span class="stringliteral">"opening img reader "</span> << input_opt[ivalidation] << endl;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> imgReaderOgr.open(input_opt[ivalidation]);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> imgWriterOgr;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> std::cout << <span class="stringliteral">"opening img writer and copying fields from img reader"</span> << output_opt[ivalidation] << std::endl;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> imgWriterOgr.open(output_opt[ivalidation],imgReaderOgr);</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> }</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> cout << <span class="stringliteral">"number of layers in input ogr file: "</span> << imgReaderOgr.getLayerCount() << endl;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<imgReaderOgr.getLayerCount();++ilayer){</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> cout << <span class="stringliteral">"processing input layer "</span> << ilayer << endl;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> std::cout << <span class="stringliteral">"creating field class"</span> << std::endl;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> imgWriterOgr.createField(<span class="stringliteral">"class"</span>,OFTInteger,ilayer);</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> imgWriterOgr.createField(<span class="stringliteral">"class"</span>,OFTString,ilayer);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> }</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFeatures=imgReaderOgr.getFeatureCount(ilayer);</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> progress=0;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">while</span>( (poFeature = imgReaderOgr.getLayer(ilayer)->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> cout << <span class="stringliteral">"feature "</span> << ifeature << endl;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">if</span>( poFeature == NULL ){</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> cout << <span class="stringliteral">"Warning: could not read feature "</span> << ifeature << <span class="stringliteral">" in layer "</span> << imgReaderOgr.getLayerName(ilayer) << endl;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> }</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> OGRFeature *poDstFeature = NULL;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> poDstFeature=imgWriterOgr.createFeature(ilayer);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="keywordflow">if</span>( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>,</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> poFeature->GetFID(), imgWriterOgr.getLayerName(ilayer).c_str() );</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> }</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> }</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> vector<float> validationPixel;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> vector<float> validationFeature;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> imgReaderOgr.readData(validationPixel,OFTReal,fields,poFeature,ilayer);</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> assert(validationPixel.size()==nband);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> vector<float> probOut(nclass);<span class="comment">//posterior prob for each class</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> probOut[iclass]=0;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> validationFeature.push_back((validationPixel[iband]-offset[ibag][iband])/scale[ibag][iband]);</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> std:: cout << <span class="stringliteral">" "</span> << validationFeature.back();</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> std::cout << std:: endl;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> vector<float> result(nclass);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> result=net[ibag].run(validationFeature);</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<result.size();++iclass)</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> std::cout << result[iclass] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> std::cout << std::endl;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">//calculate posterior prob of bag </span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> result[iclass]=(result[iclass]+1.0)/2.0;<span class="comment">//bring back to scale [0,1]</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordflow">switch</span>(comb_opt[0]){</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordflow">case</span>(0):<span class="comment">//sum rule</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> probOut[iclass]+=result[iclass]*priors[iclass];<span class="comment">//add probabilities for each bag</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">case</span>(1):<span class="comment">//product rule</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> probOut[iclass]*=pow(static_cast<float>(priors[iclass]),static_cast<float>(1.0-nbag)/nbag)*result[iclass];<span class="comment">//multiply probabilities for each bag</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">case</span>(2):<span class="comment">//max rule</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">if</span>(priors[iclass]*result[iclass]>probOut[iclass])</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> probOut[iclass]=priors[iclass]*result[iclass];</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> }</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> }<span class="comment">//for ibag</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">//search for max class prob</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordtype">float</span> maxBag=0;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordtype">float</span> normBag=0;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="keywordtype">string</span> classOut=<span class="stringliteral">"Unclassified"</span>;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> std::cout << probOut[iclass] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordflow">if</span>(probOut[iclass]>maxBag){</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> maxBag=probOut[iclass];</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> classOut=nameVector[iclass];</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="comment">//look for class name</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> std::cout << <span class="stringliteral">"->"</span> << classValueMap[classOut] << std::endl;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> std::cout << <span class="stringliteral">"->"</span> << classOut << std::endl;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> }</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> poDstFeature->SetField(<span class="stringliteral">"class"</span>,classValueMap[classOut]);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> poDstFeature->SetField(<span class="stringliteral">"class"</span>,classOut.c_str());</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> poDstFeature->SetFID( poFeature->GetFID() );</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> }</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordtype">int</span> labelIndex=poFeature->GetFieldIndex(label_opt[0].c_str());</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">if</span>(labelIndex>=0){</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="keywordtype">string</span> classRef=poFeature->GetFieldAsString(labelIndex);</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">if</span>(classRef!=<span class="stringliteral">"0"</span>){</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> cm.incrementResult(type2string<short>(classValueMap[classRef]),type2string<short>(classValueMap[classOut]),1);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> cm.incrementResult(classRef,classOut,1);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> CPLErrorReset();</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="keywordflow">if</span>(imgWriterOgr.createFeature(poDstFeature,ilayer) != OGRERR_NONE){</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>,</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> poFeature->GetFID(), imgWriterOgr.getLayerName(ilayer).c_str() );</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> }</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> ++ifeature;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="keywordflow">if</span>(!verbose_opt[0]){</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ifeature+1.0)/nFeatures;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> }<span class="comment">//get next feature</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> }<span class="comment">//next layer</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> imgReaderOgr.close();</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> imgWriterOgr.close();</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="keywordflow">if</span>(cm.nReference()){</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> std::cout << cm << std::endl;</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">// cout << "class #samples userAcc prodAcc" << endl;</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">// double se95_ua=0;</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">// double se95_pa=0;</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="comment">// double se95_oa=0;</span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment">// double dua=0;</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">// double dpa=0;</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">// double doa=0;</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment">// for(short iclass=0;iclass<cm.nClasses();++iclass){</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">// dua=cm.ua_pct(cm.getClass(iclass),&se95_ua);</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">// dpa=cm.pa_pct(cm.getClass(iclass),&se95_pa);</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment">// cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment">// std::cout << "Kappa: " << cm.kappa() << std::endl;</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment">// doa=cm.oa_pct(&se95_oa);</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="comment">// std::cout << "Overall Accuracy: " << doa << " (" << se95_oa << ")" << std::endl;</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> }</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="keywordflow">if</span>(active_opt.size())</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> activeWriter.close();</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> }</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> std::cerr << <span class="stringliteral">"Error: errorString"</span> << std::endl;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classDecrease__PosValue_html"><div class="ttname"><a href="classDecrease__PosValue.html">Decrease_PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00034">PosValue.h:34</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkascii2img.html b/doc/html/pkascii2img.html
new file mode 100644
index 0000000..b0b75a4
--- /dev/null
+++ b/doc/html/pkascii2img.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkascii2img</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkascii2img </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to create raster image based on ascii file </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkascii2img -i input.txt -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-ot type] [-of GDALformat] [-co NAME=VALUE]* [-dx value] [-dy value] [-ulx value] [-uly value] [-ct filename] [-a_srs EPSG:number] [-d description]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkascii2img_description"></a>
+Description</h1>
+<p>The utility pkascii2img creates a raster dataset from an ASCII textfile. The textfile is in matrix format (rows and columns). The dimensions in x and y are defined by the number of columns and rows respectively. The georeferencing can be defined by providing the options for cell size (-dx -dy), upper left position (-ulx -uly) and the projection (-a_srs). Some dataset formats can also store a description (-d) and a color table (-ct).</p>
+<h1><a class="anchor" id="pkascii2img_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input ASCII file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td>Byte </td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td>GTiff </td><td>image type string (see also gdal_translate) </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td>0 </td><td>Upper left x value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td>0 </td><td>Upper left y value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td></td><td>Output resolution in x (in meter) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td></td><td>Output resolution in y (in meter) </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td></td><td>Override the projection for the output file </td></tr>
+<tr>
+<td>d </td><td>description </td><td>std::string </td><td></td><td>Set image description </td></tr>
+</table>
+Usage: pkascii2img -i input.txt -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkascii2img can be found <a class="el" href="md_examples_pkascii2img.html#examples_pkascii2img">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkascii2img_8cc_source.html b/doc/html/pkascii2img_8cc_source.html
new file mode 100644
index 0000000..8de75e3
--- /dev/null
+++ b/doc/html/pkascii2img_8cc_source.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkascii2img.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkascii2img.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkascii2img.cc: program to create raster image based on ascii file</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input ASCII file"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> dataType_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>,<span class="stringlite [...]
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> imageType_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"image type string (see also gdal_translate)"</span>, <span class="stringliteral">"GTiff"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box (in geocoordinates if georef is true)"</span>, 0.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box (in geocoordinates if georef is true)"</span>, 0.0);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Output resolution in x (in meter)"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Output resolution in y (in meter)"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Override the projection for the output file"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, <span class="keyword">false</span>,2);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> dataType_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> imageType_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> exit(0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> cout << endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> cout << <span class="stringliteral">"Usage: pkascii2img -i input.txt -o output"</span> << endl;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> cout << endl;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriter;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> ifstream ifile(input_opt[0].c_str(),ios::in);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">//get number of lines</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">string</span> line;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">int</span> ncol=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">string</span> interleave=<span class="stringliteral">"BAND"</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> vector< vector<double> > data;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> vector<double> row;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">while</span>(getline(ifile,line)){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> row.clear();</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//read data from ascii file</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> istringstream ist(line);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">while</span>(ist>>value)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> row.push_back(value);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(!ncol){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> ncol=row.size();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> data.push_back(row);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> data.push_back(row);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<row.size();++icol)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> cout << row[icol] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> cout << endl;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> ++irow;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> nrow=irow;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> assert(ncol);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> assert(nrow);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> cout << <span class="stringliteral">"nrow: "</span> << nrow << endl;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> cout << <span class="stringliteral">"ncol: "</span> << ncol << endl;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> cout << theError << endl;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> GDALDataType dataType=GDT_Unknown;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> dataType_opt[0].c_str()))</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> dataType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> cout << endl;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(dataType==GDT_Unknown)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> cout << <span class="stringliteral">"Unknown output pixel type: "</span> << dataType_opt[0] << endl;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> cout << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(dataType) << endl;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> imgWriter.open(output_opt[0],ncol,nrow,1,dataType,imageType_opt[0],option_opt);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> imgWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span>(projection_opt.size()){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> assert(dx_opt.size());</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> assert(dy_opt.size());</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> cout << output_opt[0] << <span class="stringliteral">" is georeferenced."</span> << endl;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> gt[0]=ulx_opt[0];</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> gt[1]=dx_opt[0];</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> gt[2]=0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> gt[3]=uly_opt[0];</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> gt[4]=0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> gt[5]=-dy_opt[0];</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> imgWriter.setGeoTransform(gt);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> imgWriter.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> cout << output_opt[0] << <span class="stringliteral">" is not georeferenced."</span> << endl;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> assert(!imgWriter.isGeoRef());</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> assert(imgWriter.getDataType()==GDT_Byte);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> imgWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> assert(data.size()==nrow);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span>(irow=0;irow<nrow;++irow)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> imgWriter.writeData(data[irow],GDT_Float64,irow);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> imgWriter.close();</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkascii2ogr.html b/doc/html/pkascii2ogr.html
new file mode 100644
index 0000000..08690a2
--- /dev/null
+++ b/doc/html/pkascii2ogr.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkascii2ogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkascii2ogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to create vector points or polygons from text file </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkascii2ogr -i input.txt -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-f OGRformat] [-x col] [-y col] [–line] [-n fieldname -ot type]* [-fs separator]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkascii2ogr_description"></a>
+Description</h1>
+<p>Poor man's utility to create a vector dataset (points or single polygon) from an ASCII textfile. A better alternative is to use <a href="http://www.gdal.org/drv_vrt.html">virtual vector datasets</a>. Specify the position of the vertices (x and y) in the columns defined by the options (-x -y), starting from 0. The default is to use the first (-dx 0) and second (-dx 1) columns for x and y respectvely. Specify the names and types of the remaining columns in your input file via the option [...]
+<h1><a class="anchor" id="pkascii2ogr_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input ASCII file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output file </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>ESRI Shapefile </td><td>Output sample file format </td></tr>
+<tr>
+<td>x </td><td>x </td><td>short </td><td>0 </td><td>column number of x (0) </td></tr>
+<tr>
+<td>y </td><td>y </td><td>short </td><td>1 </td><td>column number of y (1) </td></tr>
+<tr>
+<td>l </td><td>line </td><td>bool </td><td>false </td><td>create OGRPolygon as geometry instead of points. Fields are taken from first point and polygon is automatically closed (no need to repeat first point at last line). (false: use OGRPoint) </td></tr>
+<tr>
+<td>n </td><td>name </td><td>std::string </td><td></td><td>Field names for the columns in the input ascii file </td></tr>
+<tr>
+<td>ot </td><td>ot </td><td>std::string </td><td>Real </td><td>Field type (Real, Integer, String) for each of the fields as defined by name </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td>epsg:4326 </td><td>Override the projection for the output file, use epsg:<code> or Wkt string </code></td></tr>
+<tr>
+<td><code> fs </code></td><td><code> fs </code></td><td><code> char </code></td><td><code> </code></td><td><code>field separator. </code></td></tr>
+</table>
+Usage: pkascii2ogr -i input.txt -o output</li>
+</ul>
+<p><code></p>
+<h1>Examples </h1>
+<p></code></p>
+<p><code> Some examples how to use pkascii2ogr can be found <a class="el" href="md_examples_pkascii2ogr.html#examples_pkascii2ogr">here</a> </code></p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkascii2ogr_8cc_source.html b/doc/html/pkascii2ogr_8cc_source.html
new file mode 100644
index 0000000..d98631b
--- /dev/null
+++ b/doc/html/pkascii2ogr_8cc_source.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkascii2ogr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkascii2ogr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkascii2ogr.cc: program to create vector points or polygons from text file</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"Input ASCII file"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output file"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output sample file format"</span>,<span class="stringliteral">"ESRI Shapefile"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> colX_opt(<span class="stringliteral">"x"</span>, <span class="stringliteral">"x"</span>, <span class="stringliteral">"column number of x (0)"</span>, 0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> colY_opt(<span class="stringliteral">"y"</span>, <span class="stringliteral">"y"</span>, <span class="stringliteral">"column number of y (1)"</span>, 1);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> polygon_opt(<span class="stringliteral">"l"</span>, <span class="stringliteral">"line"</span>, <span class="stringliteral">"create OGRPolygon as geometry instead of points. Fields are taken from first point and polygon is automatically closed (no need to repeat first point at last line). (false: use OGRPoint)"</s [...]
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> fname_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"name"</span>, <span class="stringliteral">"Field names for the columns in the input ascii file"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ftype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"ot"</span>, <span class="stringliteral">"Field type (Real, Integer, String) for each of the fields as defined by name"</span>,<span class="stringliteral">"Real"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Override the projection for the output file, use epsg:<code> or Wkt string"</span>, <span class="stringliteral">"epsg:4326"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<char></a> fs_opt(<span class="stringliteral">"fs"</span>,<span class="stringliteral">"fs"</span>,<span class="stringliteral">"field separator."</span>,<span class="charliteral">' '</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose (0)"</span>, 0,2);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> colX_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> colY_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> polygon_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> fname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ftype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> fs_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> exit(0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> cout << endl;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> cout << <span class="stringliteral">"Usage: pkascii2ogr -i input.txt -o output"</span> << endl;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> cout << endl;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> exit(0);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> exit(0);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">string</span> theProjection;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> theProjection=projection_opt[0];</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> ogr_typecount=11;<span class="comment">//hard coded for now!</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">while</span>(ftype_opt.size()<fname_opt.size())</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> ftype_opt.push_back(ftype_opt[0]);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// vector<string> fname(fname_opt.size());</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> vector<OGRFieldType> ftype(ftype_opt.size());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> cout << <span class="stringliteral">"field types can be: "</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<fname_opt.size();++ifield){</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// fname[ifield]=fname_opt[ifield];</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < ogr_typecount; ++iType){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(!ifield&&verbose_opt[0])</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> cout << <span class="stringliteral">" "</span> << OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> ftype_opt[ifield].c_str()))</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> ftype[ifield]=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">//todo: what if unknown?</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> cout << endl << <span class="stringliteral">"field types are: "</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<ftype.size();++ifield)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> cout << OGRFieldDefn::GetFieldTypeName(ftype[ifield]) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> cout << endl;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> imgWriter;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> imgWriter.open(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> imgWriter.ascii2ogr(input_opt[0], <span class="stringliteral">"New Layer"</span>, fname_opt, ftype, colX_opt[0], colY_opt[0], theProjection, wkbPolygon, fs_opt[0]);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> imgWriter.ascii2ogr(input_opt[0], <span class="stringliteral">"New Layer"</span>, fname_opt, ftype, colX_opt[0], colY_opt[0], theProjection, wkbPoint, fs_opt[0]);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> imgWriter.close();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite.html b/doc/html/pkcomposite.html
new file mode 100644
index 0000000..bebf0c4
--- /dev/null
+++ b/doc/html/pkcomposite.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkcomposite</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcomposite </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to mosaic and composite geo-referenced images </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkcomposite -i input [-i input]* -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-b band]* [-dx xres] [-dy yres] [-e vector] [-ulx ULX -uly ULY -lrx LRX -lry LRY] [-cr rule] [-cb band] [-srcnodata value] [-bndnodata band] [-min value] [-max value] [-dstnodata value] [-r resampling_method] [-ot {Byte / Int16 / UInt16 / UInt32 / Int32 / Float32 / Float64 / CInt16 / CInt32 / CFloat32 / CFloat64}] [-of format] [-co NAME=VALUE]* [-a_srs epsg:number]</code></p>
+<p><code> Advanced options: [-file] [-w weight]* [-c class]* [-ct colortable] [-d description] </code></p>
+<h1><a class="anchor" id="pkcomposite_description"></a>
+Description</h1>
+<p>The utility pkcomposite can be used to <em>mosaic</em> and <em>composite</em> multiple (georeferenced) raster datasets. A mosaic can merge images with different geographical extents into a single larger image. Compositing resolves the overlapping pixels according to some rule (e.g, the median of all overlapping pixels). This utility is complementary to GDAL, which currently does not support a composite step. Input datasets can have different bounding boxes and spatial resolutionsresol [...]
+<p><a class="anchor" id="pkcomposite_rules"></a> </p>
+<table class="doxtable">
+<tr>
+<th>composite rule </th><th>composite output </th></tr>
+<tr>
+<td>overwrite </td><td>Overwrite overlapping pixels: the latter input image on the command line overrules the previous image </td></tr>
+<tr>
+<td>maxndvi </td><td>Create a maximum NDVI (normalized difference vegetation index) composite from multi-band input images. Use option -cb to set the indexes of the red and near infrared bands respectively (e.g., -cb 0 -cb 1) </td></tr>
+<tr>
+<td>maxband </td><td>Select the pixel with a maximum value in the band specified by option -cb </td></tr>
+<tr>
+<td>minband </td><td>Select the pixel with a minimum value in the band specified by option -cb </td></tr>
+<tr>
+<td>mean </td><td>Calculate the mean (average) of overlapping pixels </td></tr>
+<tr>
+<td>stdev </td><td>Calculate the standard deviation of overlapping pixels </td></tr>
+<tr>
+<td>median </td><td>Calculate the median of overlapping pixels </td></tr>
+<tr>
+<td>mode </td><td>Select the mode of overlapping pixels (maximum voting): use for Byte images only </td></tr>
+<tr>
+<td>sum </td><td>Calculate the arithmetic sum of overlapping pixels </td></tr>
+<tr>
+<td>maxallbands </td><td>For each individual band, assign the maximum value found in all overlapping pixels. Unlike maxband, output band values cannot be attributed to a single (date) pixel in the input time series </td></tr>
+<tr>
+<td>minallbands </td><td>For each individual band, assign the minimum value found in all overlapping pixels. Unlike minband, output band values cannot be attributed to a single (date) pixel in the input time series </td></tr>
+</table>
+<h1><a class="anchor" id="pkcomposite_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options</li>
+</ul>
+<table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file(s). If input contains multiple images, a multi-band output is created </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td></td><td>band index(es) to crop (leave empty if all bands must be retained) </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td></td><td>Output resolution in x (in meter) (empty: keep original resolution) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td></td><td>Output resolution in y (in meter) (empty: keep original resolution) </td></tr>
+<tr>
+<td>e </td><td>extent </td><td>std::string </td><td></td><td>get boundary from extent from polygons in vector file </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td>0 </td><td>Upper left x value bounding box </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td>0 </td><td>Upper left y value bounding box </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td>0 </td><td>Lower right x value bounding box </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td>0 </td><td>Lower right y value bounding box </td></tr>
+<tr>
+<td>cr </td><td>crule </td><td>std::string </td><td>overwrite </td><td>Composite rule (overwrite, maxndvi, maxband, minband, mean, mode (only for byte images), median, sum, maxallbands, minallbands, stdev </td></tr>
+<tr>
+<td>cb </td><td>cband </td><td>int </td><td>0 </td><td>band index used for the composite rule (e.g., for ndvi, use –cband=0 –cband=1 with 0 and 1 indices for red and nir band respectively </td></tr>
+<tr>
+<td>srcnodata </td><td>srcnodata </td><td>double </td><td></td><td>invalid value(s) for input raster dataset </td></tr>
+<tr>
+<td>bndnodata </td><td>bndnodata </td><td>int </td><td>0 </td><td>Band(s) in input image to check if pixel is valid (used for srcnodata, min and max options) </td></tr>
+<tr>
+<td>min </td><td>min </td><td>double </td><td></td><td>flag values smaller or equal to this value as invalid. </td></tr>
+<tr>
+<td>max </td><td>max </td><td>double </td><td></td><td>flag values larger or equal to this value as invalid. </td></tr>
+<tr>
+<td>dstnodata </td><td>dstnodata </td><td>double </td><td>0 </td><td>nodata value to put in output raster dataset if not valid or out of bounds. </td></tr>
+<tr>
+<td>r </td><td>resampling-method </td><td>std::string </td><td>near </td><td>Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation). </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td></td><td>Override the spatial reference for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid </td></tr>
+<tr>
+<td>file </td><td>file </td><td>short </td><td>0 </td><td>write number of observations (1) or sequence nr of selected file (2) for each pixels as additional layer in composite </td></tr>
+<tr>
+<td>w </td><td>weight </td><td>short </td><td>1 </td><td>Weights (type: short) for the composite, use one weight for each input file in same order as input files are provided). Use value 1 for equal weights. </td></tr>
+<tr>
+<td>c </td><td>class </td><td>short </td><td>0 </td><td>classes for multi-band output image: each band represents the number of observations for one specific class. Use value 0 for no multi-band output image. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>d </td><td>description </td><td>std::string </td><td></td><td>Set image description </td></tr>
+</table>
+<h1>Examples </h1>
+<p>Some examples how to use pkcomposite can be found <a class="el" href="md_examples_pkcomposite.html#examples_pkcomposite">here</a></p>
+<h1>FAQ </h1>
+<p>Frequently asked questions on pkcomposite can be found <a class="el" href="md_faq_pkcomposite.html#faq_pkcomposite">here</a></p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite_8cc_source.html b/doc/html/pkcomposite_8cc_source.html
new file mode 100644
index 0000000..6cca9f7
--- /dev/null
+++ b/doc/html/pkcomposite_8cc_source.html
@@ -0,0 +1,1101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkcomposite.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcomposite.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkcomposite.cc: program to mosaic and composite geo-referenced images</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">namespace </span>crule{</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">enum</span> CRULE_TYPE {overwrite=0, maxndvi=1, maxband=2, minband=3, validband=4, mean=5, mode=6, median=7,sum=8,minallbands=9,maxallbands=10,stdev=11};</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file(s). If input contains multiple images, a multi-band output is created"</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index(es) to crop (leave empty if all bands must be retained)"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Output resolution in x (in meter) (empty: keep original resolution)"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Output resolution in y (in meter) (empty: keep original resolution)"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> extent_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"extent"</span>, <span class="stringliteral">"get boundary from extent from polygons in vector file"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower right x value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower right y value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> crule_opt(<span class="stringliteral">"cr"</span>, <span class="stringliteral">"crule"</span>, <span class="stringliteral">"Composite rule (overwrite, maxndvi, maxband, minband, mean, mode (only for byte images), median, sum, maxallbands, minallbands, stdev"</span>, <span class="stringliteral">"overwrite&qu [...]
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> ruleBand_opt(<span class="stringliteral">"cb"</span>, <span class="stringliteral">"cband"</span>, <span class="stringliteral">"band index used for the composite rule (e.g., for ndvi, use --cband=0 --cband=1 with 0 and 1 indices for red and nir band respectively"</span>, 0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> srcnodata_opt(<span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"invalid value(s) for input raster dataset"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> bndnodata_opt(<span class="stringliteral">"bndnodata"</span>, <span class="stringliteral">"bndnodata"</span>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (used for srcnodata, min and max options)"</span>, 0);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> minValue_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"flag values smaller or equal to this value as invalid."</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> maxValue_opt(<span class="stringliteral">"max"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"flag values larger or equal to this value as invalid."</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dstnodata_opt(<span class="stringliteral">"dstnodata"</span>, <span class="stringliteral">"dstnodata"</span>, <span class="stringliteral">"nodata value to put in output raster dataset if not valid or out of bounds."</span>, 0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> resample_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"resampling-method"</span>, <span class="stringliteral">"Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation)."</span>, <span class="stringliteral">"near"</span>);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringliter [...]
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Override the spatial reference for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid"</span>);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> file_opt(<span class="stringliteral">"file"</span>, <span class="stringliteral">"file"</span>, <span class="stringliteral">"write number of observations (1) or sequence nr of selected file (2) for each pixels as additional layer in composite"</span>, 0);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> weight_opt(<span class="stringliteral">"w"</span>, <span class="stringliteral">"weight"</span>, <span class="stringliteral">"Weights (type: short) for the composite, use one weight for each input file in same order as input files are provided). Use value 1 for equal weights."</span>, 1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> class_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"classes for multi-band output image: each band represents the number of observations for one specific class. Use value 0 for no multi-band output image."</span>, 0);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0,2);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> file_opt.setHide(1);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> weight_opt.setHide(1);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> class_opt.setHide(1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> description_opt.setHide(1);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> extent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> crule_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> ruleBand_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> srcnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> bndnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> minValue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> maxValue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> dstnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> resample_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> file_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> weight_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> class_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> exit(0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> cout << endl;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> cout << <span class="stringliteral">"Usage: pkcomposite -i input [-i input]* -o output"</span> << endl;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> cout << endl;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> std::map<std::string, crule::CRULE_TYPE> cruleMap;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// //initialize cruleMap</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// enum CRULE_TYPE {overwrite=0, maxndvi=1, maxband=2, minband=3, validband=4, mean=5, mode=6, median=7,sum=8};</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> cruleMap[<span class="stringliteral">"overwrite"</span>]=crule::overwrite;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> cruleMap[<span class="stringliteral">"maxndvi"</span>]=crule::maxndvi;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> cruleMap[<span class="stringliteral">"maxband"</span>]=crule::maxband;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> cruleMap[<span class="stringliteral">"minband"</span>]=crule::minband;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> cruleMap[<span class="stringliteral">"validband"</span>]=crule::validband;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> cruleMap[<span class="stringliteral">"mean"</span>]=crule::mean;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> cruleMap[<span class="stringliteral">"mode"</span>]=crule::mode;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> cruleMap[<span class="stringliteral">"median"</span>]=crule::median;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> cruleMap[<span class="stringliteral">"sum"</span>]=crule::sum;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> cruleMap[<span class="stringliteral">"maxallbands"</span>]=crule::maxallbands;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> cruleMap[<span class="stringliteral">"minallbands"</span>]=crule::minallbands;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> cruleMap[<span class="stringliteral">"stdev"</span>]=crule::stdev;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">while</span>(srcnodata_opt.size()<bndnodata_opt.size())</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> srcnodata_opt.push_back(srcnodata_opt[0]);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">while</span>(bndnodata_opt.size()<srcnodata_opt.size())</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> bndnodata_opt.push_back(bndnodata_opt[0]);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(minValue_opt.size()){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">while</span>(minValue_opt.size()<bndnodata_opt.size())</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> minValue_opt.push_back(minValue_opt[0]);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">while</span>(bndnodata_opt.size()<minValue_opt.size())</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> bndnodata_opt.push_back(bndnodata_opt[0]);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span>(maxValue_opt.size()){</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">while</span>(maxValue_opt.size()<bndnodata_opt.size())</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> maxValue_opt.push_back(maxValue_opt[0]);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">while</span>(bndnodata_opt.size()<maxValue_opt.size())</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> bndnodata_opt.push_back(bndnodata_opt[0]);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> RESAMPLE theResample;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"near"</span>){</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> theResample=NEAR;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> cout << <span class="stringliteral">"resampling: nearest neighbor"</span> << endl;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"bilinear"</span>){</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> theResample=BILINEAR;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> cout << <span class="stringliteral">"resampling: bilinear interpolation"</span> << endl;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> std::cout << <span class="stringliteral">"Error: resampling method "</span> << resample_opt[0] << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> exit(1);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> exit(0);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">int</span> nwriteBand=0;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">int</span> writeBand=0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> vector<short> bands;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">//get bounding box</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">double</span> maxLRX=0;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordtype">double</span> maxULY=0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">double</span> minULX=0;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">double</span> minLRY=0;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">double</span> magic_x=1,magic_y=1;<span class="comment">//magic pixel for GDAL map info</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> cout << endl;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> cout << <span class="stringliteral">"Unknown output pixel type: "</span> << otype_opt[0] << endl;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> cout << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">double</span> dx=0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">double</span> dy=0;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">//get bounding box from extentReader if defined</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> extentReader;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> extentReader.open(extent_opt[0]);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span>(!(extentReader.getExtent(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> cerr << <span class="stringliteral">"Error: could not get extent from "</span> << extent_opt[0] << endl;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> exit(1);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> cout << <span class="stringliteral">"--ulx="</span> << ulx_opt[0] << <span class="stringliteral">" --uly="</span> << uly_opt[0] << <span class="stringliteral">" --lrx="</span> << lrx_opt[0] << <span class="stringliteral">" --lry="</span> << lry_opt[0] << endl;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">string</span> theProjection=<span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> GDALColorTable* theColorTable=NULL;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordtype">string</span> imageType;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordtype">bool</span> init=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<input_opt.size();++ifile){</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> imgReader.open(input_opt[ifile]);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> cerr << errorstring << <span class="stringliteral">" "</span> << input_opt[ifile] << endl;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(colorTable_opt.empty())</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span>(imgReader.getColorTable())</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> theColorTable=(imgReader.getColorTable()->Clone());</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(projection_opt.empty())</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> theProjection=imgReader.getProjection();</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> theInterleave+=imgReader.getInterleave();</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>((ulx_opt[0]||uly_opt[0]||lrx_opt[0]||lry_opt[0])&&(!imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> cout << input_opt[ifile] << <span class="stringliteral">" not within bounding box, skipping..."</span> << endl;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> imgReader.close();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> imgReader.getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>(theLRY>theULY){</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> cerr << <span class="stringliteral">"Error: "</span> << input_opt[ifile] << <span class="stringliteral">" is not georeferenced, only referenced images are supported for pkcomposite "</span> << endl;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> exit(1);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> cout << <span class="stringliteral">"Bounding Box (ULX ULY LRX LRY): "</span> << fixed << setprecision(6) << theULX << <span class="stringliteral">" "</span> << theULY << <span class="stringliteral">" "</span> << theLRX << <span class="stringliteral">" "</span> << theLRY << endl;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">if</span>(!init){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">switch</span>(cruleMap[crule_opt[0]]){</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">case</span>(crule::overwrite):</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> cout << <span class="stringliteral">"Composite rule: overwrite"</span> << endl;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">case</span>(crule::maxndvi):</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> cout << <span class="stringliteral">"Composite rule: max ndvi"</span> << endl;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">case</span>(crule::maxband):</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> cout << <span class="stringliteral">"Composite rule: max band"</span> << endl;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">case</span>(crule::minband):</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> cout << <span class="stringliteral">"Composite rule: min band"</span> << endl;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">case</span>(crule::validband):</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> cout << <span class="stringliteral">"Composite rule: valid band"</span> << endl;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">case</span>(crule::mean):</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> cout << <span class="stringliteral">"Composite rule: mean value"</span> << endl;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">case</span>(crule::mode):</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> cout << <span class="stringliteral">"Composite rule: max voting (only for byte images)"</span> << endl;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">case</span>(crule::median):</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> cout << <span class="stringliteral">"Composite rule: median"</span> << endl;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">case</span>(crule::stdev):</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> cout << <span class="stringliteral">"Composite rule: stdev"</span> << endl;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">case</span>(crule::sum):</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> cout << <span class="stringliteral">"Composite rule: sum"</span> << endl;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">case</span>(crule::minallbands):</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> cout << <span class="stringliteral">"Composite rule: minallbands"</span> << endl;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">case</span>(crule::maxallbands):</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> cout << <span class="stringliteral">"Composite rule: maxallbands"</span> << endl;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> nband=band_opt.size();</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> bands.resize(band_opt.size());</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband){</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> bands[iband]=band_opt[iband];</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> assert(bands[iband]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> }</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> nband=imgReader.nrOfBand();</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> bands.resize(nband);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> bands[iband]=iband;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<bndnodata_opt.size();++iband){</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> assert(bndnodata_opt[iband]>=0&&bndnodata_opt[iband]<nband);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">//if output type not set, get type from input image</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span>(theType==GDT_Unknown){</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> theType=imgReader.getDataType();</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> cout << <span class="stringliteral">"Using data type from input image: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> imageType=imgReader.getImageType();</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">// dataType=imgReader.getDataType(0);</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> cout << <span class="stringliteral">"type of data for "</span> << input_opt[ifile] << <span class="stringliteral">": "</span> << theType << endl;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> cout << <span class="stringliteral">"nband: "</span> << nband << endl;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> maxLRX=theLRX;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> maxULY=theULY;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> minULX=theULX;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> minLRY=theLRY;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">if</span>(dx_opt.size())</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> dx=dx_opt[0];</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> dx=imgReader.getDeltaX();</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">if</span>(dy_opt.size())</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> dy=dy_opt[0];</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> dy=imgReader.getDeltaY();</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">// imgReader.getMagicPixel(magic_x,magic_y);</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> init=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">//convert bounding box to magic coordinates</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment">//check uniformity magic pixel</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment">// double test_x,test_y;</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment">// imgReader.getMagicPixel(test_x,test_y);</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment">// if(verbose_opt[0]){</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">// cout << "magic_x, magic_y: " << magic_x << ", " << magic_y << endl;</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// assert(magic_x==test_x);</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// assert(magic_y==test_y);</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> maxLRX=(theLRX>maxLRX)?theLRX:maxLRX;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> maxULY=(theULY>maxULY)?theULY:maxULY;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> minULX=(theULX<minULX)?theULX:minULX;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> minLRY=(theLRY<minLRY)?theLRY:minLRY;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> imgReader.close();</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> cout << <span class="stringliteral">"bounding box input images (ULX ULY LRX LRY): "</span> << fixed << setprecision(6) << minULX << <span class="stringliteral">" "</span> << maxULY << <span class="stringliteral">" "</span> << maxLRX << <span class="stringliteral">" "</span> << minLRY << endl;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(ulx_opt[0]||uly_opt[0]||lrx_opt[0]||lry_opt[0]){</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> maxLRX=lrx_opt[0];</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> maxULY=uly_opt[0];</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> minULX=ulx_opt[0];</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> minLRY=lry_opt[0];</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordtype">bool</span> forceEUgrid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>(projection_opt.size())</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> forceEUgrid=(!(projection_opt[0].compare(<span class="stringliteral">"EPSG:3035"</span>))||!(projection_opt[0].compare(<span class="stringliteral">"EPSG:3035"</span>))||projection_opt[0].find(<span class="stringliteral">"ETRS-LAEA"</span>)!=string::npos);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(forceEUgrid){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment">//force to LAEA grid</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> minULX=floor(minULX);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> minULX-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(minULX)%(static_cast<int>(dx));</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> maxULY=ceil(maxULY);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">if</span>(static_cast<int>(maxULY)%static_cast<int>(dy))</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> maxULY+=dy;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> maxULY-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(maxULY)%(static_cast<int>(dy));</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> maxLRX=ceil(maxLRX);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(static_cast<int>(maxLRX)%static_cast<int>(dx))</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> maxLRX+=dx;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> maxLRX-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(maxLRX)%(static_cast<int>(dx));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> minLRY=floor(minLRY);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> minLRY-=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(minLRY)%(static_cast<int>(dy));</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> cout << <span class="stringliteral">"bounding box composite image (ULX ULY LRX LRY): "</span> << fixed << setprecision(6) << minULX << <span class="stringliteral">" "</span> << maxULY << <span class="stringliteral">" "</span> << maxLRX << <span class="stringliteral">" "</span> << minLRY << endl;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">//initialize image</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> cout << <span class="stringliteral">"initializing composite image..."</span> << endl;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">// double dcol=(maxLRX-minULX+dx-1)/dx;</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment">// double drow=(maxULY-minLRY+dy-1)/dy;</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment">// int ncol=static_cast<int>(dcol);</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment">// int nrow=static_cast<int>(drow);</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordtype">int</span> ncol=ceil((maxLRX-minULX)/dx);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordtype">int</span> nrow=ceil((maxULY-minLRY)/dy);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> cout << <span class="stringliteral">"composite image dim (nrow x ncol): "</span> << nrow << <span class="stringliteral">" x "</span> << ncol << endl;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriter;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">while</span>(weight_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> weight_opt.push_back(weight_opt[0]);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> std::cout << weight_opt << std::endl;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::mode){</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> nwriteBand=(file_opt[0])? class_opt.size()+1:class_opt.size();</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> nwriteBand=(file_opt[0])? bands.size()+1:bands.size();</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> exit(0);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> cout << <span class="stringliteral">"open output image "</span> << output_opt[0] << <span class="stringliteral">" with "</span> << nwriteBand << <span class="stringliteral">" bands"</span> << endl << flush;</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> imgWriter.open(output_opt[0],ncol,nrow,nwriteBand,theType,imageType,option_opt);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nwriteBand;++iband)</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> imgWriter.GDALSetNoDataValue(dstnodata_opt[0],iband);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> cout << error << endl;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> imgWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> gt[0]=minULX;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> gt[1]=dx;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> gt[2]=0;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> gt[3]=maxULY;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> gt[4]=0;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> gt[5]=-dy;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> imgWriter.setGeoTransform(gt);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="comment">// imgWriter.setGeoTransform(minULX,maxULY,dx,dy,0,0);</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(projection_opt.size()){</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> cout << <span class="stringliteral">"projection: "</span> << projection_opt[0] << endl;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> imgWriter.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(theProjection!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> cout << <span class="stringliteral">"projection: "</span> << theProjection << endl;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> imgWriter.setProjection(theProjection);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span>(imgWriter.getDataType()==GDT_Byte){</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> imgWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(theColorTable)</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> imgWriter.setColorTable(theColorTable);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment">//create composite image</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> cout << <span class="stringliteral">"creating composite image"</span> << endl;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <a class="code" href="classVector2d.html">Vector2d<double></a> writeBuffer(nband,imgWriter.nrOfCol());</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> vector<short> fileBuffer(ncol);<span class="comment">//holds the number of used files</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <a class="code" href="classVector2d.html">Vector2d<short></a> maxBuffer;<span class="comment">//buffer used for maximum voting</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <a class="code" href="classVector2d.html">Vector2d<double></a> readBuffer(nband);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::maxndvi)<span class="comment">//ndvi</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> assert(ruleBand_opt.size()==2);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::mode){<span class="comment">//max voting</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> maxBuffer.resize(imgWriter.nrOfCol(),256);<span class="comment">//use only byte images for max voting</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> assert(class_opt[iclass]<maxBuffer.size());</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">int</span> jb=0;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordtype">double</span> readRow=0;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordtype">double</span> readCol=0;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordtype">double</span> lowerCol=0;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordtype">double</span> upperCol=0;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgWriter.nrOfRow();++irow){</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <a class="code" href="classVector2d.html">Vector2d< vector<double></a> > storeBuffer;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> vector<bool> writeValid(ncol);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::mean ||</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> cruleMap[crule_opt[0]]==crule::median ||</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> cruleMap[crule_opt[0]]==crule::sum ||</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> cruleMap[crule_opt[0]]==crule::minallbands ||</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> cruleMap[crule_opt[0]]==crule::maxallbands ||</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> cruleMap[crule_opt[0]]==crule::stdev)</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> storeBuffer.resize(nband,ncol);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriter.nrOfCol();++icol){</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> writeValid[icol]=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> fileBuffer[icol]=0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::mode){<span class="comment">//max voting</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<256;++iclass)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> maxBuffer[icol][iclass]=0;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> }</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> writeBuffer[iband][icol]=dstnodata_opt[0];</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<input_opt.size();++ifile){</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> imgReader.open(input_opt[ifile]);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> }</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> cout << error << endl;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment">// assert(imgReader.getDataType()==theType);</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> assert(imgReader.nrOfBand()>=nband);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">if</span>(!imgReader.covers(minULX,maxULY,maxLRX,minLRY)){</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> imgReader.close();</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> imgReader.geo2image(minULX+(magic_x-1.0)*imgReader.getDeltaX(),maxULY-(magic_y-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> imgReader.geo2image(maxLRX+(magic_x-2.0)*imgReader.getDeltaX(),minLRY-(magic_y-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> uli=floor(uli);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> ulj=floor(ulj);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> lri=floor(lri);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> lrj=floor(lrj);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordtype">double</span> startCol=uli;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordtype">double</span> endCol=lri;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span>(uli<0)</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> startCol=0;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(uli>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> startCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span>(lri<0)</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> endCol=0;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(lri>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> endCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">int</span> readncol=endCol-startCol+1;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">//convert irow to geo</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordtype">double</span> x=0;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordtype">double</span> y=0;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> imgWriter.image2geo(0,irow,x,y);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span>(readRow<0||readRow>=imgReader.nrOfRow()){</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> imgReader.close();</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// for(int iband=0;iband<imgReader.nrOfBand();++iband){</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordtype">int</span> readBand=(band_opt.size()>iband)? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> readBuffer[iband].resize(readncol);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> imgReader.readData(readBuffer[iband],GDT_Float64,startCol,endCol,readRow,readBand,theResample);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> cerr << <span class="stringliteral">"error reading image "</span> << input_opt[ifile] << <span class="stringliteral">": "</span> << endl;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">throw</span>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> }</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ib=0;ib<ncol;++ib){</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> assert(imgWriter.image2geo(ib,irow,x,y));</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span>(readCol<0||readCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordtype">double</span> val_current=0;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordtype">double</span> val_new=0;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordtype">bool</span> readValid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> lowerCol=0;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> vband=0;vband<bndnodata_opt.size();++vband){</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> val_new=(readCol-0.5-lowerCol)*readBuffer[bndnodata_opt[vband]][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[bndnodata_opt[vband]][lowerCol-startCol];</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">if</span>(minValue_opt.size()>vband){</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span>(val_new<=minValue_opt[vband]){</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(maxValue_opt.size()>vband){</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">if</span>(val_new>=maxValue_opt[vband]){</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> }</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">if</span>(srcnodata_opt.size()>vband){</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">if</span>(val_new==srcnodata_opt[vband]){</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> }</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> vband=0;vband<bndnodata_opt.size();++vband){</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> val_new=readBuffer[bndnodata_opt[vband]][readCol-startCol];</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">if</span>(minValue_opt.size()>vband){</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">if</span>(val_new<=minValue_opt[vband]){</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> }</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">if</span>(maxValue_opt.size()>vband){</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">if</span>(val_new>=maxValue_opt[vband]){</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> }</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(srcnodata_opt.size()>vband){</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span>(val_new==srcnodata_opt[vband]){</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> readValid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> }</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">if</span>(readValid){</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">if</span>(file_opt[0]==1)</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> ++fileBuffer[ib];</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">if</span>(writeValid[ib]){</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordtype">int</span> iband=0;</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">switch</span>(cruleMap[crule_opt[0]]){</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">case</span>(crule::maxndvi):{<span class="comment">//max ndvi</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordtype">double</span> red_current=writeBuffer[ruleBand_opt[0]][ib];</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordtype">double</span> nir_current=writeBuffer[ruleBand_opt[1]][ib];</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordtype">double</span> ndvi_current=0;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">if</span>(red_current+nir_current>0&&red_current>=0&&nir_current>=0)</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> ndvi_current=(nir_current-red_current)/(nir_current+red_current);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordtype">double</span> ndvi_new=0;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordtype">double</span> red_new=0;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordtype">double</span> nir_new=0;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> lowerCol=0;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> red_new=(readCol-0.5-lowerCol)*readBuffer[ruleBand_opt[0]][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[ruleBand_opt[0]][lowerCol-startCol];</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> nir_new=(readCol-0.5-lowerCol)*readBuffer[ruleBand_opt[1]][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[ruleBand_opt[1]][lowerCol-startCol];</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">if</span>(red_new+nir_new>0&&red_new>=0&&nir_new>=0)</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> ndvi_new=(nir_new-red_new)/(nir_new+red_new);</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">if</span>(ndvi_new>=ndvi_current){</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> }</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> red_new=readBuffer[ruleBand_opt[0]][readCol-startCol];</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> nir_new=readBuffer[ruleBand_opt[1]][readCol-startCol];</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">if</span>(red_new+nir_new>0&&red_new>=0&&nir_new>=0)</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> ndvi_new=(nir_new-red_new)/(nir_new+red_new);</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">if</span>(ndvi_new>=ndvi_current){</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> }</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> }</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> }</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">case</span>(crule::maxband):</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">case</span>(crule::minband):</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">case</span>(crule::validband):<span class="comment">//max,min,valid band</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> val_current=writeBuffer[ruleBand_opt[0]][ib];</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> lowerCol=0;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> val_new=(readCol-0.5-lowerCol)*readBuffer[ruleBand_opt[0]][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[ruleBand_opt[0]][lowerCol-startCol];</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keywordflow">if</span>((cruleMap[crule_opt[0]]==crule::maxband&&val_new>val_current)||(cruleMap[crule_opt[0]]==crule::minband&&val_new<val_current)||(cruleMap[crule_opt[0]]==crule::validband)){<span class="comment">//&&val_new>minValue_opt[0]&&val_new<maxValue_opt[0])){</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> }</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> val_new=readBuffer[ruleBand_opt[0]][readCol-startCol];</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">if</span>((cruleMap[crule_opt[0]]==crule::maxband&&val_new>val_current)||(cruleMap[crule_opt[0]]==crule::minband&&val_new<val_current)||(cruleMap[crule_opt[0]]==crule::validband)){<span class="comment">//&&val_new>minValue_opt[0]&&val_new<maxValue_opt[0])){</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> }</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">case</span>(crule::mode):<span class="comment">//max voting (only for Byte images)</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> lowerCol=0;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> maxBuffer[ib][val_new]=maxBuffer[ib][val_new]+weight_opt[ifile];</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="comment">// ++(maxBuffer[ib][val_new]);</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> maxBuffer[ib][val_new]=maxBuffer[ib][val_new]+weight_opt[ifile];</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> }</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> }</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">case</span>(crule::mean):<span class="comment">//mean value</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">case</span>(crule::median):<span class="comment">//median value</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">case</span>(crule::sum):<span class="comment">//sum value</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">case</span>(crule::minallbands):<span class="comment">//minimum for each and every band</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">case</span>(crule::maxallbands):<span class="comment">//maximum for each and every band</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">case</span>(crule::stdev):<span class="comment">//maximum for each and every band</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> lowerCol=0;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> storeBuffer[iband][ib].push_back(val_new);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> storeBuffer[iband][ib].push_back(val_new);</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> assert(ifile>0);</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment">// assert(weight_opt[ifile]>=0);</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">// assert(storeBuffer[iband][ib].back()>=0);</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> }</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> }</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keywordflow">case</span>(crule::overwrite):</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> lowerCol=0;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> }</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> }</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> writeValid[ib]=<span class="keyword">true</span>;<span class="comment">//readValid was true</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordtype">int</span> iband=0;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordflow">switch</span>(cruleMap[crule_opt[0]]){</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">case</span>(crule::mean):</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">case</span>(crule::median):</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">case</span>(crule::sum):</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">case</span>(crule::minallbands):</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">case</span>(crule::maxallbands):</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">case</span>(crule::stdev):</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> lowerCol=0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> storeBuffer[iband][ib].push_back(val_new);</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> }</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> storeBuffer[iband][ib].push_back(val_new);</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> }</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> }</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">case</span>(crule::mode):</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> lowerCol=0;</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> maxBuffer[ib][val_new]=maxBuffer[ib][val_new]+weight_opt[ifile];</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// ++(maxBuffer[ib][val_new]);</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> }</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> maxBuffer[ib][val_new]=maxBuffer[ib][val_new]+weight_opt[ifile];</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> }</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment">// ++(maxBuffer[ib][val_new]);</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> }</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> lowerCol=0;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> val_new=(readCol-0.5-lowerCol)*readBuffer[iband][upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[iband][lowerCol-startCol];</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">for</span>(iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> val_new=readBuffer[iband][readCol-startCol];</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> val_new*=weight_opt[ifile];</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> writeBuffer[iband][ib]=val_new;</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> }</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> fileBuffer[ib]=ifile;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> }</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> imgReader.close();</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> }</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">if</span>(cruleMap[crule_opt[0]]==crule::mode){</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> vector<short> classBuffer(imgWriter.nrOfCol());</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">if</span>(class_opt.size()>1){</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriter.nrOfCol();++icol)</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> classBuffer[icol]=maxBuffer[icol][class_opt[iclass]];</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> imgWriter.writeData(classBuffer,GDT_Int16,irow,iclass);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> cerr << <span class="stringliteral">"error writing image file "</span> << output_opt[0] << <span class="stringliteral">": "</span> << error << endl;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">throw</span>;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriter.nrOfCol();++icol){</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> vector<short>::iterator maxit=maxBuffer[icol].begin();</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> maxit=stat.mymax(maxBuffer[icol],maxBuffer[icol].begin(),maxBuffer[icol].end());</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> writeBuffer[0][icol]=distance(maxBuffer[icol].begin(),maxit);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordflow">if</span>(file_opt[0]>1)</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> fileBuffer[icol]=*(maxit);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> }</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> imgWriter.writeData(writeBuffer[0],GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordflow">if</span>(file_opt[0])</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> imgWriter.writeData(fileBuffer,GDT_Int16,irow,1);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> cerr << <span class="stringliteral">"error writing image file "</span> << output_opt[0] << <span class="stringliteral">": "</span> << error << endl;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keywordflow">throw</span>;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> }</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> }</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<bands.size();++iband){</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">// assert(writeBuffer[bands[iband]].size()==imgWriter.nrOfCol());</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> assert(writeBuffer[iband].size()==imgWriter.nrOfCol());</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriter.nrOfCol();++icol){</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">switch</span>(cruleMap[crule_opt[0]]){</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">case</span>(crule::mean):</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment">// writeBuffer[iband][icol]=stat.mean(storeBuffer[bands[iband]][icol]);</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> writeBuffer[iband][icol]=stat.mean(storeBuffer[iband][icol]);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordflow">case</span>(crule::median):</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment">// writeBuffer[iband][icol]=stat.median(storeBuffer[bands[iband]][icol]);</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> writeBuffer[iband][icol]=stat.median(storeBuffer[iband][icol]);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordflow">case</span>(crule::sum):</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">// writeBuffer[iband][icol]=stat.sum(storeBuffer[bands[iband]][icol]);</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> writeBuffer[iband][icol]=stat.sum(storeBuffer[iband][icol]);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">case</span>(crule::minallbands):</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">// writeBuffer[iband][icol]=stat.mymin(storeBuffer[bands[iband]][icol]);</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> writeBuffer[iband][icol]=stat.mymin(storeBuffer[iband][icol]);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">case</span>(crule::maxallbands):</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">// writeBuffer[iband][icol]=stat.mymax(storeBuffer[bands[iband]][icol]);</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> writeBuffer[iband][icol]=stat.mymax(storeBuffer[iband][icol]);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">case</span>(crule::stdev):</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">// writeBuffer[iband][icol]=sqrt(stat.var(storeBuffer[bands[iband]][icol]));</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> writeBuffer[iband][icol]=sqrt(stat.var(storeBuffer[iband][icol]));</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> }</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> cerr << error << endl;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> writeBuffer[iband][icol]=dstnodata_opt[0];</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> }</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> }</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> imgWriter.writeData(writeBuffer[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> }</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> cerr << error << <span class="stringliteral">" in "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">throw</span>;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> }</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordflow">if</span>(file_opt[0]){</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> imgWriter.writeData(fileBuffer,GDT_Int16,irow,bands.size());</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> cerr << error << <span class="stringliteral">" in "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">throw</span>;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> }</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> }</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> }</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/imgWriter.nrOfRow();</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> }</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> imgWriter.close();</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> }</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite_8py_source.html b/doc/html/pkcomposite_8py_source.html
new file mode 100644
index 0000000..4301673
--- /dev/null
+++ b/doc/html/pkcomposite_8py_source.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkcomposite.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcomposite.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkcomposite.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkcomposite_1_1pkcomposite.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html">pkcomposite</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> CRULE_OPTIONS = [<span class="stringliteral">"overwrite"</span>, <span class="stringliteral">"maxndvi"</span>, <span class="stringliteral">"maxband"</span>, <span class="stringliteral">"minband"</span>, <span class="stringliteral">"validband"</span>, <span class="stringliteral">"mean"</span>, <span class="stringliteral">"mode"</span>, <sp [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> CRULE = <span class="stringliteral">"CRULE"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> DX = <span class="stringliteral">"DX"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> DY = <span class="stringliteral">"DY"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> PROJWIN = <span class="stringliteral">'PROJWIN'</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> CB = <span class="stringliteral">"CB"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> SRCNODATA = <span class="stringliteral">"SRCNODATA"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> BNDNODATA = <span class="stringliteral">"BNDNODATA"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> DSTNODATA = <span class="stringliteral">"DSTNODATA"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> MINGUI = <span class="stringliteral">"MINGUI"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> MAXGUI = <span class="stringliteral">"MAXGUI"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> RESAMPLE_OPTIONS = [<span class="stringliteral">'near'</span>, <span class="stringliteral">'bilinear'</span>]</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> RESAMPLE = <span class="stringliteral">"RESAMPLE"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkcomposite"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#af9ff4b9a274bc1edb87048da555c78c5">name</a> = <span class="stringliteral">"composite/mosaic raster datasets"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a93043eb33d26bf02e375323ca06ece59">group</a> = <span class="stringliteral">"[pktools] raster"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterMultipleInput(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aebe799f44d6edf989b3d82412c02809a">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterMultipleInput.TYPE_RASTER))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa82de884f201e7c964fd97e55faa3df3">CRULE</a>,<span class="stringliteral">"composite rule"</span>,self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a17e19984fe0607f36ee4cee78b9e5d06">CRULE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a74b1ad0686d3e17322917be01eff6ac1">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa65064fbe6e45aff10bd5e803026d12a">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a71098b4079244d80eb821653a6e32f00">TYPE</a>, 0))</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ae54bec0854b09e103e5dbe2146589997">DX</a>, <span class="stringliteral">"Output resolution in x (leave 0 for no change)"</span>,0.0,<span class="keywordtype">None</span>,0.0))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a9b797d46ca05fd41a88d0400351bd828">DY</a>, <span class="stringliteral">"Output resolution in y (leave 0 for no change)"</span>,0.0,<span class="keywordtype">None</span>,0.0))</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> self.addParameter(ParameterExtent(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ad003c6db03be187acded3c0890568c61">PROJWIN</a>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">'Georeferenced boundingbox'</span>))</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a75b586bb10dce1cb66553e222d3a214c">CB</a>, <span class="stringliteral">"band index(es) used for the composite rule (0 based), e.g., 0;1 in case of maxndvi"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3c056445acdf3afd1cd26acd12c3c8f0">SRCNODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a65825f1ecd8b707d842cdc9b6bef2722">BNDNODATA</a>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a243d2bbaac6c49959b2117a4042fa219">DSTNODATA</a>, <span class="stringliteral">"nodata value to put in output raster dataset if not valid or out of bounds"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3e62273f4e72fcf528d3c2a2bf2f407d">MINGUI</a>, <span class="stringliteral">"flag values smaller or equal to this value as invalid"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3bc122ffa6ff04ac4da3c486387bf7cc">MAXGUI</a>, <span class="stringliteral">"flag values smaller or equal to this value as invalid"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a54b2d965b3a847cc1975fd62c9c4dce1">RESAMPLE</a>,<span class="stringliteral">"resampling method"</span>,self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a08c3a8025fa0f42847033e6c7bfd6585">RESAMPLE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a2a6835752fccf49eb80614d762310c49">EXTRA</a>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a50e046d7f4d00ac95080ec2b2f281bb6">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands = [cliPath]</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aebe799f44d6edf989b3d82412c02809a">INPUT</a>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> inputFiles = input.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span> inputFile <span class="keywordflow">in</span> inputFiles:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> commands.append(<span class="stringliteral">'"'</span> + inputFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a71098b4079244d80eb821653a6e32f00">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa65064fbe6e45aff10bd5e803026d12a">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a71098b4079244d80eb821653a6e32f00">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa65064fbe6e45aff10bd5e803026d12a">RTYPE</a>)])</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a74b1ad0686d3e17322917be01eff6ac1">OUTPUT</a>)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">"-cr"</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a17e19984fe0607f36ee4cee78b9e5d06">CRULE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa82de884f201e7c964fd97e55faa3df3">CRULE</a>)])</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ae54bec0854b09e103e5dbe2146589997">DX</a>) != 0:</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> commands.append(<span class="stringliteral">"-dx"</span>)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ae54bec0854b09e103e5dbe2146589997">DX</a>)))</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a9b797d46ca05fd41a88d0400351bd828">DY</a>) != 0:</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> commands.append(<span class="stringliteral">"-dy"</span>)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a9b797d46ca05fd41a88d0400351bd828">DY</a>)))</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> projwin = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ad003c6db03be187acded3c0890568c61">PROJWIN</a>))</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> regionCoords = projwin.split(<span class="stringliteral">','</span>)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> commands.append(<span class="stringliteral">'-ulx'</span>)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> commands.append(regionCoords[0])</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> commands.append(<span class="stringliteral">'-uly'</span>)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> commands.append(regionCoords[3])</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> commands.append(<span class="stringliteral">'-lrx'</span>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> commands.append(regionCoords[1])</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> commands.append(<span class="stringliteral">'-lry'</span>)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> commands.append(regionCoords[2])</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> cb=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a75b586bb10dce1cb66553e222d3a214c">CB</a>)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> cbValues = cb.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span> cbValue <span class="keywordflow">in</span> cbValues:</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> commands.append(<span class="stringliteral">'-cb'</span>)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> commands.append(cbValue)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> srcnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3c056445acdf3afd1cd26acd12c3c8f0">SRCNODATA</a>)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> srcnodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> srcnodataValues = srcnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span> srcnodataValue <span class="keywordflow">in</span> srcnodataValues:</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> commands.append(<span class="stringliteral">'-srcnodata'</span>)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> commands.append(srcnodataValue)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> bndnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a65825f1ecd8b707d842cdc9b6bef2722">BNDNODATA</a>)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> bndnodataValues = bndnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span> bndnodataValue <span class="keywordflow">in</span> bndnodataValues:</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> commands.append(<span class="stringliteral">'-bndnodata'</span>)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> commands.append(bndnodataValue)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> commands.append(<span class="stringliteral">'-dstnodata'</span>)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> commands.append(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a243d2bbaac6c49959b2117a4042fa219">DSTNODATA</a>))</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> minGUI=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3e62273f4e72fcf528d3c2a2bf2f407d">MINGUI</a>)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> minGUI != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> minValues = minGUI.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span> minValue <span class="keywordflow">in</span> minValues:</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> commands.append(<span class="stringliteral">'-min'</span>)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> commands.append(minValue)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> maxGUI=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3bc122ffa6ff04ac4da3c486387bf7cc">MAXGUI</a>)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> maxGUI != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> maxValues = maxGUI.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span> maxValue <span class="keywordflow">in</span> maxValues:</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> commands.append(<span class="stringliteral">'-max'</span>)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> commands.append(maxValue)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> commands.append(<span class="stringliteral">"-r"</span>)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> commands.append(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a08c3a8025fa0f42847033e6c7bfd6585">RESAMPLE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a54b2d965b3a847cc1975fd62c9c4dce1">RESAMPLE</a>)])</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a2a6835752fccf49eb80614d762310c49">EXTRA</a>))</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> commands.append(extra)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a08c3a8025fa0f42847033e6c7bfd6585"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a08c3a8025fa0f42847033e6c7bfd6585">qgis.pkcomposite.pkcomposite.RESAMPLE_OPTIONS</a></div><div class="ttdeci">list RESAMPLE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00053">pkcomposite.py:53</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_aebe799f44d6edf989b3d82412c02809a"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aebe799f44d6edf989b3d82412c02809a">qgis.pkcomposite.pkcomposite.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00040">pkcomposite.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html">qgis.pkcomposite.pkcomposite</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00038">pkcomposite.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a3c056445acdf3afd1cd26acd12c3c8f0"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3c056445acdf3afd1cd26acd12c3c8f0">qgis.pkcomposite.pkcomposite.SRCNODATA</a></div><div class="ttdeci">string SRCNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00048">pkcomposite.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a75b586bb10dce1cb66553e222d3a214c"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a75b586bb10dce1cb66553e222d3a214c">qgis.pkcomposite.pkcomposite.CB</a></div><div class="ttdeci">string CB</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00047">pkcomposite.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a243d2bbaac6c49959b2117a4042fa219"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a243d2bbaac6c49959b2117a4042fa219">qgis.pkcomposite.pkcomposite.DSTNODATA</a></div><div class="ttdeci">string DSTNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00050">pkcomposite.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a17e19984fe0607f36ee4cee78b9e5d06"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a17e19984fe0607f36ee4cee78b9e5d06">qgis.pkcomposite.pkcomposite.CRULE_OPTIONS</a></div><div class="ttdeci">list CRULE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00042">pkcomposite.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a54b2d965b3a847cc1975fd62c9c4dce1"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a54b2d965b3a847cc1975fd62c9c4dce1">qgis.pkcomposite.pkcomposite.RESAMPLE</a></div><div class="ttdeci">string RESAMPLE</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00054">pkcomposite.py:54</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a71098b4079244d80eb821653a6e32f00"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a71098b4079244d80eb821653a6e32f00">qgis.pkcomposite.pkcomposite.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00056">pkcomposite.py:56</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_aa65064fbe6e45aff10bd5e803026d12a"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa65064fbe6e45aff10bd5e803026d12a">qgis.pkcomposite.pkcomposite.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00055">pkcomposite.py:55</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a50e046d7f4d00ac95080ec2b2f281bb6"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a50e046d7f4d00ac95080ec2b2f281bb6">qgis.pkcomposite.pkcomposite.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00059">pkcomposite.py:59</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a3bc122ffa6ff04ac4da3c486387bf7cc"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3bc122ffa6ff04ac4da3c486387bf7cc">qgis.pkcomposite.pkcomposite.MAXGUI</a></div><div class="ttdeci">string MAXGUI</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00052">pkcomposite.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a93043eb33d26bf02e375323ca06ece59"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a93043eb33d26bf02e375323ca06ece59">qgis.pkcomposite.pkcomposite.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00064">pkcomposite.py:64</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a74b1ad0686d3e17322917be01eff6ac1"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a74b1ad0686d3e17322917be01eff6ac1">qgis.pkcomposite.pkcomposite.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00041">pkcomposite.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a9b797d46ca05fd41a88d0400351bd828"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a9b797d46ca05fd41a88d0400351bd828">qgis.pkcomposite.pkcomposite.DY</a></div><div class="ttdeci">string DY</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00045">pkcomposite.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_ad003c6db03be187acded3c0890568c61"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ad003c6db03be187acded3c0890568c61">qgis.pkcomposite.pkcomposite.PROJWIN</a></div><div class="ttdeci">string PROJWIN</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00046">pkcomposite.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a65825f1ecd8b707d842cdc9b6bef2722"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a65825f1ecd8b707d842cdc9b6bef2722">qgis.pkcomposite.pkcomposite.BNDNODATA</a></div><div class="ttdeci">string BNDNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00049">pkcomposite.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_ae54bec0854b09e103e5dbe2146589997"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#ae54bec0854b09e103e5dbe2146589997">qgis.pkcomposite.pkcomposite.DX</a></div><div class="ttdeci">string DX</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00044">pkcomposite.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a2a6835752fccf49eb80614d762310c49"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a2a6835752fccf49eb80614d762310c49">qgis.pkcomposite.pkcomposite.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00057">pkcomposite.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_af9ff4b9a274bc1edb87048da555c78c5"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#af9ff4b9a274bc1edb87048da555c78c5">qgis.pkcomposite.pkcomposite.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00063">pkcomposite.py:63</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_a3e62273f4e72fcf528d3c2a2bf2f407d"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#a3e62273f4e72fcf528d3c2a2bf2f407d">qgis.pkcomposite.pkcomposite.MINGUI</a></div><div class="ttdeci">string MINGUI</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00051">pkcomposite.py:51</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcomposite_1_1pkcomposite_html_aa82de884f201e7c964fd97e55faa3df3"><div class="ttname"><a href="classqgis_1_1pkcomposite_1_1pkcomposite.html#aa82de884f201e7c964fd97e55faa3df3">qgis.pkcomposite.pkcomposite.CRULE</a></div><div class="ttdeci">string CRULE</div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite_8py_source.html#l00043">pkcomposite.py:43</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite__gui_2main_8cc_source.html b/doc/html/pkcomposite__gui_2main_8cc_source.html
new file mode 100644
index 0000000..e2274eb
--- /dev/null
+++ b/doc/html/pkcomposite__gui_2main_8cc_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcomposite_gui/main.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html">pkcomposite_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">main.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">main.cc</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QApplication></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> QApplication a(argc, argv);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <a class="code" href="classMainWindow.html">MainWindow</a> w;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> w.show();</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">return</span> a.exec();</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite__gui_2mainwindow_8cc_source.html b/doc/html/pkcomposite__gui_2mainwindow_8cc_source.html
new file mode 100644
index 0000000..46c778f
--- /dev/null
+++ b/doc/html/pkcomposite__gui_2mainwindow_8cc_source.html
@@ -0,0 +1,332 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcomposite_gui/mainwindow.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html">pkcomposite_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.cpp: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "ui_mainwindow.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QFileDialog></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QMessageBox></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QShortcut></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> MainWindow::MainWindow(QWidget *parent) :</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> QMainWindow(parent),</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> ui(new Ui::<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> ui->setupUi(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> QStringList resamplelist;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> resamplelist << <span class="stringliteral">"near"</span> << <span class="stringliteral">"bilinear"</span>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ui->resample->addItems(resamplelist);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> QStringList crulelist;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> crulelist << <span class="stringliteral">"overwrite"</span> << <span class="stringliteral">"maxndvi"</span> << <span class="stringliteral">"maxband"</span> <<<span class="stringliteral">"minband"</span> << <span class="stringliteral">"mean"</span> << <span class="stringliteral">"mode"</span> << <span class= [...]
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> ui->crule->addItems(crulelist);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> QStringList interleavedlist;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> interleavedlist << <span class="stringliteral">"BAND"</span> << <span class="stringliteral">"LINE"</span> << <span class="stringliteral">"PIXEL"</span> <<<span class="stringliteral">"BSQ"</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ui->interleaved->addItems(interleavedlist);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QStringList compressedlist;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> compressedlist << <span class="stringliteral">"NONE"</span> << <span class="stringliteral">"LZW"</span> << <span class="stringliteral">"PACKBITS"</span> <<<span class="stringliteral">"DEFLATE"</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> ui->compressed->addItems(compressedlist);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QStringList otypelist;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> otypelist << <span class="stringliteral">""</span> << <span class="stringliteral">"Byte"</span> << <span class="stringliteral">"Int16"</span> << <span class="stringliteral">"UInt16"</span> << <span class="stringliteral">"UInt32"</span> << <span class="stringliteral">"Int32"</span> << <span class="stringlite [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> ui->otype->addItems(otypelist);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> QStringList oformatlist;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> oformatlist << <span class="stringliteral">""</span> << <span class="stringliteral">"GTiff"</span> << <span class="stringliteral">"HFA"</span> << <span class="stringliteral">"ENVI"</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> ui->oformat->addItems(oformatlist);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> setDefaults();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ui->listWidget_input->setSelectionMode(QAbstractItemView::ExtendedSelection);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">//pressing DEL activates the slots only when list widget has focus</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QShortcut* shortcutDel = <span class="keyword">new</span> QShortcut(QKeySequence(Qt::Key_Delete), ui->listWidget_input);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> connect(shortcutDel, SIGNAL(activated()), <span class="keyword">this</span>, SLOT(deleteItemInput()));</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">//pressing Backspace activates the slots only when list widget has focus</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> QShortcut* shortcutBackspace = <span class="keyword">new</span> QShortcut(QKeySequence(Qt::Key_Backspace), ui->listWidget_input);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> connect(shortcutBackspace, SIGNAL(activated()), <span class="keyword">this</span>, SLOT(deleteItemInput()));</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> MainWindow::~MainWindow()</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">delete</span> ui;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> MainWindow::deleteItemInput()</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> qDeleteAll(ui->listWidget_input->selectedItems());</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// delete ui->listWidget_input->currentItem();</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> MainWindow::setDefaults()</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">//input</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> ui->listWidget_input->clear();</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ui->ulx->clear();</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ui->uly->clear();</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> ui->lrx->clear();</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> ui->lry->clear();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> ui->extent->clear();</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">//composit</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> ui->resample->setCurrentIndex(0);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ui->crule->setCurrentIndex(0);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> ui->cband->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> ui->bndnodata->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> ui->srcnodata->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> ui->min->clear();</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> ui->max->clear();</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">//output</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ui->output->clear();</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> ui->a_srs->clear();</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> ui->otype->setCurrentIndex(0);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ui->oformat->setCurrentIndex(0);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> ui->ct->clear();</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> ui->dx->clear();</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> ui->dy->clear();</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> ui->interleaved->setCurrentIndex(0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> ui->tiled->setChecked(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> ui->compressed->setCurrentIndex(0);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> ui->dstnodata->clear();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> ui->file->clear();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_input_clicked()</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> on_actionInput_image_triggered();</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_output_clicked()</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> on_actionOutput_image_triggered();</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_file_clicked()</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> on_actionSelection_Info_file_triggered();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_ct_clicked()</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> QString qsctfilename=QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Color table ASCII"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> ui->ct->setText(qsctfilename);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_defaults_clicked()</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> setDefaults();</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">void</span> MainWindow::on_actionInput_image_triggered()</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> QFileDialog dialog(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> dialog.setDirectory(QDir::homePath());</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> dialog.setFileMode(QFileDialog::ExistingFiles);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> QStringList fileNames;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (dialog.exec())</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> fileNames = dialog.selectedFiles();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> ui->listWidget_input->addItems(fileNames);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> MainWindow::on_actionOutput_image_triggered()</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> QString outputfilename=QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Output image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> ui->output->setText(outputfilename);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> MainWindow::on_actionSelection_Info_file_triggered()</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> QString infofilename=QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Selection info image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> ui->file->setText(infofilename);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> MainWindow::on_actionQuit_triggered()</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> close();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_Run_clicked()</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ui->commandLineEdit->clear();</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> ui->consoleEdit->clear();</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> QString program = <span class="stringliteral">"pkcomposite"</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(ui->listWidget_input->count()<1)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> MainWindow::on_actionInput_image_triggered();</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(ui->listWidget_input->count()<1){</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> QString qsError=<span class="stringliteral">"No input image file selected"</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i < ui->listWidget_input->count(); ++i)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> QListWidgetItem* item = ui->listWidget_input->item(i);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> program+=<span class="stringliteral">" --input "</span>+item->text();</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty())</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> MainWindow::on_actionOutput_image_triggered();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty()){</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> QString qsError=<span class="stringliteral">"No output image file selected"</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> program+=<span class="stringliteral">" --resample "</span>+ui->resample->currentText();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> program+=<span class="stringliteral">" --crule "</span>+ui->crule->currentText();</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>(!ui->otype->currentText().isEmpty())</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> program+=<span class="stringliteral">" --otype "</span>+ui->otype->currentText();</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(!ui->oformat->currentText().isEmpty())</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> program+=<span class="stringliteral">" --oformat "</span>+ui->oformat->currentText();</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> program+=<span class="stringliteral">" -co COMPRESS="</span>+ui->compressed->currentText();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> program+=<span class="stringliteral">" -co INTERLEAVE="</span>+ui->interleaved->currentText();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(ui->tiled->isChecked())</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> program+=<span class="stringliteral">" -co TILED=YES"</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// QList<QCheckBox*> qcheckBoxList = this->findChildren<QCheckBox *>();</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// for(QList<QCheckBox*>::ConstIterator qcbit=qcheckBoxList.begin();qcbit!=qcheckBoxList.end();++qcbit){</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// if((*qcbit)->isChecked()){</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// QString qsOption;</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// qsOption+=" --";</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// qsOption+=(*qcbit)->objectName();</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">// program+=qsOption;</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(!((*qlbit)->text().isEmpty())){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> QString qsOption;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> qsOption+=(*qlbit)->objectName();</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> qsOption+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> qsOption+=(*qlbit)->text();</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> program+=qsOption;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> ui->commandLineEdit->insert(program);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// QProcess *myProcess = new QProcess(parent);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> myProcess->start(program);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> myProcess->setProcessChannelMode(QProcess::MergedChannels);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> QString p_stderr = myProcess->readAllStandardError();</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span>(!p_stderr.isEmpty()){</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> msgBox.setText(p_stderr);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> msgBox.exec();</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> QString p_stdout = myProcess->readAll();</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> ui->consoleEdit->insertPlainText(p_stdout);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">delete</span> myProcess;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">catch</span>(QString qsError){</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> msgBox.setText(qsError);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> msgBox.exec();</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_extent_clicked()</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> on_actionExtent_triggered();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">void</span> MainWindow::on_actionExtent_triggered()</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> {</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> QString qsextent = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"extent"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> ui->extent->setText(qsextent);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcomposite__gui_2mainwindow_8h_source.html b/doc/html/pkcomposite__gui_2mainwindow_8h_source.html
new file mode 100644
index 0000000..b188911
--- /dev/null
+++ b/doc/html/pkcomposite__gui_2mainwindow_8h_source.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcomposite_gui/mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_ab1bbd5a6b4bd6507847335527b029bb.html">pkcomposite_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define MAINWINDOW_H</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QMainWindow></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QListWidget></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a>;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classMainWindow.html"> 31</a></span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> Q_OBJECT</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">explicit</span> <a class="code" href="classMainWindow.html">MainWindow</a>(QWidget *parent = 0);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> ~<a class="code" href="classMainWindow.html">MainWindow</a>();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">private</span> slots:</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> on_toolButton_input_clicked();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> on_toolButton_defaults_clicked();</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> on_actionInput_image_triggered();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> on_actionOutput_image_triggered();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> on_actionQuit_triggered();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> on_toolButton_output_clicked();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> on_toolButton_Run_clicked();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> on_actionSelection_Info_file_triggered();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> on_toolButton_file_clicked();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> on_toolButton_ct_clicked();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> on_toolButton_extent_clicked();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> on_actionExtent_triggered();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> deleteItemInput();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="classUi_1_1MainWindow.html">Ui::MainWindow</a> *ui;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> setDefaults();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> };</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#endif // MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcreatect.html b/doc/html/pkcreatect.html
new file mode 100644
index 0000000..70e0805
--- /dev/null
+++ b/doc/html/pkcreatect.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkcreatect</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcreatect </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to create and import colour table to GTiff image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkcreatect -i input.txt -o output [-ct colortable | -min value -max value] </code></p>
+<p><code></code></p>
+<p><code> Options: [–grey] [-of GDALformat] [-co option]* [-d description]</code></p>
+<p><code> Advanced options: [–legend filename [–dim cols –dim rows]] </code></p>
+<h1><a class="anchor" id="pkascii2ogr_description"></a>
+Description</h1>
+<p>Utility to include a color table to a raster dataset. You can either define an existing color table (ASCII text file) with the option -ct or define a minimum (-min) and maximum (-max) value.</p>
+<h1><a class="anchor" id="pkcreatect_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>l </td><td>legend </td><td>std::string </td><td></td><td>Create legend as png file </td></tr>
+<tr>
+<td>dim </td><td>dim </td><td>short </td><td>100 </td><td>number of columns and rows in legend. </td></tr>
+<tr>
+<td>min </td><td>min </td><td>double </td><td>0 </td><td>minimum value </td></tr>
+<tr>
+<td>max </td><td>max </td><td>double </td><td>100 </td><td>maximum value </td></tr>
+<tr>
+<td>g </td><td>grey </td><td>bool </td><td>false </td><td>grey scale </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>d </td><td>description </td><td>std::string </td><td></td><td>Set image description </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td>GTiff </td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+</table>
+Usage: pkcreatect -i input.txt -o output [-ct colortable | -min value -max value]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkcreatect can be found <a class="el" href="md_examples_pkcreatect.html#examples_pkcreatect">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcreatect_8cc_source.html b/doc/html/pkcreatect_8cc_source.html
new file mode 100644
index 0000000..462e09b
--- /dev/null
+++ b/doc/html/pkcreatect_8cc_source.html
@@ -0,0 +1,280 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkcreatect.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcreatect.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkcreatect.cc: program to create and import colour table to GTiff image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">short</span> red=-1;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">short</span> green=-1;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">short</span> blue=-1;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> legend_opt(<span class="stringliteral">"l"</span>, <span class="stringliteral">"legend"</span>, <span class="stringliteral">"Create legend as png file"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> dim_opt(<span class="stringliteral">"dim"</span>, <span class="stringliteral">"dim"</span>, <span class="stringliteral">"number of columns and rows in legend."</span>, 100);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> min_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"minimum value"</span>, 0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> max_opt(<span class="stringliteral">"max"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"maximum value"</span>, 100);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> grey_opt(<span class="stringliteral">"g"</span>, <span class="stringliteral">"grey"</span>, <span class="stringliteral">"grey scale"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>, <span class="stringliteral">"GTiff"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, <span class="keyword">false</span>,2);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> legend_opt.setHide(1);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> dim_opt.setHide(1);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> legend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> dim_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> grey_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> exit(0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> cout << endl;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> cout << <span class="stringliteral">"Usage: pkcreatect -i input.txt -o output [-ct colortable | -min value -max value]"</span> << endl;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> cout << endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> GDALColorTable colorTable;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> GDALColorEntry sEntry;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(colorTable_opt.empty()){</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> sEntry.c4=255;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=min_opt[0];i<=max_opt[0];++i){</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span>(grey_opt[0]){</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> sEntry.c1=255*(i-min_opt[0])/(max_opt[0]-min_opt[0]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> sEntry.c2=255*(i-min_opt[0])/(max_opt[0]-min_opt[0]);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> sEntry.c3=255*(i-min_opt[0])/(max_opt[0]-min_opt[0]);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">else</span>{<span class="comment">//hot to cold colour ramp</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> sEntry.c1=255;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> sEntry.c2=255;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> sEntry.c3=255;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">double</span> delta=max_opt[0]-min_opt[0];</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(i<(min_opt[0]+0.25*delta)){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> sEntry.c1=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> sEntry.c2=255*4*(i-min_opt[0])/delta;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i<(min_opt[0]+0.5*delta)){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> sEntry.c1=0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> sEntry.c3=255*(1+4*(min_opt[0]+0.25*delta-i)/delta);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i<(min_opt[0]+0.75*delta)){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> sEntry.c1=255*4*(i-min_opt[0]-0.5*delta)/delta;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> sEntry.c3=0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> sEntry.c2=255*(1+4*(min_opt[0]+0.75*delta-i)/delta);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> sEntry.c3=0;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> colorTable.SetColorEntry(i,&sEntry);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(output_opt.empty())</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> cout << i << <span class="stringliteral">" "</span> << sEntry.c1 << <span class="stringliteral">" "</span> << sEntry.c2 << <span class="stringliteral">" "</span> << sEntry.c3 << <span class="stringliteral">" "</span> << sEntry.c4 << endl;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> legendWriter;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">short</span> ncol=dim_opt[0];</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">short</span> nrow;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(legend_opt.size()){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(dim_opt.size()>1)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> nrow=dim_opt[1];</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> nrow=max_opt[0]-min_opt[0]+1;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> ncol=dim_opt[0];</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> vector<string> pngOption;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// pngOption.push_back("-co worldfile=no");</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> pngOption.push_back(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> legendWriter.open(legend_opt[0],ncol,nrow,1,GDT_Byte,oformat_opt[0],option_opt);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> legendWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> legendWriter.setColorTable(&colorTable);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(legend_opt.size()){</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<legendWriter.nrOfRow();++irow){</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> vector<char> buffer(legendWriter.nrOfCol());</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<legendWriter.nrOfCol();++icol)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> buffer[icol]=min_opt[0]+irow*static_cast<short>(max_opt[0]-min_opt[0]+1)/legendWriter.nrOfRow();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> legendWriter.writeData(buffer,GDT_Byte,legendWriter.nrOfRow()-1-irow);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">if</span>(input_opt.size()&&output_opt.size()){</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader(input_opt[0]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriter;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> theInterleave+=imgReader.getInterleave();</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> imgWriter.open(output_opt[0],imgReader.nrOfCol(),imgReader.nrOfRow(),1,GDT_Byte,oformat_opt[0],option_opt);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> imgWriter.copyGeoTransform(imgReader);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> imgWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> imgWriter.setColorTable(&colorTable);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> imgWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">switch</span>(imgReader.getDataType()){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">case</span>(GDT_Byte):{</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> vector<char> buffer;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> imgReader.readData(buffer,GDT_Byte,irow);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> imgWriter.writeData(buffer,GDT_Byte,irow);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">case</span>(GDT_Int16):{</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> vector<short> buffer;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> cout << <span class="stringliteral">"Warning: copying short to unsigned short without conversion, use gdal_translate -scale if needed..."</span> << endl;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> imgReader.readData(buffer,GDT_Int16,irow,0);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> imgWriter.writeData(buffer,GDT_Int16,irow,0);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">case</span>(GDT_UInt16):{</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> vector<unsigned short> buffer;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> imgReader.readData(buffer,GDT_UInt16,irow,0);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> imgWriter.writeData(buffer,GDT_UInt16,irow,0);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> cerr << <span class="stringliteral">"data type "</span> << imgReader.getDataType() << <span class="stringliteral">" not supported for adding a colortable"</span> << endl;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> imgReader.close();</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> imgWriter.close();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(legend_opt.size())</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> legendWriter.close();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop.html b/doc/html/pkcrop.html
new file mode 100644
index 0000000..4deb76e
--- /dev/null
+++ b/doc/html/pkcrop.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkcrop</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcrop </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>perform raster data operations on image such as crop, extract and stack bands </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkcrop -i input -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-of out_format] [-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}] [-b band]* [-ulx ULX -uly ULY -lrx LRX -lry LRY] [-dx xres] [-dy yres] [-r resampling_method] [-a_srs epsg:number] [-nodata value]</code></p>
+<p><code> Advanced options: [-e vector [-cut]] [-co NAME=VALUE]* [-x center_x -y center_y] [-nx size_x -ny size_y] [-ns nsample -nl nlines] [-as min -as max] [-s scale]* [-off offset]* [-ct colortable] [-d description] </code></p>
+<h1><a class="anchor" id="pkcrop_description"></a>
+Description</h1>
+<p>The utility pkcrop can subset and stack raster images. In the spatial domain it can crop a bounding box from a larger image. The output bounding box is selected by setting the new corner coordinates using the options -ulx -uly -lrx -lry. Alternatively you can set the new image center (-x -y) and size. This can be done either in projected coordinates (using the options -nx -ny) or in image coordinates (using the options -ns -nl). You can also use a vector file to set the new bounding b [...]
+<h1><a class="anchor" id="pkcrop_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file(s). If input contains multiple images, a multi-band output is created </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td></td><td>Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td>0 </td><td>Upper left x value bounding box </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td>0 </td><td>Upper left y value bounding box </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td>0 </td><td>Lower right x value bounding box </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td>0 </td><td>Lower right y value bounding box </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td></td><td>band index to crop (leave empty to retain all bands) </td></tr>
+<tr>
+<td>as </td><td>autoscale </td><td>double </td><td></td><td>scale output to min and max, e.g., –autoscale 0 –autoscale 255 </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td></td><td>Output resolution in x (in meter) (empty: keep original resolution) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td></td><td>Output resolution in y (in meter) (empty: keep original resolution) </td></tr>
+<tr>
+<td>r </td><td>resampling-method </td><td>std::string </td><td>near </td><td>Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation). </td></tr>
+<tr>
+<td>e </td><td>extent </td><td>std::string </td><td></td><td>get boundary from extent from polygons in vector file </td></tr>
+<tr>
+<td>cut </td><td>crop_to_cutline </td><td>bool </td><td>false </td><td>Crop the extent of the target dataset to the extent of the cutline </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Use the first band of the specified file as a validity mask (0 is nodata) </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>x </td><td>x </td><td>double </td><td></td><td>x-coordinate of image center to crop (in meter) </td></tr>
+<tr>
+<td>y </td><td>y </td><td>double </td><td></td><td>y-coordinate of image center to crop (in meter) </td></tr>
+<tr>
+<td>nx </td><td>nx </td><td>double </td><td></td><td>image size in x to crop (in meter) </td></tr>
+<tr>
+<td>ny </td><td>ny </td><td>double </td><td></td><td>image size in y to crop (in meter) </td></tr>
+<tr>
+<td>ns </td><td>ns </td><td>int </td><td></td><td>number of samples to crop (in pixels) </td></tr>
+<tr>
+<td>nl </td><td>nl </td><td>int </td><td></td><td>number of lines to crop (in pixels) </td></tr>
+<tr>
+<td>s </td><td>scale </td><td>double </td><td></td><td>output=scale*input+offset </td></tr>
+<tr>
+<td>off </td><td>offset </td><td>double </td><td></td><td>output=scale*input+offset </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>float </td><td></td><td>Nodata value to put in image if out of bounds. </td></tr>
+<tr>
+<td>d </td><td>description </td><td>std::string </td><td></td><td>Set image description </td></tr>
+</table>
+Usage: pkcrop -i input -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkcrop can be found <a class="el" href="md_examples_pkcrop.html#examples_pkcrop">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop_8cc_source.html b/doc/html/pkcrop_8cc_source.html
new file mode 100644
index 0000000..ab5e440
--- /dev/null
+++ b/doc/html/pkcrop_8cc_source.html
@@ -0,0 +1,795 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkcrop.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcrop.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkcrop.cc: perform raster data operations on image such as crop, extract and stack bands</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> ***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdlib></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <list></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "algorithms/Egcs.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file(s). If input contains multiple images, a multi-band output is created"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">//todo: support layer names</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> extent_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"extent"</span>, <span class="stringliteral">"get boundary from extent from polygons in vector file"</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> cut_opt(<span class="stringliteral">"cut"</span>, <span class="stringliteral">"crop_to_cutline"</span>, <span class="stringliteral">"Crop the extent of the target dataset to the extent of the cutline."</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Use the first band of the specified file as a validity mask (0 is nodata)."</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower right x value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower right y value bounding box"</span>, 0.0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Output resolution in x (in meter) (empty: keep original resolution)"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Output resolution in y (in meter) (empty: keep original resolution)"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> cx_opt(<span class="stringliteral">"x"</span>, <span class="stringliteral">"x"</span>, <span class="stringliteral">"x-coordinate of image center to crop (in meter)"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> cy_opt(<span class="stringliteral">"y"</span>, <span class="stringliteral">"y"</span>, <span class="stringliteral">"y-coordinate of image center to crop (in meter)"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nx_opt(<span class="stringliteral">"nx"</span>, <span class="stringliteral">"nx"</span>, <span class="stringliteral">"image size in x to crop (in meter)"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ny_opt(<span class="stringliteral">"ny"</span>, <span class="stringliteral">"ny"</span>, <span class="stringliteral">"image size in y to crop (in meter)"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> ns_opt(<span class="stringliteral">"ns"</span>, <span class="stringliteral">"ns"</span>, <span class="stringliteral">"number of samples to crop (in pixels)"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> nl_opt(<span class="stringliteral">"nl"</span>, <span class="stringliteral">"nl"</span>, <span class="stringliteral">"number of lines to crop (in pixels)"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index to crop (leave empty to retain all bands)"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> autoscale_opt(<span class="stringliteral">"as"</span>, <span class="stringliteral">"autoscale"</span>, <span class="stringliteral">"scale output to min and max, e.g., --autoscale 0 --autoscale 255"</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"output=scale*input+offset"</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"off"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"output=scale*input+offset"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>,<span class="stringlitera [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Nodata value to put in image if out of bounds."</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> resample_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"resampling-method"</span>, <span class="stringliteral">"Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation)."</span>, <span class="stringliteral">"near"</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0,2);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> extent_opt.setHide(1);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> cut_opt.setHide(1);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> mask_opt.setHide(1);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> cx_opt.setHide(1);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> cy_opt.setHide(1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> nx_opt.setHide(1);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> ny_opt.setHide(1);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> ns_opt.setHide(1);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> nl_opt.setHide(1);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> nodata_opt.setHide(1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> description_opt.setHide(1);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> autoscale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> resample_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> extent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> cut_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> cx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> cy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> nx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> ny_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> ns_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> nl_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> exit(0);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> cout << setprecision(12) << <span class="stringliteral">"--ulx="</span> << ulx_opt[0] << <span class="stringliteral">" --uly="</span> << uly_opt[0] << <span class="stringliteral">" --lrx="</span> << lrx_opt[0] << <span class="stringliteral">" --lry="</span> << lry_opt[0] << endl;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> cout << endl;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> cout << <span class="stringliteral">"Usage: pkcrop -i input -o output"</span> << endl;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> cout << endl;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> exit(0);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> exit(0);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">float</span> nodataValue=nodata_opt.size()? nodata_opt[0] : 0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> RESAMPLE theResample;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"near"</span>){</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> theResample=NEAR;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> cout << <span class="stringliteral">"resampling: nearest neighbor"</span> << endl;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"bilinear"</span>){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> theResample=BILINEAR;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> cout << <span class="stringliteral">"resampling: bilinear interpolation"</span> << endl;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> std::cout << <span class="stringliteral">"Error: resampling method "</span> << resample_opt[0] << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> exit(1);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriter;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">//open input images to extract number of bands and spatial resolution</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">int</span> ncropband=0;<span class="comment">//total number of bands to write</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">double</span> dx=0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">double</span> dy=0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(dx_opt.size())</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> dx=dx_opt[0];</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span>(dy_opt.size())</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> dy=dy_opt[0];</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordtype">bool</span> isGeoRef=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">string</span> projectionString;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iimg=0;iimg<input_opt.size();++iimg){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> imgReader.open(input_opt[iimg]);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span>(!isGeoRef)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> isGeoRef=imgReader.isGeoRef();</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>(imgReader.isGeoRef()&&projection_opt.empty())</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> projectionString=imgReader.getProjection();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(dx_opt.empty()){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span>(!iimg||imgReader.getDeltaX()<dx)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> dx=imgReader.getDeltaX();</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(dy_opt.empty()){</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(!iimg||imgReader.getDeltaY()<dy)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> dy=imgReader.getDeltaY();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> ncropband+=band_opt.size();</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> ncropband+=imgReader.nrOfBand();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> imgReader.close();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> cout << endl;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> cout << <span class="stringliteral">"Unknown output pixel type: "</span> << otype_opt[0] << endl;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> cout << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">//bounding box of cropped image</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">double</span> cropulx=ulx_opt[0];</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordtype">double</span> cropuly=uly_opt[0];</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordtype">double</span> croplrx=lrx_opt[0];</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordtype">double</span> croplry=lry_opt[0];</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">//get bounding box from extentReader if defined</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> extentReader;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">double</span> e_ulx;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">double</span> e_uly;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordtype">double</span> e_lrx;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordtype">double</span> e_lry;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iextent=0;iextent<extent_opt.size();++iextent){</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> extentReader.open(extent_opt[iextent]);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span>(!(extentReader.getExtent(e_ulx,e_uly,e_lrx,e_lry))){</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> cerr << <span class="stringliteral">"Error: could not get extent from "</span> << extent_opt[0] << endl;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> exit(1);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(!iextent){</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> ulx_opt[0]=e_ulx;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> uly_opt[0]=e_uly;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> lrx_opt[0]=e_lrx;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> lry_opt[0]=e_lry;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span>(e_ulx<ulx_opt[0])</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> ulx_opt[0]=e_ulx;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(e_uly>uly_opt[0])</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> uly_opt[0]=e_uly;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span>(e_lrx>lrx_opt[0])</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> lrx_opt[0]=e_lrx;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span>(e_lry<lry_opt[0])</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> lry_opt[0]=e_lry;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> extentReader.close();</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(cut_opt.size())</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> extentReader.open(extent_opt[0]);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(cx_opt.size()&&cy_opt.size()&&nx_opt.size()&&ny_opt.size()){</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> ulx_opt[0]=cx_opt[0]-nx_opt[0]/2.0;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> uly_opt[0]=(isGeoRef) ? cy_opt[0]+ny_opt[0]/2.0 : cy_opt[0]-ny_opt[0]/2.0;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> lrx_opt[0]=cx_opt[0]+nx_opt[0]/2.0;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> lry_opt[0]=(isGeoRef) ? cy_opt[0]-ny_opt[0]/2.0 : cy_opt[0]+ny_opt[0]/2.0;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">// if(cropulx<ulx_opt[0])</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">// cropulx=ulx_opt[0];</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">// if(cropuly>uly_opt[0])</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">// cropuly=uly_opt[0];</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">// if(croplrx>lrx_opt[0])</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">// croplrx=lrx_opt[0];</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">// if(croplry<lry_opt[0])</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">// croplry=lry_opt[0];</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(cx_opt.size()&&cy_opt.size()&&ns_opt.size()&&nl_opt.size()){</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> ulx_opt[0]=cx_opt[0]-ns_opt[0]*dx/2.0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> uly_opt[0]=(isGeoRef) ? cy_opt[0]+nl_opt[0]*dy/2.0 : cy_opt[0]-nl_opt[0]*dy/2.0;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> lrx_opt[0]=cx_opt[0]+ns_opt[0]*dx/2.0;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> lry_opt[0]=(isGeoRef) ? cy_opt[0]-nl_opt[0]*dy/2.0 : cy_opt[0]+nl_opt[0]*dy/2.0;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">// if(cropulx<ulx_opt[0])</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">// cropulx=ulx_opt[0];</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// if(cropuly>uly_opt[0])</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// cropuly=uly_opt[0];</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// if(croplrx>lrx_opt[0])</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// croplrx=lrx_opt[0];</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// if(croplry<lry_opt[0])</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// croplry=lry_opt[0];</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> cout << <span class="stringliteral">"--ulx="</span> << ulx_opt[0] << <span class="stringliteral">" --uly="</span> << uly_opt[0] << <span class="stringliteral">" --lrx="</span> << lrx_opt[0] << <span class="stringliteral">" --lry="</span> << lry_opt[0] << endl;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordtype">int</span> ncropcol=0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordtype">int</span> ncroprow=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> maskWriter;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span>(extent_opt.size()&&cut_opt[0]){</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> ncropcol=abs(static_cast<int>(ceil((lrx_opt[0]-ulx_opt[0])/dx)));</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> ncroprow=abs(static_cast<int>(ceil((uly_opt[0]-lry_opt[0])/dy)));</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> maskWriter.open(<span class="stringliteral">"/vsimem/mask.tif"</span>,ncropcol,ncroprow,1,GDT_Float32,<span class="stringliteral">"GTiff"</span>,option_opt);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> gt[0]=ulx_opt[0];</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> gt[1]=dx;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> gt[2]=0;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> gt[3]=uly_opt[0];</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> gt[4]=0;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> gt[5]=-dy;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> maskWriter.setGeoTransform(gt);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span>(projection_opt.size())</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> maskWriter.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(projectionString.size())</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> maskWriter.setProjection(projectionString);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment">//todo: handle multiple extent options</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> vector<double> burnValues(1,1);<span class="comment">//burn value is 1 (single band)</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> maskWriter.rasterizeOgr(extentReader,burnValues);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> maskWriter.close();</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> exit(2);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> }</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> exit(1);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">//todo: support multiple masks</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> mask_opt.clear();</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> mask_opt.push_back(<span class="stringliteral">"/vsimem/mask.tif"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> std::cout << <span class="stringliteral">"opening mask image file "</span> << mask_opt[0] << std::endl;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> exit(2);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> exit(1);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">//determine number of output bands</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">int</span> writeBand=0;<span class="comment">//write band</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span>(scale_opt.size()){</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">while</span>(scale_opt.size()<band_opt.size())</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> scale_opt.push_back(scale_opt[0]);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(offset_opt.size()){</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">while</span>(offset_opt.size()<band_opt.size())</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> offset_opt.push_back(offset_opt[0]);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(autoscale_opt.size()){</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> assert(autoscale_opt.size()%2==0);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment">// while(autoscale_opt.size()<band_opt.size()*2){</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">// autoscale_opt.push_back(autoscale_opt[0]);</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="comment">// autoscale_opt.push_back(autoscale_opt[1]);</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iimg=0;iimg<input_opt.size();++iimg){</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> cout << <span class="stringliteral">"opening image "</span> << input_opt[iimg] << endl;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> imgReader.open(input_opt[iimg]);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment">//if output type not set, get type from input image</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">if</span>(theType==GDT_Unknown){</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> theType=imgReader.getDataType();</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> cout << <span class="stringliteral">"Using data type from input image: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> theInterleave+=imgReader.getInterleave();</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordtype">int</span> nrow=imgReader.nrOfRow();</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordtype">int</span> ncol=imgReader.nrOfCol();</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">// if(!dx||!dy){</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">// dx=imgReader.getDeltaX();</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// dy=imgReader.getDeltaY();</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> cout << <span class="stringliteral">"size of "</span> << input_opt[iimg] << <span class="stringliteral">": "</span> << ncol << <span class="stringliteral">" cols, "</span><< nrow << <span class="stringliteral">" rows"</span> << endl;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;<span class="comment">//image coordinates</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordtype">bool</span> forceEUgrid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(projection_opt.size())</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> forceEUgrid=(!(projection_opt[0].compare(<span class="stringliteral">"EPSG:3035"</span>))||!(projection_opt[0].compare(<span class="stringliteral">"EPSG:3035"</span>))||projection_opt[0].find(<span class="stringliteral">"ETRS-LAEA"</span>)!=string::npos);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">if</span>(ulx_opt[0]>=lrx_opt[0]){<span class="comment">//default bounding box: no cropping</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> uli=0;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> lri=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> ulj=0;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> lrj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> ncropcol=imgReader.nrOfCol();</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> ncroprow=imgReader.nrOfRow();</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> imgReader.getBoundingBox(cropulx,cropuly,croplrx,croplry);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordtype">double</span> magicX=1,magicY=1;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="comment">// imgReader.getMagicPixel(magicX,magicY);</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">if</span>(forceEUgrid){</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment">//force to LAEA grid</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <a class="code" href="classEgcs.html">Egcs</a> egcs;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> egcs.setLevel(egcs.res2level(dx));</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> egcs.force2grid(cropulx,cropuly,croplrx,croplry);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> }</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx)));</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy)));</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">double</span> magicX=1,magicY=1;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">// imgReader.getMagicPixel(magicX,magicY);</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> cropulx=ulx_opt[0];</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> cropuly=uly_opt[0];</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> croplrx=lrx_opt[0];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> croplry=lry_opt[0];</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(forceEUgrid){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">//force to LAEA grid</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <a class="code" href="classEgcs.html">Egcs</a> egcs;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> egcs.setLevel(egcs.res2level(dx));</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> egcs.force2grid(cropulx,cropuly,croplrx,croplry);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx)));</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy)));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> uli=floor(uli);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> ulj=floor(ulj);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> lri=floor(lri);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> lrj=floor(lrj);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">double</span> dcropcol=0;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">double</span> dcroprow=0;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">double</span> deltaX=imgReader.getDeltaX();</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordtype">double</span> deltaY=imgReader.getDeltaY();</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> dcropcol=(lri-uli+1)/(dx/deltaX);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> dcroprow=(lrj-ulj+1)/(dy/deltaY);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">if</span>(!imgWriter.nrOfBand()){<span class="comment">//not opened yet</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> cout << <span class="stringliteral">"cropulx: "</span> << cropulx << endl;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> cout << <span class="stringliteral">"cropuly: "</span> << cropuly << endl;</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> cout << <span class="stringliteral">"croplrx: "</span> << croplrx << endl;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> cout << <span class="stringliteral">"croplry: "</span> << croplry << endl;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> cout << <span class="stringliteral">"ncropcol: "</span> << ncropcol << endl;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> cout << <span class="stringliteral">"ncroprow: "</span> << ncroprow << endl;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> cout << <span class="stringliteral">"cropulx+ncropcol*dx: "</span> << cropulx+ncropcol*dx << endl;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> cout << <span class="stringliteral">"cropuly-ncroprow*dy: "</span> << cropuly-ncroprow*dy << endl;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> cout << <span class="stringliteral">"upper left column of input image: "</span> << uli << endl;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> cout << <span class="stringliteral">"upper left row of input image: "</span> << ulj << endl;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> cout << <span class="stringliteral">"lower right column of input image: "</span> << lri << endl;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> cout << <span class="stringliteral">"lower right row of input image: "</span> << lrj << endl;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> cout << <span class="stringliteral">"new number of cols: "</span> << ncropcol << endl;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> cout << <span class="stringliteral">"new number of rows: "</span> << ncroprow << endl;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> cout << <span class="stringliteral">"new number of bands: "</span> << ncropband << endl;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="comment">// string theCompression;</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="comment">// if(compress_opt[0]!="")//default</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment">// theCompression=compress_opt[0];</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="comment">// theCompression=imgReader.getCompression();</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment">// string theInterleave;</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">// if(interleave_opt[0]!="")//default</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="comment">// theInterleave=interleave_opt[0];</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment">// theInterleave=imgReader.getInterleave();</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">string</span> imageType=imgReader.getImageType();</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> imgWriter.open(output_opt[0],ncropcol,ncroprow,ncropband,theType,imageType,option_opt);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<ncropband;++iband)</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> imgWriter.GDALSetNoDataValue(nodata_opt[0],iband);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> exit(4);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> imgWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> gt[0]=cropulx;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> gt[1]=dx;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> gt[2]=0;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> gt[3]=cropuly;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> gt[4]=0;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> gt[5]=(imgReader.isGeoRef())? -dy : dy;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> imgWriter.setGeoTransform(gt);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">if</span>(projection_opt.size()){</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> cout << <span class="stringliteral">"projection: "</span> << projection_opt[0] << endl;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> imgWriter.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> imgWriter.setProjection(imgReader.getProjection());</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">if</span>(imgWriter.getDataType()==GDT_Byte){</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> imgWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (imgReader.getColorTable()!=NULL)<span class="comment">//copy colorTable from input image</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> imgWriter.setColorTable(imgReader.getColorTable());</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordtype">double</span> startCol=uli;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordtype">double</span> endCol=lri;</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span>(uli<0)</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> startCol=0;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(uli>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> startCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">if</span>(lri<0)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> endCol=0;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(lri>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> endCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">double</span> startRow=ulj;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">double</span> endRow=lrj;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span>(ulj<0)</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> startRow=0;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ulj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> startRow=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">if</span>(lrj<0)</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> endRow=0;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(lrj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> endRow=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordtype">int</span> readncol=endCol-startCol+1;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> vector<double> readBuffer(readncol+1);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordtype">int</span> nband=(band_opt.size())?band_opt.size() : imgReader.nrOfBand();</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">int</span> readBand=(band_opt.size()>iband)?band_opt[iband]:iband;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> cout << <span class="stringliteral">"extracting band "</span> << readBand << endl;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordtype">double</span> theMin=0;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">double</span> theMax=0;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(autoscale_opt.size()){</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> imgReader.getMinMax(static_cast<int>(startCol),static_cast<int>(endCol),static_cast<int>(startRow),static_cast<int>(endRow),readBand,theMin,theMax);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> }</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> cout << <span class="stringliteral">"minmax: "</span> << theMin << <span class="stringliteral">", "</span> << theMax << endl;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">double</span> theScale=(autoscale_opt[1]-autoscale_opt[0])/(theMax-theMin);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordtype">double</span> theOffset=autoscale_opt[0]-theScale*theMin;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> imgReader.setScale(theScale,readBand);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> imgReader.setOffset(theOffset,readBand);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> } </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span>(scale_opt.size()){</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">if</span>(scale_opt.size()>iband)</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> imgReader.setScale(scale_opt[iband],readBand);</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> imgReader.setScale(scale_opt[0],readBand);</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> }</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">if</span>(offset_opt.size()){</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">if</span>(offset_opt.size()>iband)</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> imgReader.setOffset(offset_opt[iband],readBand);</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> imgReader.setOffset(offset_opt[0],readBand);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> }</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordtype">double</span> readRow=0;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordtype">double</span> readCol=0;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">double</span> lowerCol=0;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordtype">double</span> upperCol=0;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgWriter.nrOfRow();++irow){</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> vector<float> lineMask;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">double</span> x=0;</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">double</span> y=0;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment">//convert irow to geo</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> imgWriter.image2geo(0,irow,x,y);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> vector<double> writeBuffer;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">if</span>(readRow<0||readRow>=imgReader.nrOfRow()){</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment">//if(readRow<0)</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">//readRow=0;</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">//else if(readRow>=imgReader.nrOfRow())</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">//readRow=imgReader.nrOfRow()-1;</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ib=0;ib<imgWriter.nrOfCol();++ib)</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> writeBuffer.push_back(nodataValue);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> cout << <span class="stringliteral">"reading row: "</span> << readRow << endl;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">if</span>(endCol<imgReader.nrOfCol()-1)</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> imgReader.readData(readBuffer,GDT_Float64,startCol,endCol+1,readRow,readBand,theResample);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> imgReader.readData(readBuffer,GDT_Float64,startCol,endCol,readRow,readBand,theResample);</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">// for(int ib=0;ib<ncropcol;++ib){</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordtype">double</span> oldRowMask=-1;<span class="comment">//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ib=0;ib<imgWriter.nrOfCol();++ib){</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> imgWriter.image2geo(ib,irow,x,y);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">if</span>(readCol<0||readCol>=imgReader.nrOfCol()){</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// if(readCol<0||readCol>=imgReader.nrOfCol()){</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="comment">// if(readCol<0)</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="comment">// readCol=0;</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="comment">// else if(readCol>=imgReader.nrOfCol())</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="comment">// readCol=imgReader.nrOfCol()-1;</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> writeBuffer.push_back(nodataValue);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordtype">double</span> geox=0;</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordtype">double</span> geoy=0;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="comment">//read mask</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordtype">double</span> colMask=0;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keywordtype">double</span> rowMask=0;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> imgWriter.image2geo(ib,irow,geox,geoy);</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> maskReader.geo2image(geox,geoy,colMask,rowMask);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> colMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(colMask);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> rowMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rowMask);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">if</span>(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldRowMask)){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> assert(rowMask>=0&&rowMask<maskReader.nrOfRow());</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> maskReader.readData(lineMask,GDT_Float32,static_cast<int>(rowMask));</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> exit(1);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> exit(3);</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> oldRowMask=rowMask;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> }</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">if</span>(lineMask[colMask]==0)</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">if</span>(!valid)</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> writeBuffer.push_back(nodataValue);</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> lowerCol=0;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="comment">// writeBuffer.push_back((readCol-0.5-lowerCol)*(readBuffer[upperCol-startCol]*theScale+theOffset)+(1-readCol+0.5+lowerCol)*(readBuffer[lowerCol-startCol]*theScale+theOffset));</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> writeBuffer.push_back((readCol-0.5-lowerCol)*readBuffer[upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[lowerCol-startCol]);</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> readCol-=startCol;<span class="comment">//we only start reading from startCol</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// writeBuffer.push_back(readBuffer[readCol]*theScale+theOffset);</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> writeBuffer.push_back(readBuffer[readCol]);</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> }</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> exit(2);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> }</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">if</span>(writeBuffer.size()!=imgWriter.nrOfCol())</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> cout << <span class="stringliteral">"writeBuffer.size()="</span> << writeBuffer.size() << <span class="stringliteral">", imgWriter.nrOfCol()="</span> << imgWriter.nrOfCol() << endl;</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> assert(writeBuffer.size()==imgWriter.nrOfCol());</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> imgWriter.writeData(writeBuffer,GDT_Float64,irow,writeBand);</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> exit(3);</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> }</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> progress/=imgWriter.nrOfRow();</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> progress+=(imgWriter.nrOfRow()*writeBand);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> progress/=imgWriter.nrOfBand()*imgWriter.nrOfRow();</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> assert(progress>=0);</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> assert(progress<=1);</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> }</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> }</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> ++writeBand;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> imgReader.close();</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">if</span>(extent_opt.size()&&cut_opt.size()){</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> extentReader.close();</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> }</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> imgWriter.close();</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classEgcs_html"><div class="ttname"><a href="classEgcs.html">Egcs</a></div><div class="ttdef"><b>Definition:</b> <a href="Egcs_8h_source.html#l00026">Egcs.h:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop_8py_source.html b/doc/html/pkcrop_8py_source.html
new file mode 100644
index 0000000..73ff915
--- /dev/null
+++ b/doc/html/pkcrop_8py_source.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkcrop.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkcrop.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkcrop.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkcrop_1_1pkcrop.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html">pkcrop</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> DX = <span class="stringliteral">"DX"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> DY = <span class="stringliteral">"DY"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> PROJWIN = <span class="stringliteral">'PROJWIN'</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> BAND = <span class="stringliteral">"BAND"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> RESAMPLE_OPTIONS = [<span class="stringliteral">'near'</span>, <span class="stringliteral">'bilinear'</span>]</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> RESAMPLE = <span class="stringliteral">"RESAMPLE"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkcrop"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a21c98defb19a723cbdbcae90e5c414b9">name</a> = <span class="stringliteral">"crop raster datasets"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a15a208344b67a578ed7592105617762f">group</a> = <span class="stringliteral">"[pktools] raster"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addParameter(ParameterMultipleInput(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a660abf1b5edd9b7c39f49a48748e73b5">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterMultipleInput.TYPE_RASTER))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#afab963f14ed687777ea04b6b03a44708">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a67d94ff9e997ceda91ff39334e1e668a">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa901690d584f08efbc4a4225985fde89">TYPE</a>, 0))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa64c23657fe96444fe2d03717be4b5c5">DX</a>, <span class="stringliteral">"Output resolution in x (leave 0 for no change)"</span>,0.0,<span class="keywordtype">None</span>,0.0))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#ac5779beb227252f20da289d505f4deee">DY</a>, <span class="stringliteral">"Output resolution in y (leave 0 for no change)"</span>,0.0,<span class="keywordtype">None</span>,0.0))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterExtent(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a6f6f27285700550bb52391c36d130328">PROJWIN</a>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">'Georeferenced boundingbox'</span>))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a9d01bfa7ad85384abf071d59c0f5f69e">NODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a5993a8cc5d573cf0bc3a0d97a1811cd7">BAND</a>, <span class="stringliteral">"Band(s) in input image to crop, e.g., 0;1;2 (leave empty to retain all bands)"</span>,<span class="stringliteral">''</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a000a9bda4206edf6ef542590140e43e8">RESAMPLE</a>,<span class="stringliteral">"resampling method"</span>,self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a4ca284fa3cb6e48275aa399f6547d4f2">RESAMPLE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a7c99a0e343473c7cfc94623c115590db">EXTRA</a>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a0a169418d9b1c0e55c1c09c711b920b1">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> commands = [cliPath]</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a660abf1b5edd9b7c39f49a48748e73b5">INPUT</a>)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> inputFiles = input.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span> inputFile <span class="keywordflow">in</span> inputFiles:</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">'"'</span> + inputFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa901690d584f08efbc4a4225985fde89">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a67d94ff9e997ceda91ff39334e1e668a">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> commands.append(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa901690d584f08efbc4a4225985fde89">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a67d94ff9e997ceda91ff39334e1e668a">RTYPE</a>)])</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#afab963f14ed687777ea04b6b03a44708">OUTPUT</a>)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa64c23657fe96444fe2d03717be4b5c5">DX</a>) != 0:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> commands.append(<span class="stringliteral">"-dx"</span>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#aa64c23657fe96444fe2d03717be4b5c5">DX</a>)))</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#ac5779beb227252f20da289d505f4deee">DY</a>) != 0:</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> commands.append(<span class="stringliteral">"-dy"</span>)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#ac5779beb227252f20da289d505f4deee">DY</a>)))</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> projwin = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a6f6f27285700550bb52391c36d130328">PROJWIN</a>))</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> if(str(projwin).find(<span class="stringliteral">','</span>)>0):</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> regionCoords = projwin.split(<span class="stringliteral">','</span>)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> commands.append(<span class="stringliteral">'-ulx'</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(regionCoords[0])</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(<span class="stringliteral">'-uly'</span>)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> commands.append(regionCoords[3])</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> commands.append(<span class="stringliteral">'-lrx'</span>)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(regionCoords[1])</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> commands.append(<span class="stringliteral">'-lry'</span>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> commands.append(regionCoords[2])</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a9d01bfa7ad85384abf071d59c0f5f69e">NODATA</a>)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> nodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> nodataValues = nodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span> nodataValue <span class="keywordflow">in</span> nodataValues:</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> band=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a5993a8cc5d573cf0bc3a0d97a1811cd7">BAND</a>)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> band != <span class="stringliteral">''</span>:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> bandValues = band.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">for</span> bandValue <span class="keywordflow">in</span> bandValues:</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> commands.append(<span class="stringliteral">'-b'</span>)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> commands.append(bandValue)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> commands.append(<span class="stringliteral">"-r"</span>)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> commands.append(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a4ca284fa3cb6e48275aa399f6547d4f2">RESAMPLE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a000a9bda4206edf6ef542590140e43e8">RESAMPLE</a>)])</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkcrop_1_1pkcrop.html#a7c99a0e343473c7cfc94623c115590db">EXTRA</a>))</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> commands.append(extra)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a6f6f27285700550bb52391c36d130328"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a6f6f27285700550bb52391c36d130328">qgis.pkcrop.pkcrop.PROJWIN</a></div><div class="ttdeci">string PROJWIN</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00044">pkcrop.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a000a9bda4206edf6ef542590140e43e8"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a000a9bda4206edf6ef542590140e43e8">qgis.pkcrop.pkcrop.RESAMPLE</a></div><div class="ttdeci">string RESAMPLE</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00048">pkcrop.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a15a208344b67a578ed7592105617762f"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a15a208344b67a578ed7592105617762f">qgis.pkcrop.pkcrop.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00058">pkcrop.py:58</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_aa901690d584f08efbc4a4225985fde89"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#aa901690d584f08efbc4a4225985fde89">qgis.pkcrop.pkcrop.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00050">pkcrop.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a4ca284fa3cb6e48275aa399f6547d4f2"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a4ca284fa3cb6e48275aa399f6547d4f2">qgis.pkcrop.pkcrop.RESAMPLE_OPTIONS</a></div><div class="ttdeci">list RESAMPLE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00047">pkcrop.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_afab963f14ed687777ea04b6b03a44708"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#afab963f14ed687777ea04b6b03a44708">qgis.pkcrop.pkcrop.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00041">pkcrop.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a660abf1b5edd9b7c39f49a48748e73b5"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a660abf1b5edd9b7c39f49a48748e73b5">qgis.pkcrop.pkcrop.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00040">pkcrop.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_ac5779beb227252f20da289d505f4deee"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#ac5779beb227252f20da289d505f4deee">qgis.pkcrop.pkcrop.DY</a></div><div class="ttdeci">string DY</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00043">pkcrop.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a21c98defb19a723cbdbcae90e5c414b9"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a21c98defb19a723cbdbcae90e5c414b9">qgis.pkcrop.pkcrop.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00057">pkcrop.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html">qgis.pkcrop.pkcrop</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00038">pkcrop.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_aa64c23657fe96444fe2d03717be4b5c5"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#aa64c23657fe96444fe2d03717be4b5c5">qgis.pkcrop.pkcrop.DX</a></div><div class="ttdeci">string DX</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00042">pkcrop.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a7c99a0e343473c7cfc94623c115590db"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a7c99a0e343473c7cfc94623c115590db">qgis.pkcrop.pkcrop.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00051">pkcrop.py:51</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a67d94ff9e997ceda91ff39334e1e668a"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a67d94ff9e997ceda91ff39334e1e668a">qgis.pkcrop.pkcrop.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00049">pkcrop.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a9d01bfa7ad85384abf071d59c0f5f69e"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a9d01bfa7ad85384abf071d59c0f5f69e">qgis.pkcrop.pkcrop.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00046">pkcrop.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a0a169418d9b1c0e55c1c09c711b920b1"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a0a169418d9b1c0e55c1c09c711b920b1">qgis.pkcrop.pkcrop.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00053">pkcrop.py:53</a></div></div>
+<div class="ttc" id="classqgis_1_1pkcrop_1_1pkcrop_html_a5993a8cc5d573cf0bc3a0d97a1811cd7"><div class="ttname"><a href="classqgis_1_1pkcrop_1_1pkcrop.html#a5993a8cc5d573cf0bc3a0d97a1811cd7">qgis.pkcrop.pkcrop.BAND</a></div><div class="ttdeci">string BAND</div><div class="ttdef"><b>Definition:</b> <a href="pkcrop_8py_source.html#l00045">pkcrop.py:45</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop__gui_2main_8cc_source.html b/doc/html/pkcrop__gui_2main_8cc_source.html
new file mode 100644
index 0000000..34e75be
--- /dev/null
+++ b/doc/html/pkcrop__gui_2main_8cc_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcrop_gui/main.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html">pkcrop_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">main.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">main.cc: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QApplication></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> QApplication a(argc, argv);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <a class="code" href="classMainWindow.html">MainWindow</a> w;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> w.show();</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">return</span> a.exec();</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop__gui_2mainwindow_8cc_source.html b/doc/html/pkcrop__gui_2mainwindow_8cc_source.html
new file mode 100644
index 0000000..1491581
--- /dev/null
+++ b/doc/html/pkcrop__gui_2mainwindow_8cc_source.html
@@ -0,0 +1,379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcrop_gui/mainwindow.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html">pkcrop_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.cc: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "ui_mainwindow.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QFileDialog></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QMessageBox></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> MainWindow::MainWindow(QWidget *parent) :</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> QMainWindow(parent),</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> ui(new Ui::<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> ui->setupUi(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> QStringList resamplelist;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> resamplelist << <span class="stringliteral">"near"</span> << <span class="stringliteral">"bilinear"</span>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ui->resample->addItems(resamplelist);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> QStringList interleavedlist;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> interleavedlist << <span class="stringliteral">"BAND"</span> << <span class="stringliteral">"LINE"</span> << <span class="stringliteral">"PIXEL"</span> <<<span class="stringliteral">"BSQ"</span>;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> ui->interleaved->addItems(interleavedlist);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> QStringList compressedlist;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> compressedlist << <span class="stringliteral">"NONE"</span> << <span class="stringliteral">"LZW"</span> << <span class="stringliteral">"PACKBITS"</span> <<<span class="stringliteral">"DEFLATE"</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ui->compressed->addItems(compressedlist);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> QStringList otypelist;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> otypelist << <span class="stringliteral">""</span> << <span class="stringliteral">"Byte"</span> << <span class="stringliteral">"Int16"</span> << <span class="stringliteral">"UInt16"</span> << <span class="stringliteral">"UInt32"</span> << <span class="stringliteral">"Int32"</span> << <span class="stringlite [...]
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> ui->otype->addItems(otypelist);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> QStringList oformatlist;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> oformatlist << <span class="stringliteral">""</span> << <span class="stringliteral">"GTiff"</span> << <span class="stringliteral">"HFA"</span> << <span class="stringliteral">"ENVI"</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> ui->oformat->addItems(oformatlist);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> setDefaults();</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> ui->listWidget_input->setSelectionMode(QAbstractItemView::ExtendedSelection);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">//pressing DEL activates the slots only when list widget has focus</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> QShortcut* shortcutDel = <span class="keyword">new</span> QShortcut(QKeySequence(Qt::Key_Delete), ui->listWidget_band);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> connect(shortcutDel, SIGNAL(activated()), <span class="keyword">this</span>, SLOT(deleteItem()));</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">//pressing Backspace activates the slots only when list widget has focus</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> QShortcut* shortcutBackspace = <span class="keyword">new</span> QShortcut(QKeySequence(Qt::Key_Backspace), ui->listWidget_band);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> connect(shortcutBackspace, SIGNAL(activated()), <span class="keyword">this</span>, SLOT(deleteItem()));</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> MainWindow::~MainWindow()</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">delete</span> ui;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> MainWindow::setDefaults()</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> m_as=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> m_manual=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">//input</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> ui->listWidget_input->clear();</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> ui->ulx->clear();</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> ui->uly->clear();</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> ui->lrx->clear();</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> ui->lry->clear();</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> ui->extent->clear();</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> ui->listWidget_band->clear();</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">//scaling</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ui->resample->setCurrentIndex(0);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> ui->as_from->clear();</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> ui->as_to->clear();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> ui->scale->clear();</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> ui->offset->clear();</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">//output</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ui->output->clear();</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> ui->a_srs->clear();</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> ui->otype->setCurrentIndex(0);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> ui->oformat->setCurrentIndex(0);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> ui->ct->clear();</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> ui->dx->clear();</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ui->dy->clear();</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ui->interleaved->setCurrentIndex(0);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> ui->tiled->setChecked(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> ui->compressed->setCurrentIndex(0);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ui->nodata->clear();</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> MainWindow::deleteItem()</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> qDeleteAll(ui->listWidget_band->selectedItems());</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_input_clicked()</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_extent_clicked()</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> on_actionExtent_triggered();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_output_clicked()</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_defaults_clicked()</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> setDefaults();</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_ct_clicked()</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> QString qsct = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Color table ASCII"</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> ui->ct->setText(qsct);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> MainWindow::on_actionInput_triggered()</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QFileDialog dialog(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> dialog.setDirectory(QDir::homePath());</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> dialog.setFileMode(QFileDialog::ExistingFiles);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> QStringList fileNames;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span> (dialog.exec())</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> fileNames = dialog.selectedFiles();</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> ui->listWidget_input->addItems(fileNames);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">//fill in band list</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> ui->listWidget_band->clear();</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> QString program=<span class="stringliteral">"pkinfo -nb -i "</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">//todo: loop over all filenames and get the minimum number of bands?</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> program+=fileNames[0];</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> myProcess->start(program);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> QString p_stdout=myProcess->readAll();</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">int</span> nband=p_stdout.section(<span class="charliteral">' '</span>,1).toInt();</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> QStringList bandlist;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> QString qsband=QString::number(iband);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> bandlist << qsband;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> ui->listWidget_band->addItems(bandlist);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> ui->listWidget_band->setSelectionMode(QAbstractItemView::ExtendedSelection);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> ui->listWidget_band->selectAll();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">void</span> MainWindow::on_actionExtent_triggered()</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> QString qsextent = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"extent"</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ui->extent->setText(qsextent);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">void</span> MainWindow::on_actionOutput_triggered()</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> QString outputfilename=QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Output image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> ui->output->setText(outputfilename);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">void</span> MainWindow::on_actionQuit_triggered()</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> {</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> close();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_Run_clicked()</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> ui->commandLineEdit->clear();</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> ui->consoleEdit->clear();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> QString program = <span class="stringliteral">"pkcomposite"</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span>(ui->listWidget_input->count()<1)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> MainWindow::on_actionInput_triggered();</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span>(ui->listWidget_input->count()<1){</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> QString qsError=<span class="stringliteral">"No input image file selected"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i < ui->listWidget_input->count(); ++i)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> QListWidgetItem* item = ui->listWidget_input->item(i);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> program+=<span class="stringliteral">" --input "</span>+item->text();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i < ui->listWidget_band->count(); ++i)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> QListWidgetItem* item = ui->listWidget_band->item(i);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> program+=<span class="stringliteral">" --band "</span>+item->text();</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty())</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> MainWindow::on_actionOutput_triggered();</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty()){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> QString qsError=<span class="stringliteral">"No output image file selected"</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> program+=<span class="stringliteral">" --resample "</span>+ui->resample->currentText();</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(!ui->otype->currentText().isEmpty())</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> program+=<span class="stringliteral">" --otype "</span>+ui->otype->currentText();</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(!ui->oformat->currentText().isEmpty())</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> program+=<span class="stringliteral">" --oformat "</span>+ui->oformat->currentText();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> program+=<span class="stringliteral">" -co COMPRESS="</span>+ui->compressed->currentText();</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> program+=<span class="stringliteral">" -co INTERLEAVE="</span>+ui->interleaved->currentText();</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span>(ui->tiled->isChecked())</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> program+=<span class="stringliteral">" -co TILED=YES"</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">//todo: radiobuttons on scaling</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(m_as){</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> program+=<span class="stringliteral">" --autoscale "</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> program+=ui->as_from->text();</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> program+=<span class="stringliteral">" --autoscale "</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> program+=ui->as_to->text();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_manual){</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> program+=<span class="stringliteral">" --scale "</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> program+=ui->scale->text();</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> program+=<span class="stringliteral">" ---offset "</span>;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> program+=ui->offset->text();</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// QList<QCheckBox*> qcheckBoxList = this->findChildren<QCheckBox *>();</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// for(QList<QCheckBox*>::ConstIterator qcbit=qcheckBoxList.begin();qcbit!=qcheckBoxList.end();++qcbit){</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// if((*qcbit)->isChecked()){</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// QString qsOption;</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// qsOption+=" --";</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// qsOption+=(*qcbit)->objectName();</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// program+=qsOption;</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span>(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(!((*qlbit)->text().isEmpty())){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> QString qsOption;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> qsOption+=(*qlbit)->objectName();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> qsOption+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> qsOption+=(*qlbit)->text();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> program+=qsOption;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> ui->commandLineEdit->insert(program);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// QProcess *myProcess = new QProcess(parent); </span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> myProcess->start(program);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> myProcess->setProcessChannelMode(QProcess::MergedChannels);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// QString p_stderr = myProcess->readyReadStandardError();</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">// if(!p_stderr.isEmpty()){</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// QMessageBox msgBox;</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// msgBox.setText(p_stderr);</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// msgBox.exec();</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> QString p_stdout = myProcess->readAll();</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> ui->consoleEdit->insertPlainText(p_stdout);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keyword">delete</span> myProcess;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">catch</span>(QString qsError){</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> msgBox.setText(qsError);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> msgBox.exec();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">void</span> MainWindow::on_autoscale_clicked()</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> {</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> m_as=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> m_manual=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">void</span> MainWindow::on_manual_clicked()</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> m_as=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> m_manual=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">void</span> MainWindow::on_noscale_clicked()</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> {</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> m_as=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> m_manual=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_clicked()</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> ui->listWidget_input->clear();</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkcrop__gui_2mainwindow_8h_source.html b/doc/html/pkcrop__gui_2mainwindow_8h_source.html
new file mode 100644
index 0000000..b7ced95
--- /dev/null
+++ b/doc/html/pkcrop__gui_2mainwindow_8h_source.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkcrop_gui/mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_35acdce8930fac877097c845a64519e5.html">pkcrop_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.h: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define MAINWINDOW_H</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QMainWindow></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QModelIndex></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <QShortcut></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <QListWidget></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a>;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> Q_OBJECT</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">explicit</span> <a class="code" href="classMainWindow.html">MainWindow</a>(QWidget *parent = 0);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> ~<a class="code" href="classMainWindow.html">MainWindow</a>();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">private</span> slots:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> on_toolButton_input_clicked();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> on_toolButton_extent_clicked();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> on_toolButton_output_clicked();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> on_toolButton_ct_clicked();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> on_toolButton_Run_clicked();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> on_toolButton_defaults_clicked();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> on_actionQuit_triggered();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> on_autoscale_clicked();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> on_actionExtent_triggered();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> on_manual_clicked();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> on_noscale_clicked();</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> deleteItem();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> on_toolButton_clicked();</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <a class="code" href="classUi_1_1MainWindow.html">Ui::MainWindow</a> *ui;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> setDefaults();</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">bool</span> m_manual;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">bool</span> m_as;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> };</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#endif // MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff.html b/doc/html/pkdiff.html
new file mode 100644
index 0000000..797f840
--- /dev/null
+++ b/doc/html/pkdiff.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkdiff</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdiff </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to compare two raster image files </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkdiff -i input -ref reference </code></p>
+<p><code></code></p>
+<p><code> Options: [-ln layer] [-b band] [-cm] [-lr attribute] [-c name -r value]* [-nodata value]* [-m mask] [-msknodata value]*</code></p>
+<p><code> Advanced options: [-o output] [-f OGR format] [-lc attribute] [-bnd value [-hom] [-circ]] [-ct colortable] [-co NAME=VALUE]*</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkdiff_description"></a>
+Description</h1>
+<p>The utility pkdiff compares two datasets. The reference can either be a raster or a vector, but the input must be a raster dataset. In case the reference is a raster dataset, a pixel by pixel comparison is performed. With no further options, the utility reports if the rasters are identical or different. If required, an output raster dataset can be written with a qualitative information per pixel: 0 (input=reference), 1 (input>reference) or 2 (input<reference). If, however, the r [...]
+<p>A typical use of the utility is to assess the accuracy of an input raster land cover map, based on a reference vector dataset. The reference dataset must contain an attribute (label) for each class. A confusion matrix is produced if the option -cm|–confusion is set. Here too, an output dataset can be written, which will be a vector dataset in this case. It contains the reference feature points with the extracted data value of the raster input dataset as a new attribute. </p>
+<h1><a class="anchor" id="pkdiff_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input raster dataset. </td></tr>
+<tr>
+<td>ref </td><td>reference </td><td>std::string </td><td></td><td>Reference (raster or vector) dataset </td></tr>
+<tr>
+<td>ln </td><td>ln </td><td>std::string </td><td></td><td>Layer name(s) in sample. Leave empty to select all (for vector reference datasets only) </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td>0 </td><td>Input (reference) raster band. Optionally, you can define different bands for input and reference bands respectively: -b 1 -b 0. </td></tr>
+<tr>
+<td>rmse </td><td>rmse </td><td>bool </td><td>false </td><td>Report root mean squared error </td></tr>
+<tr>
+<td>reg </td><td>reg </td><td>bool </td><td>false </td><td>Report linear regression (Input = c0+c1*Reference) </td></tr>
+<tr>
+<td>cm </td><td>confusion </td><td>bool </td><td>false </td><td>Create confusion matrix (to std out) </td></tr>
+<tr>
+<td>lr </td><td>lref </td><td>std::string </td><td>label </td><td>Attribute name of the reference label (for vector reference datasets only) </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>List of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>List of class values (use same order as in classname option). </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>No data value(s) in input or reference dataset are ignored </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. </td></tr>
+<tr>
+<td>msknodata </td><td>msknodata </td><td>double </td><td>0 </td><td>Mask value(s) where image is invalid. Use negative value for valid data (example: use -t -1: if only -1 is valid value) </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output dataset (optional) </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>SQLite </td><td>OGR format for output vector (for vector reference datasets only) </td></tr>
+<tr>
+<td>lc </td><td>lclass </td><td>std::string </td><td>class </td><td>Attribute name of the classified label (for vector reference datasets only) </td></tr>
+<tr>
+<td>cmf </td><td>cmf </td><td>std::string </td><td>ascii </td><td>Format for confusion matrix (ascii or latex) </td></tr>
+<tr>
+<td>cmo </td><td>cmo </td><td>std::string </td><td></td><td>Output file for confusion matrix </td></tr>
+<tr>
+<td>se95 </td><td>se95 </td><td>bool </td><td>false </td><td>Report standard error for 95 confidence interval </td></tr>
+<tr>
+<td>bnd </td><td>boundary </td><td>short </td><td>1 </td><td>Boundary for selecting the sample (for vector reference datasets only) </td></tr>
+<tr>
+<td>hom </td><td>homogeneous </td><td>bool </td><td>false </td><td>Only take regions with homogeneous boundary into account (for reference datasets only) </td></tr>
+<tr>
+<td>circ </td><td>circular </td><td>bool </td><td>false </td><td>Use circular boundary (for vector reference datasets only) </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid). </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td></td><td>commission </td><td>short </td><td>2 </td><td>Value for commission errors: input label < reference label </td></tr>
+</table>
+Usage: pkdiff -i input -ref reference</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkdiff can be found <a class="el" href="md_examples_pkdiff.html#examples_pkdiff">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff_8cc_source.html b/doc/html/pkdiff_8cc_source.html
new file mode 100644
index 0000000..c28e3f3
--- /dev/null
+++ b/doc/html/pkdiff_8cc_source.html
@@ -0,0 +1,971 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkdiff.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdiff.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkdiff.cc: program to compare two raster image files</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input raster dataset."</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> reference_opt(<span class="stringliteral">"ref"</span>, <span class="stringliteral">"reference"</span>, <span class="stringliteral">"Reference (raster or vector) dataset"</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> layer_opt(<span class="stringliteral">"ln"</span>, <span class="stringliteral">"ln"</span>, <span class="stringliteral">"Layer name(s) in sample. Leave empty to select all (for vector reference datasets only)"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata."</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> msknodata_opt(<span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"Mask value(s) where image is invalid. Use negative value for valid data (example: use -t -1: if only -1 is valid value)"</span>, 0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"No data value(s) in input or reference dataset are ignored"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Input (reference) raster band. Optionally, you can define different bands for input and reference bands respectively: -b 1 -b 0."</span>, 0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> rmse_opt(<span class="stringliteral">"rmse"</span>, <span class="stringliteral">"rmse"</span>, <span class="stringliteral">"Report root mean squared error"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> regression_opt(<span class="stringliteral">"reg"</span>, <span class="stringliteral">"reg"</span>, <span class="stringliteral">"Report linear regression (Input = c0+c1*Reference)"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> confusion_opt(<span class="stringliteral">"cm"</span>, <span class="stringliteral">"confusion"</span>, <span class="stringliteral">"Create confusion matrix (to std out)"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> cmformat_opt(<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"Format for confusion matrix (ascii or latex)"</span>,<span class="stringliteral">"ascii"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> cmoutput_opt(<span class="stringliteral">"cmo"</span>,<span class="stringliteral">"cmo"</span>,<span class="stringliteral">"Output file for confusion matrix"</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> se95_opt(<span class="stringliteral">"se95"</span>,<span class="stringliteral">"se95"</span>,<span class="stringliteral">"Report standard error for 95 confidence interval"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> labelref_opt(<span class="stringliteral">"lr"</span>, <span class="stringliteral">"lref"</span>, <span class="stringliteral">"Attribute name of the reference label (for vector reference datasets only)"</span>, <span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"List of class names."</span>); </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"List of class values (use same order as in classname option)."</span>); </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output dataset (optional)"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"OGR format for output vector (for vector reference datasets only)"</span>,<span class="stringliteral">"SQLite"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> labelclass_opt(<span class="stringliteral">"lc"</span>, <span class="stringliteral">"lclass"</span>, <span class="stringliteral">"Attribute name of the classified label (for vector reference datasets only)"</span>, <span class="stringliteral">"class"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> boundary_opt(<span class="stringliteral">"bnd"</span>, <span class="stringliteral">"boundary"</span>, <span class="stringliteral">"Boundary for selecting the sample (for vector reference datasets only)"</span>, 1,1);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> homogeneous_opt(<span class="stringliteral">"hom"</span>, <span class="stringliteral">"homogeneous"</span>, <span class="stringliteral">"Only take regions with homogeneous boundary into account (for reference datasets only)"</span>, <span class="keyword">false</span>,1);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> disc_opt(<span class="stringliteral">"circ"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"Use circular boundary (for vector reference datasets only)"</span>, <span class="keyword">false</span>,1);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid)."</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> valueE_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"correct"</span>, <span class="stringliteral">"Value for correct pixels"</span>, 0,2);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> valueO_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"omission"</span>, <span class="stringliteral">"Value for omission errors: input label > reference label"</span>, 1,2);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> valueC_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"commission"</span>, <span class="stringliteral">"Value for commission errors: input label < reference label"</span>, 2,1);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"Verbose level"</span>, 0,2);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> output_opt.setHide(1);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> ogrformat_opt.setHide(1);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> labelclass_opt.setHide(1);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> boundary_opt.setHide(1);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> homogeneous_opt.setHide(1);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> disc_opt.setHide(1);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> reference_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> layer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> rmse_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> regression_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> confusion_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> labelref_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> msknodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> labelclass_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> cmformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> cmoutput_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> se95_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> boundary_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> homogeneous_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> disc_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// class_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> valueE_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> valueO_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> valueC_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> exit(0);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> cout << endl;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> cout << <span class="stringliteral">"Usage: pkdiff -i input -ref reference"</span> << endl;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> cout << endl;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputReader;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> cout << <span class="stringliteral">"flag(s) set to"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cout << <span class="stringliteral">" "</span> << nodata_opt[iflag];</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> cout << endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> exit(0);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(reference_opt.empty()){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::cerr << <span class="stringliteral">"No reference file provided (use option -ref). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> exit(0);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">//band_opt[0] is for input</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">//band_opt[1] is for reference</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(band_opt.size()<2)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">while</span>(mask_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> mask_opt.push_back(mask_opt[0]);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> vector<short> inputRange;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> vector<short> referenceRange;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> cm;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">int</span> nclass=0;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> map<string,short> classValueMap;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> vector<std::string> nameVector(255);<span class="comment">//the inverse of the classValueMap</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> vector<string> classNames;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntotalValidation=0;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nflagged=0;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <a class="code" href="classVector2d.html">Vector2d<int></a> resultClass;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> vector<float> user;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> vector<float> producer;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> vector<unsigned int> nvalidation;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// if(class_opt.size()>1)</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// inputRange=class_opt;</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// if(classvalue_opt.size()>1)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// inputRange=classvalue_opt;</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> cout << <span class="stringliteral">"opening input image file "</span> << input_opt[0] << endl;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> inputReader.open(input_opt[0]);<span class="comment">//,imagicX_opt[0],imagicY_opt[0]);</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> cerr << error << endl;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> exit(1);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> inputReader.getRange(inputRange,band_opt[0]);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> inputReader.close();</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag){</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> vector<short>::iterator fit;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> fit=find(inputRange.begin(),inputRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(nodata_opt[iflag]));</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(fit!=inputRange.end())</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> inputRange.erase(fit);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> nclass=inputRange.size();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> cout << <span class="stringliteral">"nclass (inputRange.size()): "</span> << nclass << endl;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> cout << <span class="stringliteral">"input range: "</span> << endl;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass){</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> classValueMap[classname_opt[iclass]]=classvalue_opt[iclass];</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> assert(classvalue_opt[iclass]<nameVector.size());</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> nameVector[classvalue_opt[iclass]]=classname_opt[iclass];</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// nclass=classValueMap.size();</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> rc=0;rc<inputRange.size();++rc){</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> classNames.push_back(type2string(inputRange[rc]));</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> cout << inputRange[rc] << endl;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> cm.setClassNames(classNames);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> cout << <span class="stringliteral">"class names: "</span> << endl;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<cm.nClasses();++iclass)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> cout << iclass << <span class="stringliteral">" "</span> << cm.getClass(iclass) << endl;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> resultClass.resize(nclass,nclass);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> user.resize(nclass);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> producer.resize(nclass);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> nvalidation.resize(nclass);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">//initialize</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> rc=0;rc<nclass;++rc){</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<nclass;++ic)</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> resultClass[rc][ic]=0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> nvalidation[rc]=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordtype">bool</span> isDifferent=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">bool</span> refIsRaster=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> referenceReaderOgr;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> referenceReaderOgr.open(reference_opt[0]);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> referenceReaderOgr.close();</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> refIsRaster=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">float</span> progress=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// if(reference_opt[0].find(".shp")!=string::npos){</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span>(!refIsRaster){</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iinput=0;iinput<input_opt.size();++iinput){</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> cout << <span class="stringliteral">"Processing input "</span> << input_opt[iinput] << endl;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> assert(reference_opt.size()==output_opt.size());</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iref=0;iref<reference_opt.size();++iref){</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> cout << <span class="stringliteral">"reference "</span> << reference_opt[iref] << endl;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// assert(reference_opt[iref].find(".shp")!=string::npos);</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> inputReader.open(input_opt[iinput]);<span class="comment">//,imagicX_opt[0],imagicY_opt[0]);</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> maskReader.open(mask_opt[iinput]);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> assert(inputReader.nrOfCol()==maskReader.nrOfCol());</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> assert(inputReader.nrOfRow()==maskReader.nrOfRow());</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> referenceReaderOgr.open(reference_opt[iref]);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> cerr << error << endl;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> exit(1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>(confusion_opt[0])</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> referenceRange=inputRange;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> ogrWriter.open(output_opt[iref],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> cerr << error << endl;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> exit(1);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">int</span> nlayer=referenceReaderOgr.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayer;++ilayer){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> progress=0;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> OGRLayer *readLayer=referenceReaderOgr.getLayer(ilayer);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// readLayer = referenceReaderOgr.getDataSource()->GetLayer(ilayer);</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">string</span> currentLayername=readLayer->GetName();</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span>(layer_opt.size())</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span>(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> cout << <span class="stringliteral">"processing layer "</span> << readLayer->GetName() << endl;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> readLayer->ResetReading();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> OGRLayer *writeLayer;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> cout << <span class="stringliteral">"creating output vector file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment">// assert(output_opt[0].find(".shp")!=string::npos);</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> cout << <span class="stringliteral">"creating layer: "</span> << readLayer->GetName() << endl;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// if(ogrWriter.createLayer(layername, referenceReaderOgr.getProjection(ilayer), referenceReaderOgr.getGeometryType(ilayer), papszOptions)==NULL)</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> writeLayer=ogrWriter.createLayer(readLayer->GetName(), referenceReaderOgr.getProjection(ilayer), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> assert(writeLayer);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> cout << <span class="stringliteral">"created layer"</span> << endl;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> cout << <span class="stringliteral">"copy fields from "</span> << reference_opt[iref] << endl;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> ogrWriter.copyFields(referenceReaderOgr,ilayer,ilayer);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">//create extra field for classified label</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">short</span> theDim=boundary_opt[0];</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowJ=-theDim/2;windowJ<(theDim+1)/2;++windowJ){</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowI=-theDim/2;windowI<(theDim+1)/2;++windowI){</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(disc_opt[0]&&(windowI*windowI+windowJ*windowJ>(theDim/2)*(theDim/2)))</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> ostringstream fs;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">if</span>(theDim>1)</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> fs << labelclass_opt[0] << <span class="stringliteral">"_"</span> << windowJ << <span class="stringliteral">"_"</span> << windowI;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> fs << labelclass_opt[0];</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> cout << <span class="stringliteral">"creating field "</span> << fs.str() << endl;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> ogrWriter.createField(fs.str(),OFTInteger,ilayer);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> OGRFeature *readFeature;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> OGRFeature *writeFeature;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">int</span> isample=0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfeatureInLayer=readLayer->GetFeatureCount();</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">while</span>( (readFeature = readLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> cout << <span class="stringliteral">"sample "</span> << ++isample << endl;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">//get x and y from readFeature</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">double</span> x,y;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> OGRPoint centroidPoint;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> OGRPoint *poPoint;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> poGeometry = readFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">// assert( poGeometry != NULL && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint );</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>(poGeometry==NULL)</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbMultiPolygon){</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> OGRMultiPolygon readPolygon = *((OGRMultiPolygon *) poGeometry);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> readPolygon = *((OGRMultiPolygon *) poGeometry);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> readPolygon.Centroid(¢roidPoint);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> poPoint=¢roidPoint;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> OGRPolygon readPolygon=*((OGRPolygon *) poGeometry);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> readPolygon.Centroid(¢roidPoint);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> poPoint=¢roidPoint;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint )</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> std::cerr << <span class="stringliteral">"Warning: skipping feature (not of type point or polygon)"</span> << std::endl;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> }</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> x=poPoint->getX();</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> y=poPoint->getY();</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">double</span> inputValue;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> vector<double> inputValues;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">bool</span> isHomogeneous=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">short</span> maskValue;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">short</span> outputValue;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">//read referenceValue from feature</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> referenceValue;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordtype">string</span> referenceClassName;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> referenceClassName=readFeature->GetFieldAsString(readFeature->GetFieldIndex(labelref_opt[0].c_str()));</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> referenceValue=classValueMap[referenceClassName];</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> referenceValue=readFeature->GetFieldAsInteger(readFeature->GetFieldIndex(labelref_opt[0].c_str()));</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> cout << <span class="stringliteral">"reference value: "</span> << referenceValue << endl;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">bool</span> pixelFlagged=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordtype">bool</span> maskFlagged=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span>(referenceValue==nodata_opt[iflag])</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> pixelFlagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">if</span>(pixelFlagged)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">double</span> i_centre,j_centre;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">//input reader is georeferenced!</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> inputReader.geo2image(x,y,i_centre,j_centre);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// i_centre=x;</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// j_centre=y;</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> j_centre=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(j_centre);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> i_centre=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(i_centre);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">//check if j_centre is out of bounds</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>(static_cast<int>(j_centre)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(j_centre)>=inputReader.nrOfRow())</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="comment">//check if i_centre is out of bounds</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">if</span>(static_cast<int>(i_centre)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(i_centre)>=inputReader.nrOfCol())</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> writeFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> assert(readFeature);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">int</span> nfield=readFeature->GetFieldCount();</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> writeFeature->SetGeometry(poPoint);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> cout << <span class="stringliteral">"copying fields from "</span> << reference_opt[0] << endl;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> assert(readFeature);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> assert(writeFeature);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> vector<int> panMap(nfield);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> vector<int>::iterator panit=panMap.begin();</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<nfield;++ifield)</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> panMap[ifield]=ifield;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> writeFeature->SetFieldsFrom(readFeature,&(panMap[0]));</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">// if(writeFeature->SetFrom(readFeature)!= OGRERR_NONE)</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// cerr << "writing feature failed" << endl;</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">// cout << "feature written" << endl;</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordtype">bool</span> windowAllFlagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">bool</span> windowHasFlag=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">short</span> theDim=boundary_opt[0];</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowJ=-theDim/2;windowJ<(theDim+1)/2;++windowJ){</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowI=-theDim/2;windowI<(theDim+1)/2;++windowI){</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span>(disc_opt[0]&&(windowI*windowI+windowJ*windowJ>(theDim/2)*(theDim/2)))</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordtype">int</span> j=j_centre+windowJ;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment">//check if j is out of bounds</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span>(static_cast<int>(j)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(j)>=inputReader.nrOfRow())</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordtype">int</span> i=i_centre+windowI;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment">//check if i is out of bounds</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(static_cast<int>(i)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(i)>=inputReader.nrOfCol())</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> cout << setprecision(12) << <span class="stringliteral">"reading image value at x,y "</span> << x << <span class="stringliteral">","</span> << y << <span class="stringliteral">" ("</span> << i << <span class="stringliteral">","</span> << j << <span class="stringliteral">"), "</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> inputReader.readData(inputValue,GDT_Float64,i,j,band_opt[0]);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> inputValues.push_back(inputValue);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">if</span>(inputValues.back()!=*(inputValues.begin()))</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> isHomogeneous=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> cout << <span class="stringliteral">"input value: "</span> << inputValue << endl;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> pixelFlagged=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag){</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span>(inputValue==nodata_opt[iflag]){</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> pixelFlagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> }</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> maskFlagged=<span class="keyword">false</span>;<span class="comment">//(msknodata_opt[ivalue]>=0)?false:true;</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> maskReader.readData(maskValue,GDT_Float64,i,j,0);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalue=0;ivalue<msknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">if</span>(msknodata_opt[ivalue]>=0){<span class="comment">//values set in msknodata_opt are invalid</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span>(maskValue==msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> maskFlagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">else</span>{<span class="comment">//only values set in msknodata_opt are valid</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">if</span>(maskValue!=-msknodata_opt[ivalue])</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> maskFlagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> maskFlagged=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> pixelFlagged=pixelFlagged||maskFlagged;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span>(pixelFlagged)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> windowHasFlag=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> windowAllFlagged=<span class="keyword">false</span>;<span class="comment">//at least one good pixel in neighborhood</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">//at this point we know the values for the entire window</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">if</span>(homogeneous_opt[0]){<span class="comment">//only centre pixel</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordtype">int</span> j=j_centre;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">int</span> i=i_centre;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment">//flag if not all pixels are homogeneous or if at least one pixel flagged</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">if</span>(!windowHasFlag&&isHomogeneous){</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> writeFeature->SetField(labelclass_opt[0].c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(inputValue));</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> ++ntotalValidation;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> assert(inputValue<nameVector.size());</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">string</span> className=nameVector[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(inputValue)];</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> cm.incrementResult(type2string<short>(classValueMap[referenceClassName]),type2string<short>(classValueMap[className]),1);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">int</span> rc=distance(referenceRange.begin(),find(referenceRange.begin(),referenceRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(referenceValue)));</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">int</span> ic=distance(inputRange.begin(),find(inputRange.begin(),inputRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(inputValue)));</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> assert(rc<nclass);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> assert(ic<nclass);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> ++nvalidation[rc];</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> ++resultClass[rc][ic];</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> cout << <span class="stringliteral">"increment: "</span> << rc << <span class="stringliteral">" "</span> << referenceRange[rc] << <span class="stringliteral">" "</span> << ic << <span class="stringliteral">" "</span> << inputRange[ic] << endl;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> cm.incrementResult(cm.getClass(rc),cm.getClass(ic),1);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">if</span>(inputValue==referenceValue){<span class="comment">//correct</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> outputValue=valueE_opt[0];</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(valueE_opt[0]==nodata_opt[0])</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> outputValue=inputValue;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputValue>referenceValue)<span class="comment">//1=forest,2=non-forest</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> outputValue=valueO_opt[0];<span class="comment">//omission error</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> outputValue=valueC_opt[0];<span class="comment">//commission error</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> }</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowJ=-theDim/2;windowJ<(theDim+1)/2;++windowJ){</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> windowI=-theDim/2;windowI<(theDim+1)/2;++windowI){</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">if</span>(disc_opt[0]&&(windowI*windowI+windowJ*windowJ>(theDim/2)*(theDim/2)))</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordtype">int</span> j=j_centre+windowJ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">//check if j is out of bounds</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">if</span>(static_cast<int>(j)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(j)>=inputReader.nrOfRow())</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">int</span> i=i_centre+windowI;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="comment">//check if i is out of bounds</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">if</span>(static_cast<int>(i)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(i)>=inputReader.nrOfCol())</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">if</span>(!windowAllFlagged){</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> ostringstream fs;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">if</span>(theDim>1)</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> fs << labelclass_opt[0] << <span class="stringliteral">"_"</span> << windowJ << <span class="stringliteral">"_"</span> << windowI;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> fs << labelclass_opt[0];</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> writeFeature->SetField(fs.str().c_str(),inputValue);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">if</span>(!windowJ&&!windowI){<span class="comment">//centre pixel</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> ++ntotalValidation;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> assert(inputValue<nameVector.size());</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">string</span> className=nameVector[<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(inputValue)];</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> cm.incrementResult(type2string<short>(classValueMap[referenceClassName]),type2string<short>(classValueMap[className]),1);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">int</span> rc=distance(referenceRange.begin(),find(referenceRange.begin(),referenceRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(referenceValue)));</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordtype">int</span> ic=distance(inputRange.begin(),find(inputRange.begin(),inputRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(inputValue)));</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">if</span>(rc>=nclass)</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span>(ic>=nclass)</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment">// assert(rc<nclass);</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment">// assert(ic<nclass);</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> ++nvalidation[rc];</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> ++resultClass[rc][ic];</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> cout << <span class="stringliteral">"increment: "</span> << rc << <span class="stringliteral">" "</span> << referenceRange[rc] << <span class="stringliteral">" "</span> << ic << <span class="stringliteral">" "</span> << inputRange[ic] << endl;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> cm.incrementResult(cm.getClass(rc),cm.getClass(ic),1);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> }</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span>(inputValue==referenceValue){<span class="comment">//correct</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> outputValue=valueE_opt[0];</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">if</span>(valueE_opt[0]==nodata_opt[0])</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> outputValue=inputValue;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> }</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> }</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputValue>referenceValue)<span class="comment">//1=forest,2=non-forest</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> outputValue=valueO_opt[0];<span class="comment">//omission error</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> outputValue=valueC_opt[0];<span class="comment">//commission error</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> }</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> }</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">if</span>(!windowAllFlagged){</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> cout << <span class="stringliteral">"creating feature"</span> << endl;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writeFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">string</span> errorString=<span class="stringliteral">"Failed to create feature in OGR vector file"</span>;</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> OGRFeature::DestroyFeature( writeFeature );</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> }</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> ++ifeature;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ifeature+1)/nfeatureInLayer;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }<span class="comment">//next feature</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }<span class="comment">//next layer</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> ogrWriter.close();</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> referenceReaderOgr.close();</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> inputReader.close();</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> maskReader.close();</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> }<span class="comment">//next reference</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> }<span class="comment">//next input</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> pfnProgress(1.0,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }<span class="comment">//reference is OGR vector</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">else</span>{<span class="comment">//reference is GDAL raster</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> gdalWriter;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> inputReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> cout << <span class="stringliteral">"opening output image "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> theInterleave+=inputReader.getInterleave();</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> gdalWriter.open(output_opt[0],inputReader.nrOfCol(),inputReader.nrOfRow(),1,inputReader.getDataType(),inputReader.getImageType(),option_opt);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">if</span>(nodata_opt.size())</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> gdalWriter.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> gdalWriter.copyGeoTransform(inputReader);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> gdalWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputReader.getColorTable()!=NULL){</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> cout << <span class="stringliteral">"set colortable from input image"</span> << endl;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> gdalWriter.setColorTable(inputReader.getColorTable());</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> cout << <span class="stringliteral">"no output image defined"</span> << endl;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> cout << error << endl;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> exit(2);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="comment">//todo: support different data types!</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> vector<double> lineInput(inputReader.nrOfCol());</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> vector<double> lineMask(maskReader.nrOfCol());</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> vector<double> lineOutput;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> vector<double> bufferInput;<span class="comment">//for regression</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> vector<double> bufferReference;<span class="comment">//for regression</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> lineOutput.resize(inputReader.nrOfCol());</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordtype">double</span> oldreferencerow=-1;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordtype">double</span> oldmaskrow=-1;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> referenceReaderGdal;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> referenceReaderGdal.open(reference_opt[0]);<span class="comment">//,rmagicX_opt[0],rmagicY_opt[0]);</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> cerr << error << endl;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> exit(1);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">if</span>(inputReader.isGeoRef()){</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> assert(referenceReaderGdal.isGeoRef());</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">if</span>(inputReader.getProjection()!=referenceReaderGdal.getProjection())</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> cerr << <span class="stringliteral">"Warning: projection of input image and reference image are different"</span> << endl;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> }</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> vector<double> lineReference(referenceReaderGdal.nrOfCol());</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> referenceReaderGdal.getRange(referenceRange,band_opt[1]);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag){</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> vector<short>::iterator fit;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> fit=find(referenceRange.begin(),referenceRange.end(),<span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(nodata_opt[iflag]));</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">if</span>(fit!=referenceRange.end())</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> referenceRange.erase(fit);</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> cout << <span class="stringliteral">"reference range: "</span> << endl;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> rc=0;rc<referenceRange.size();++rc)</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> cout << referenceRange[rc] << endl;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">if</span>(referenceRange.size()!=inputRange.size()){</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">if</span>(confusion_opt[0]||output_opt.size()){</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> cout << <span class="stringliteral">"reference range is not equal to input range!"</span> << endl;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> cout << <span class="stringliteral">"Kappa: "</span> << 0 << endl; </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> cout << <span class="stringliteral">"total weighted: "</span> << 0 << endl;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> cout << <span class="stringliteral">"reference range is not equal to input range!"</span> << endl;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> cout << input_opt[0] << <span class="stringliteral">" and "</span> << reference_opt[0] << <span class="stringliteral">" are different"</span> << endl;</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> exit(1);</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> }</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> }</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="keywordtype">double</span> rmse=0;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="comment">// for(irow=0;irow<inputReader.nrOfRow()&&!isDifferent;++irow){</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">for</span>(irow=0;irow<inputReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="comment">//read line in lineInput, lineReference and lineMask</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> inputReader.readData(lineInput,GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">double</span> x,y;<span class="comment">//geo coordinates</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordtype">double</span> ireference,jreference;<span class="comment">//image coordinates in reference image</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordtype">double</span> imask,jmask;<span class="comment">//image coordinates in mask image</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">for</span>(icol=0;icol<inputReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="comment">//find col in reference</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> inputReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> referenceReaderGdal.geo2image(x,y,ireference,jreference);</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">if</span>(ireference<0||ireference>=referenceReaderGdal.nrOfCol()){</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span>(rmse_opt[0]||regression_opt[0])</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> cerr << ireference << <span class="stringliteral">" out of reference range!"</span> << endl;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> cerr << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << icol << <span class="stringliteral">" "</span> << irow << endl;</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> cerr << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << ireference << <span class="stringliteral">" "</span> << jreference << endl;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> exit(1);</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> }</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> }</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">if</span>(jreference!=oldreferencerow){</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">if</span>(jreference<0||jreference>=referenceReaderGdal.nrOfRow()){</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">if</span>(rmse_opt[0]||regression_opt[0])</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> cerr << jreference << <span class="stringliteral">" out of reference range!"</span> << endl;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> cerr << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << icol << <span class="stringliteral">" "</span> << irow << endl;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> cerr << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << ireference << <span class="stringliteral">" "</span> << jreference << endl;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> exit(1);</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> }</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> }</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> referenceReaderGdal.readData(lineReference,GDT_Float64,static_cast<int>(jreference),band_opt[1]);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> oldreferencerow=jreference;</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> }</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> }</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordtype">bool</span> flagged=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;iflag<nodata_opt.size();++iflag){</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">if</span>((lineInput[icol]==nodata_opt[iflag])||(lineReference[ireference]==nodata_opt[iflag])){</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> lineOutput[icol]=nodata_opt[iflag];</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> flagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> }</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> }</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> maskReader.geo2image(x,y,imask,jmask);</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">if</span>(jmask>=0&&jmask<maskReader.nrOfRow()){</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span>(jmask!=oldmaskrow)</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> maskReader.readData(lineMask,GDT_Float64,jmask);</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalue=0;ivalue<msknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">if</span>(lineMask[icol]==msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> flagged=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> }</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> }</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> }</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(!flagged){</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">if</span>(rmse_opt[0]){<span class="comment">//divide by image size to prevent overflow. At the end we need to take care about flagged pixels by normalizing...</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> rmse+=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(lineInput[icol]-lineReference[ireference])*(lineInput[icol]-lineReference[ireference])/inputReader.nrOfCol()/inputReader.nrOfRow();</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(regression_opt[0]){</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> bufferInput.push_back(lineInput[icol]);</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> bufferReference.push_back(lineReference[ireference]);</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> ++ntotalValidation;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordtype">int</span> rc=distance(referenceRange.begin(),find(referenceRange.begin(),referenceRange.end(),lineReference[ireference]));</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordtype">int</span> ic=distance(inputRange.begin(),find(inputRange.begin(),inputRange.end(),lineInput[icol]));</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> assert(rc<nclass);</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> assert(ic<nclass);</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> ++nvalidation[rc];</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> ++resultClass[rc][ic];</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> cout << <span class="stringliteral">"increment: "</span> << rc << <span class="stringliteral">" "</span> << referenceRange[rc] << <span class="stringliteral">" "</span> << ic << <span class="stringliteral">" "</span> << inputRange[ic] << endl;</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> cm.incrementResult(cm.getClass(rc),cm.getClass(ic),1);</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> }</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">if</span>(lineInput[icol]==lineReference[ireference]){<span class="comment">//correct</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> lineOutput[icol]=valueE_opt[0];</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span>(valueE_opt[0]==nodata_opt[0])</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> lineOutput[icol]=lineInput[icol];</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> }</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> }</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">else</span>{<span class="comment">//error</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">if</span>(output_opt.empty()&&!confusion_opt[0]&&!rmse_opt[0]&&!regression_opt[0]){</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> isDifferent=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span>(lineInput[icol]>lineReference[ireference])</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> lineOutput[icol]=valueO_opt[0];<span class="comment">//omission error</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> lineOutput[icol]=valueC_opt[0];<span class="comment">//commission error</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> }</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> }</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> ++nflagged;</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">if</span>(nodata_opt.size())</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> lineOutput[icol]=nodata_opt[0];</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">else</span> <span class="comment">//should never occur?</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> lineOutput[icol]=0;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> } </div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> gdalWriter.writeData(lineOutput,GDT_Float64,irow);</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> }</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> cerr << <span class="stringliteral">"lineOutput.size(): "</span> << lineOutput.size() << endl;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> cerr << <span class="stringliteral">"gdalWriter.nrOfCol(): "</span> << gdalWriter.nrOfCol() << endl;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> exit(1);</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> }</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> }</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(isDifferent&&!confusion_opt[0]&&!rmse_opt[0]&&!regression_opt[0]){<span class="comment">//we can break off here, files are different...</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> pfnProgress(1.0,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/inputReader.nrOfRow();</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> gdalWriter.close();</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!confusion_opt[0]){</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">if</span>(rmse_opt[0]){</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordtype">double</span> normalization=1.0*inputReader.nrOfCol()*inputReader.nrOfRow()/(inputReader.nrOfCol()*inputReader.nrOfRow()-nflagged);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> cout << <span class="stringliteral">"normalization: "</span> << normalization << endl;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> cout << <span class="stringliteral">"rmse before sqrt and normalization: "</span> << rmse << endl;</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> cout << <span class="stringliteral">"--rmse "</span> << sqrt(rmse/normalization) << endl;</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> }</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(regression_opt[0]){</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="keywordtype">double</span> err=0;</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordtype">double</span> c0=0;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="keywordtype">double</span> c1=1;</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">if</span>(bufferInput.size()&&bufferReference.size()){</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> err=stat.linear_regression_err(bufferInput,bufferReference,c0,c1);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> cout << <span class="stringliteral">"bufferInput.size(): "</span> << bufferInput.size() << endl;</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> cout << <span class="stringliteral">"bufferReference.size(): "</span> << bufferReference.size() << endl;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordtype">double</span> theMin=0;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordtype">double</span> theMax=0;</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> stat.minmax(bufferInput,bufferInput.begin(),bufferInput.end(),theMin,theMax);</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> cout << <span class="stringliteral">"min, max input: "</span> << theMin << <span class="stringliteral">", "</span> << theMax << endl;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> theMin=0;</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> theMax=0;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> stat.minmax(bufferReference,bufferReference.begin(),bufferReference.end(),theMin,theMax);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> cout << <span class="stringliteral">"min, max reference: "</span> << theMin << <span class="stringliteral">", "</span> << theMax << endl;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> }</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> cout << <span class="stringliteral">"--c0 "</span> << c0 << <span class="stringliteral">"--c1 "</span> << c1 << <span class="stringliteral">" --rmse: "</span> << err << endl;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(isDifferent)</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> cout << input_opt[0] << <span class="stringliteral">" and "</span> << reference_opt[0] << <span class="stringliteral">" are different"</span> << endl;</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> cout << input_opt[0] << <span class="stringliteral">" and "</span> << reference_opt[0] << <span class="stringliteral">" are identical"</span> << endl;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> }</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> referenceReaderGdal.close();</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> inputReader.close();</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> maskReader.close();</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }<span class="comment">//raster dataset</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">if</span>(confusion_opt[0]){</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> cm.setFormat(cmformat_opt[0]);</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> cm.reportSE95(se95_opt[0]);</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> ofstream outputFile;</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="keywordflow">if</span>(cmoutput_opt.size()){</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> outputFile.open(cmoutput_opt[0].c_str(),ios::out);</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> outputFile << cm << endl;</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> }</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> cout << cm << endl;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment">// cout << "class #samples userAcc prodAcc" << endl;</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment">// double se95_ua=0;</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">// double se95_pa=0;</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment">// double se95_oa=0;</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// double dua=0;</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// double dpa=0;</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment">// double doa=0;</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">// for(int iclass=0;iclass<cm.nClasses();++iclass){</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// dua=cm.ua_pct(classNames[iclass],&se95_ua);</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment">// dpa=cm.pa_pct(classNames[iclass],&se95_pa);</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment">// cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment">// doa=cm.oa(&se95_oa);</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment">// cout << "Kappa: " << cm.kappa() << endl;</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">// cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << endl;</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> }</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff__accuracy_8py_source.html b/doc/html/pkdiff__accuracy_8py_source.html
new file mode 100644
index 0000000..3c06236
--- /dev/null
+++ b/doc/html/pkdiff__accuracy_8py_source.html
@@ -0,0 +1,277 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkdiff_accuracy.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdiff_accuracy.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkdiff_accuracy.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> <a class="code" href="namespacePyQt4_1_1QtCore.html">PyQt4.QtCore</a> <span class="keyword">import</span> QVariant</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> <a class="code" href="namespaceqgis_1_1core.html">qgis.core</a> <span class="keyword">import</span> QgsField</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterVector</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputVector</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputFile</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">#from processing.core.outputs import OutputTable</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> FORMATS = [</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="stringliteral">'ESRI Shapefile'</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="stringliteral">'GeoJSON'</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">'GeoRSS'</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">'SQLite'</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">'GMT'</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">'MapInfo File'</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">'INTERLIS 1'</span>,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">'INTERLIS 2'</span>,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">'GML'</span>,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">'Geoconcept'</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">'DXF'</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">'DGN'</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">'CSV'</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">'BNA'</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">'S57'</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">'KML'</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">'GPX'</span>,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">'PGDump'</span>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">'GPSTrackMaker'</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">'ODS'</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">'XLSX'</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral">'PDF'</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> ]</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> EXTS = [</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'.shp'</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">'.geojson'</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">'.xml'</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">'.sqlite'</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">'.gmt'</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">'.tab'</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral">'.gml'</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral">'.txt'</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral">'.dxf'</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">'.dgn'</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'.csv'</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">'.bna'</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">'.000'</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">'.kml'</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="stringliteral">'.gpx'</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="stringliteral">'.pgdump'</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="stringliteral">'.gtm'</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="stringliteral">'.ods'</span>,</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="stringliteral">'.xlsx'</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="stringliteral">'.pdf'</span>,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ]</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html"> 93</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">pkdiff_accuracy</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> REFERENCE = <span class="stringliteral">"REFERENCE"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> ITERATE = <span class="stringliteral">"ITERATE"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> LABELREF = <span class="stringliteral">"LABELREF"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"># TABLE = 'TABLE'</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> CMOUTPUT = <span class="stringliteral">"CMOUTPUT"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> CMFORMAT_OPTIONS = [<span class="stringliteral">"ascii"</span>, <span class="stringliteral">"latex"</span>]</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> CMFORMAT = <span class="stringliteral">"CMFORMAT"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> FORMAT = <span class="stringliteral">"FORMAT"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> LABELCLASS = <span class="stringliteral">"LABELCLASS"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkdiff"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#aa1a0571329dbfd38e21385392bab8de1">name</a> = <span class="stringliteral">"Accuracy assessment with ground reference"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a724b6dc67c93a4392de92dcfca91f701">group</a> = <span class="stringliteral">"[pktools] supervised classification"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a6cabc221036f66d975847866eaf14dd9">INPUT</a>, <span class="stringliteral">'Classification result (raster map)'</span>))</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> self.addParameter(ParameterVector(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#afdaa56e3a00e8ad32fffd8600b998b92">REFERENCE</a>, <span class="stringliteral">'Labeled reference vector data set'</span>))</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2a294e32e185d1f58bbde4ae40f62c55">ITERATE</a>, <span class="stringliteral">"Iterate over all layers"</span>,<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a99f5e02f16130f80143086252a38ee93">LABELREF</a>, <span class="stringliteral">"Attribute name of the reference label"</span>,<span class="stringliteral">"label"</span>))</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a02de7992fb58aea0f628f8f3c1c937ac">NODATA</a>, <span class="stringliteral">"No data value(s) in input or reference dataset to ignore (e.g., 0;255)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> self.addOutput(OutputFile(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a792f4cf29ee2f6034149c0233b32f4ff">CMOUTPUT</a>, self.tr(<span class="stringliteral">"Confusion matrix output file "</span>)))</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a21c954c78e110bb1c93de64075afe182">CMFORMAT</a>,<span class="stringliteral">"Format for confusion matrix output"</span>,self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2ed757ec7259c4b56bee1acc8bbe1a61">CMFORMAT_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"># self.addOutput(OutputTable(self.TABLE, self.tr('Confusion matrix table')))</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> self.addOutput(OutputVector(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a22d37343b09f74019a836f1489d24c02">OUTPUT</a>, <span class="stringliteral">'Assessment output vector data set'</span>))</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#ab922ac43189488cb53e46bccd0d02b6a">FORMAT</a>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="stringliteral">'Assessment output vector Format'</span>, FORMATS))</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a7580c2442f384fcc956e14d936a3a305">LABELCLASS</a>, <span class="stringliteral">"Attribute name of classified (map) label"</span>,<span class="stringliteral">"class"</span>))</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a83684b7d1751c3e507df1b2a61c06e7d">EXTRA</a>,</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">''</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a176e2f67f3be853c9197d99f4cd16a1c">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> commands = [cliPath]</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">#outputtable = self.getOutputFromName(self.TABLE)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a6cabc221036f66d975847866eaf14dd9">INPUT</a>)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> reference=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#afdaa56e3a00e8ad32fffd8600b998b92">REFERENCE</a>)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2a294e32e185d1f58bbde4ae40f62c55">ITERATE</a>):</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> str(reference).find(<span class="stringliteral">'|'</span>)>0:</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> referencename=str(reference)[:str(reference).find(<span class="stringliteral">'|'</span>)]</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> referencename=str(reference)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> referencename=str(reference).replace(<span class="stringliteral">"|layername"</span>,<span class="stringliteral">" -ln"</span>)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> commands.append(<span class="stringliteral">'-ref'</span>)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> commands.append(referencename)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> commands.append(<span class="stringliteral">'-lr'</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> commands.append(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a99f5e02f16130f80143086252a38ee93">LABELREF</a>))</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a02de7992fb58aea0f628f8f3c1c937ac">NODATA</a>)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> nodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> nodataValues = nodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> nodataValue <span class="keywordflow">in</span> nodataValues:</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> commands.append(<span class="stringliteral">"-cm"</span>)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> commands.append(<span class="stringliteral">"-cmf"</span>)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> commands.append(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2ed757ec7259c4b56bee1acc8bbe1a61">CMFORMAT_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a21c954c78e110bb1c93de64075afe182">CMFORMAT</a>)])</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> commands.append(<span class="stringliteral">"-cmo"</span>)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> commands.append(self.getOutputValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a792f4cf29ee2f6034149c0233b32f4ff">CMOUTPUT</a>))</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> output = self.getOutputFromName(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a22d37343b09f74019a836f1489d24c02">OUTPUT</a>)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> outFile = output.value</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> formatIdx = self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#ab922ac43189488cb53e46bccd0d02b6a">FORMAT</a>)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> outFormat = <span class="stringliteral">'"'</span> + FORMATS[formatIdx] + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> commands.append(<span class="stringliteral">'-f'</span>)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> commands.append(outFormat)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> ext = EXTS[formatIdx]</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> <span class="keywordflow">not</span> outFile.endswith(ext):</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> outFile += ext</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> output.value = outFile</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> commands.append(<span class="stringliteral">'-o'</span>)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> commands.append(<span class="stringliteral">'"'</span> + outFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> commands.append(<span class="stringliteral">'-lc'</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> commands.append(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a7580c2442f384fcc956e14d936a3a305">LABELCLASS</a>))</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a83684b7d1751c3e507df1b2a61c06e7d">EXTRA</a>))</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> commands.append(extra)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a6cabc221036f66d975847866eaf14dd9"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a6cabc221036f66d975847866eaf14dd9">qgis.pkdiff_accuracy.pkdiff_accuracy.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00095">pkdiff_accuracy.py:95</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a99f5e02f16130f80143086252a38ee93"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a99f5e02f16130f80143086252a38ee93">qgis.pkdiff_accuracy.pkdiff_accuracy.LABELREF</a></div><div class="ttdeci">string LABELREF</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00098">pkdiff_accuracy.py:98</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a02de7992fb58aea0f628f8f3c1c937ac"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a02de7992fb58aea0f628f8f3c1c937ac">qgis.pkdiff_accuracy.pkdiff_accuracy.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00099">pkdiff_accuracy.py:99</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a792f4cf29ee2f6034149c0233b32f4ff"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a792f4cf29ee2f6034149c0233b32f4ff">qgis.pkdiff_accuracy.pkdiff_accuracy.CMOUTPUT</a></div><div class="ttdeci">string CMOUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00102">pkdiff_accuracy.py:102</a></div></div>
+<div class="ttc" id="namespacePyQt4_1_1QtCore_html"><div class="ttname"><a href="namespacePyQt4_1_1QtCore.html">QtCore</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a176e2f67f3be853c9197d99f4cd16a1c"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a176e2f67f3be853c9197d99f4cd16a1c">qgis.pkdiff_accuracy.pkdiff_accuracy.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00110">pkdiff_accuracy.py:110</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a7580c2442f384fcc956e14d936a3a305"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a7580c2442f384fcc956e14d936a3a305">qgis.pkdiff_accuracy.pkdiff_accuracy.LABELCLASS</a></div><div class="ttdeci">string LABELCLASS</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00107">pkdiff_accuracy.py:107</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html">qgis.pkdiff_accuracy.pkdiff_accuracy</a></div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00093">pkdiff_accuracy.py:93</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_afdaa56e3a00e8ad32fffd8600b998b92"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#afdaa56e3a00e8ad32fffd8600b998b92">qgis.pkdiff_accuracy.pkdiff_accuracy.REFERENCE</a></div><div class="ttdeci">string REFERENCE</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00096">pkdiff_accuracy.py:96</a></div></div>
+<div class="ttc" id="namespaceqgis_1_1core_html"><div class="ttname"><a href="namespaceqgis_1_1core.html">core</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a21c954c78e110bb1c93de64075afe182"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a21c954c78e110bb1c93de64075afe182">qgis.pkdiff_accuracy.pkdiff_accuracy.CMFORMAT</a></div><div class="ttdeci">string CMFORMAT</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00104">pkdiff_accuracy.py:104</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_aa1a0571329dbfd38e21385392bab8de1"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#aa1a0571329dbfd38e21385392bab8de1">qgis.pkdiff_accuracy.pkdiff_accuracy.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00114">pkdiff_accuracy.py:114</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a724b6dc67c93a4392de92dcfca91f701"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a724b6dc67c93a4392de92dcfca91f701">qgis.pkdiff_accuracy.pkdiff_accuracy.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00115">pkdiff_accuracy.py:115</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a83684b7d1751c3e507df1b2a61c06e7d"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a83684b7d1751c3e507df1b2a61c06e7d">qgis.pkdiff_accuracy.pkdiff_accuracy.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00108">pkdiff_accuracy.py:108</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_ab922ac43189488cb53e46bccd0d02b6a"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#ab922ac43189488cb53e46bccd0d02b6a">qgis.pkdiff_accuracy.pkdiff_accuracy.FORMAT</a></div><div class="ttdeci">string FORMAT</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00106">pkdiff_accuracy.py:106</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a22d37343b09f74019a836f1489d24c02"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a22d37343b09f74019a836f1489d24c02">qgis.pkdiff_accuracy.pkdiff_accuracy.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00101">pkdiff_accuracy.py:101</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a2a294e32e185d1f58bbde4ae40f62c55"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2a294e32e185d1f58bbde4ae40f62c55">qgis.pkdiff_accuracy.pkdiff_accuracy.ITERATE</a></div><div class="ttdeci">string ITERATE</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00097">pkdiff_accuracy.py:97</a></div></div>
+<div class="ttc" id="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy_html_a2ed757ec7259c4b56bee1acc8bbe1a61"><div class="ttname"><a href="classqgis_1_1pkdiff__accuracy_1_1pkdiff__accuracy.html#a2ed757ec7259c4b56bee1acc8bbe1a61">qgis.pkdiff_accuracy.pkdiff_accuracy.CMFORMAT_OPTIONS</a></div><div class="ttdeci">list CMFORMAT_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkdiff__accuracy_8py_source.html#l00103">pkdiff_accuracy.py:103</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff__gui_2main_8cpp_source.html b/doc/html/pkdiff__gui_2main_8cpp_source.html
new file mode 100644
index 0000000..314d21c
--- /dev/null
+++ b/doc/html/pkdiff__gui_2main_8cpp_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkdiff_gui/main.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html">pkdiff_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">main.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">main.cpp: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QApplication></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> QApplication a(argc, argv);</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <a class="code" href="classMainWindow.html">MainWindow</a> w;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> w.show();</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span> a.exec();</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff__gui_2mainwindow_8cpp_source.html b/doc/html/pkdiff__gui_2mainwindow_8cpp_source.html
new file mode 100644
index 0000000..5cbc3c7
--- /dev/null
+++ b/doc/html/pkdiff__gui_2mainwindow_8cpp_source.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkdiff_gui/mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html">pkdiff_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.cpp: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "ui_mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QFileDialog></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QStandardItemModel></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QMessageBox></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> MainWindow::MainWindow(QWidget *parent) :</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> QMainWindow(parent),</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> ui(new Ui::<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> ui->setupUi(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> QStringList formatlist;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> formatlist << <span class="stringliteral">"SQLite"</span> << <span class="stringliteral">"ESRI Shapefile"</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> ui->f->addItems(formatlist);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> setDefaults();</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> MainWindow::~MainWindow()</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">delete</span> ui;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> MainWindow::setDefaults()</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">//tab input/output</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> ui->input->clear();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> ui->reference->clear();</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> ui->msknodata->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> ui->output->clear();</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> ui->confusion->setChecked(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">void</span> MainWindow::on_actionReference_triggered()</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QString qsreference= QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Reference"</span>);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> ui->reference->setText(qsreference);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> MainWindow::on_actionMask_triggered()</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> QString qsmask = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Mask"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> ui->mask->setText(qsmask);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> MainWindow::on_actionOutput_triggered()</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> QString qsoutput = QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Output image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> ui->output->setText(qsoutput);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> MainWindow::on_actionInput_triggered()</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> QString qsinput = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Input"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> ui->input->setText(qsinput);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_input_clicked()</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_mask_clicked()</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> on_actionMask_triggered();</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_output_clicked()</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_reference_clicked()</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> on_actionReference_triggered();</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> MainWindow::setClassTable(<span class="keyword">const</span> QStringList &labels)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> QStandardItemModel *model = <span class="keyword">new</span> QStandardItemModel(labels.size(),2,<span class="keyword">this</span>); <span class="comment">//nlabel rows and 2 columns</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> model->setHorizontalHeaderItem(0, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"label name"</span>)));</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> model->setHorizontalHeaderItem(1, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"class nr"</span>)));</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilabel=0;ilabel<labels.size();++ilabel){</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QStandardItem *firstCol = <span class="keyword">new</span> QStandardItem(QString(labels[ilabel]));</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> model->setItem(ilabel,0,firstCol);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QStandardItem *secondCol = <span class="keyword">new</span> QStandardItem(QString::number(ilabel+1));</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> model->setItem(ilabel,1,secondCol);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> ui->tableView_labels->setModel(model);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_run_clicked()</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> ui->commandLineEdit->clear();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> ui->consoleEdit->clear();</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> QString program = <span class="stringliteral">"pkdiff"</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span>(ui->input->text().isEmpty()){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> MainWindow::on_actionInput_triggered();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(ui->input->text().isEmpty()){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> QString qsError=<span class="stringliteral">"No input raster dataset selected"</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(ui->reference->text().isEmpty()){</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> MainWindow::on_actionReference_triggered();</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span>(ui->reference->text().isEmpty()){</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> QString qsError=<span class="stringliteral">"No reference vector file selected"</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> QString qsOption;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> qsOption+=<span class="stringliteral">" --class "</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,0)).toString();</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> qsOption+=<span class="stringliteral">" --reclass "</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,1)).toString();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> program+=qsOption;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> QList<QComboBox*> qcomboBoxList = this->findChildren<QComboBox *>();</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(QList<QComboBox*>::ConstIterator qcbit=qcomboBoxList.begin();qcbit!=qcomboBoxList.end();++qcbit){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> QString qsOption;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> qsOption+=(*qcbit)->objectName();</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> program+=qsOption;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> program+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> program+=(*qcbit)->currentText();</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span>(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(!((*qlbit)->text().isEmpty())){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> QString qsOption;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> qsOption+=(*qlbit)->objectName();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> qsOption+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> qsOption+=(*qlbit)->text();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> program+=qsOption;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(ui->confusion->isChecked())</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> program+=<span class="stringliteral">" --confusion"</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> ui->commandLineEdit->setText(program);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// QProcess *myProcess = new QProcess(parent);</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> myProcess->start(program);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> myProcess->setProcessChannelMode(QProcess::MergedChannels);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> QString p_stderr = myProcess->readAllStandardError();</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(!p_stderr.isEmpty()){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> msgBox.setText(p_stderr);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> msgBox.exec();</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> QString p_stdout = myProcess->readAll();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> ui->consoleEdit->insertPlainText(p_stdout);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">delete</span> myProcess;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">catch</span>(QString qsError){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> msgBox.setText(qsError);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> msgBox.exec();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_restore_clicked()</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> setDefaults();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">void</span> MainWindow::on_commandLinkButtonPrepareTable_clicked()</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">int</span> nclass=ui->nclass->text().toInt();</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> QStringList labels;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=1;iclass<=nclass;++iclass){</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> QString lstring=<span class="stringliteral">"label"</span>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> lstring+=QString::number(iclass);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> labels << lstring;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> setClassTable(labels);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdiff__gui_2mainwindow_8h_source.html b/doc/html/pkdiff__gui_2mainwindow_8h_source.html
new file mode 100644
index 0000000..789c256
--- /dev/null
+++ b/doc/html/pkdiff__gui_2mainwindow_8h_source.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkdiff_gui/mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b6b6de371025fb67c6b8623f3d3cd2ce.html">pkdiff_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.h: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define MAINWINDOW_H</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> Q_OBJECT</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">explicit</span> <a class="code" href="classMainWindow.html">MainWindow</a>(QWidget *parent = 0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ~<a class="code" href="classMainWindow.html">MainWindow</a>();</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">private</span> slots:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> on_actionReference_triggered();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> on_actionMask_triggered();</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> on_toolButton_input_clicked();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> on_toolButton_mask_clicked();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> on_toolButton_output_clicked();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> on_toolButton_reference_clicked();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> on_pushButton_run_clicked();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> on_pushButton_restore_clicked();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> on_commandLinkButtonPrepareTable_clicked();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> setClassTable(<span class="keyword">const</span> QStringList &labels);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> setDefaults();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <a class="code" href="classUi_1_1MainWindow.html">Ui::MainWindow</a> *ui;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> };</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#endif // MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdsm2shadow.html b/doc/html/pkdsm2shadow.html
new file mode 100644
index 0000000..225c8ad
--- /dev/null
+++ b/doc/html/pkdsm2shadow.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkdsm2shadow</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdsm2shadow </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to calculate sun shadow based on digital surface model and sun angles </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkdsm2shadow -i input.txt -o output [-sza angle] [-saa angle] </code></p>
+<p><code></code></p>
+<p><code> Options: [-f value] [-ot type] [-of GDALformat] [-ct filename] [-co option]*</code></p>
+<p><code> Advanced options: [–scale value] [–offset value] </code></p>
+<h1><a class="anchor" id="pkdsm2shadow_description"></a>
+Description</h1>
+<p>Utility to create a binary shadow mask from a digital surface model, based on Sun zenith (-sza) and azimuth angles (-saa).</p>
+<h1><a class="anchor" id="pkdsm2shadow_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>sza </td><td>sza </td><td>double </td><td></td><td>Sun zenith angle. </td></tr>
+<tr>
+<td>saa </td><td>saa </td><td>double </td><td></td><td>Sun azimuth angle (N=0 E=90 S=180 W=270). </td></tr>
+<tr>
+<td>f </td><td>flag </td><td>int </td><td>0 </td><td>Flag to put in image if pixel shadow </td></tr>
+<tr>
+<td>s </td><td>scale </td><td>double </td><td></td><td>scale used for input dsm: height=scale*input+offset </td></tr>
+<tr>
+<td>off </td><td>offset </td><td>double </td><td></td><td>offset used for input dsm: height=scale*input+offset </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+</table>
+Usage: pkdsm2shadow -i input.txt -o output [-sza angle] [-saa angle]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkdsm2shadow can be found <a class="el" href="md_examples_pkdsm2shadow.html#examples_pkdsm2shadow">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdsm2shadow_8cc_source.html b/doc/html/pkdsm2shadow_8cc_source.html
new file mode 100644
index 0000000..bdc7f24
--- /dev/null
+++ b/doc/html/pkdsm2shadow_8cc_source.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkdsm2shadow.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdsm2shadow.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkdsm2shadow.cc: program to calculate sun shadow based on digital surface model and sun angles</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/Filter2d.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">/*------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> Main procedure</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> ----------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> sza_opt(<span class="stringliteral">"sza"</span>, <span class="stringliteral">"sza"</span>, <span class="stringliteral">"Sun zenith angle."</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> saa_opt(<span class="stringliteral">"saa"</span>, <span class="stringliteral">"saa"</span>, <span class="stringliteral">"Sun azimuth angle (N=0 E=90 S=180 W=270)."</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> flag_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"flag"</span>, <span class="stringliteral">"Flag to put in image if pixel shadow"</span>, 0);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="string [...]
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale used for input dsm: height=scale*input+offset"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"off"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset used for input dsm: height=scale*input+offset"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> sza_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> saa_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> flag_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> exit(0);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> cout << endl;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> cout << <span class="stringliteral">"Usage: pkdsm2shadow -i input.txt -o output [-sza angle] [-saa angle]"</span> << endl;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> cout << endl;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> output;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> input.open(input_opt[0]);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> input.setScale(scale_opt[0]);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> input.setOffset(offset_opt[0]);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// output.open(output_opt[0],input);</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> theType=input.getDataType();</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> std::cout << std::endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">string</span> imageType=input.getImageType();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(oformat_opt.size())</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> theInterleave+=input.getInterleave();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> output.open(output_opt[0],input.nrOfCol(),input.nrOfRow(),input.nrOfBand(),theType,imageType,option_opt);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> exit(4);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> output.setProjection(input.getProjection());</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> input.getGeoTransform(gt);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> output.setGeoTransform(gt);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(input.getColorTable()!=NULL)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> output.setColorTable(input.getColorTable());</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a> filter2d;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> std::cout<< <span class="stringliteral">"class values: "</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> output.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> filter2d.shadowDsm(input,output,sza_opt[0],saa_opt[0],input.getDeltaX(),flag_opt[0]);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> input.close();</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> output.close();</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classfilter2d_1_1Filter2d_html"><div class="ttname"><a href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter2d_8h_source.html#l00065">Filter2d.h:65</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdumpimg.html b/doc/html/pkdumpimg.html
new file mode 100644
index 0000000..2b2fafd
--- /dev/null
+++ b/doc/html/pkdumpimg.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkdumpimg</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdumpimg </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to dump image content to ascii or std out </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkdumpimg -i input.txt [-o output] </code></p>
+<p><code></code></p>
+<p><code> Options: [-of matrix | line] [-b band] [-e vector | -ulx value -uly value -lrx value -lry value]</code></p>
+<p><code> Advanced options: [-dx value -dy value] [-r resampling] -srcnodata value -dstnodata value</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkdumpimg_description"></a>
+Description</h1>
+<p>The utility pkdumpimg dumps the content of a raster dataset to (standard) output (screen or filename). The default is to dump the output in matrix format. Use -of line to dump each pixel value on a separate line, preceded by its position (x and y value). You can specify a bounding box to dump with either the extent of an OGR vector dataset or via the options -ulx -uly -lrx and -lry.</p>
+<h1><a class="anchor" id="pkdumpimg_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output ascii file (Default is empty: use stdout </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td>matrix </td><td>Output format (matrix form or list (x,y,z) form. Default is matrix form </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td></td><td>band index to crop </td></tr>
+<tr>
+<td>e </td><td>extent </td><td>std::string </td><td></td><td>get boundary from extent from polygons in vector file </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td>0 </td><td>Upper left x value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td>0 </td><td>Upper left y value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td>0 </td><td>Lower left x value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td>0 </td><td>Lower left y value bounding box (in geocoordinates if georef is true) </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td>0 </td><td>Output resolution in x (in meter) (0.0: keep original resolution) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td>0 </td><td>Output resolution in y (in meter) (0.0: keep original resolution) </td></tr>
+<tr>
+<td>r </td><td>resampling-method </td><td>std::string </td><td>near </td><td>Resampling method (near: nearest neighbour, bilinear: bi-linear interpolation). </td></tr>
+<tr>
+<td>srcnodata </td><td>srcnodata </td><td>double </td><td></td><td>set no data value(s) for input image </td></tr>
+<tr>
+<td>dstnodata </td><td>dstnodata </td><td>short </td><td>0 </td><td>nodata value for output if out of bounds. </td></tr>
+</table>
+Usage: pkdumpimg -i input.txt [-o output]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkdumpimg can be found <a class="el" href="md_examples_pkdumpimg.html#examples_pkdumpimg">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdumpimg_8cc_source.html b/doc/html/pkdumpimg_8cc_source.html
new file mode 100644
index 0000000..b35b25c
--- /dev/null
+++ b/doc/html/pkdumpimg_8cc_source.html
@@ -0,0 +1,421 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkdumpimg.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdumpimg.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkdumpimg.cc: program to dump image content to ascii or std out</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">// #include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>,<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output ascii file (Default is empty: use stdout"</span>, <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output format (matrix form or list (x,y,z) form. Default is matrix form"</span>, <span class="stringliteral">"matrix"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index to crop"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> extent_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"extent"</span>, <span class="stringliteral">"get boundary from extent from polygons in vector file"</span>, <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box (in geocoordinates if georef is true)"</span>,0.0);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box (in geocoordinates if georef is true)"</span>,0.0);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower left x value bounding box (in geocoordinates if georef is true)"</span>,0.0);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower left y value bounding box (in geocoordinates if georef is true)"</span>,0.0);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Output resolution in x (in meter) (0.0: keep original resolution)"</span>,0.0);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Output resolution in y (in meter) (0.0: keep original resolution)"</span>,0.0);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> resample_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"resampling-method"</span>, <span class="stringliteral">"Resampling method (near: nearest neighbour, bilinear: bi-linear interpolation)."</span>, <span class="stringliteral">"near"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> dstnodata_opt(<span class="stringliteral">"dstnodata"</span>, <span class="stringliteral">"dstnodata"</span>, <span class="stringliteral">"nodata value for output if out of bounds."</span>, 0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> srcnodata_opt(<span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"set no data value(s) for input image"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose (Default: 0)"</span>, 0,2);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> dx_opt.setHide(1);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> dy_opt.setHide(1);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> resample_opt.setHide(1);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> srcnodata_opt.setHide(1);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> dstnodata_opt.setHide(1);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> extent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> resample_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> srcnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> dstnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> exit(0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> cout << endl;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> cout << <span class="stringliteral">"Usage: pkdumpimg -i input.txt [-o output]"</span> << endl;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> cout << endl;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> ofstream outputStream;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> outputStream.open(output_opt[0].c_str());</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> RESAMPLE theResample;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"near"</span>){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> theResample=NEAR;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> cout << <span class="stringliteral">"resampling: nearest neighbour"</span> << endl;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(resample_opt[0]==<span class="stringliteral">"bilinear"</span>){</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> theResample=BILINEAR;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> cout << <span class="stringliteral">"resampling: bilinear interpolation"</span> << endl;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> std::cout << <span class="stringliteral">"Error: resampling method "</span> << resample_opt[0] << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> exit(1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// ImgWriterGdal imgWriter;</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> GDALDataType theType;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> exit(0);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader(input_opt[0]);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<srcnodata_opt.size();++inodata)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> imgReader.pushNoDataValue(srcnodata_opt[inodata]);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// ImgWriterGdal virtualWriter;//only for coordinate conversion (no output file defined)</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">int</span> nband=imgReader.nrOfBand();</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">//get number of lines</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">int</span> nrow=imgReader.nrOfRow();</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">int</span> ncol=imgReader.nrOfCol();</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">int</span> ncropcol=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">int</span> ncroprow=0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">double</span> dx=dx_opt[0];</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">double</span> dy=dy_opt[0];</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(!dx||!dy){</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> dx=imgReader.getDeltaX();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> dy=imgReader.getDeltaY();</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">//bounding box of cropped image</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">double</span> cropulx=ulx_opt[0];</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">double</span> cropuly=uly_opt[0];</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordtype">double</span> croplrx=lrx_opt[0];</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">double</span> croplry=lry_opt[0];</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">//get bounding box from extentReader if defined</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> extentReader;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(extent_opt[0]!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iextent=0;iextent<extent_opt.size();++iextent){</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> extentReader.open(extent_opt[iextent]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(!(extentReader.getExtent(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> cerr << <span class="stringliteral">"Error: could not get extent from "</span> << extent_opt[0] << endl;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> exit(1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(!iextent){</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> cropulx=ulx_opt[0];</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> cropuly=uly_opt[0];</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> croplry=lry_opt[0];</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> croplrx=lrx_opt[0];</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(ulx_opt[0]<cropulx)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> cropulx=ulx_opt[0];</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(uly_opt[0]>cropuly)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> cropuly=uly_opt[0];</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(lry_opt[0]<croplry)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> croplry=lry_opt[0];</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(lrx_opt[0]>croplrx)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> croplrx=lrx_opt[0];</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> extentReader.close();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;<span class="comment">//image coordinates</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">double</span> magicX=1,magicY=1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span>(ulx_opt[0]>=lrx_opt[0]){<span class="comment">//default bounding box: no cropping</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> uli=0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> lri=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> ulj=0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> lrj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> ncropcol=imgReader.nrOfCol();</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> ncroprow=imgReader.nrOfRow();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> imgReader.getBoundingBox(cropulx,cropuly,croplrx,croplry);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx)));</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy)));</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx)));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy)));</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> uli=floor(uli);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> ulj=floor(ulj);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> lri=floor(lri);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> lrj=floor(lrj);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">double</span> startCol=uli;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordtype">double</span> endCol=lri;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">double</span> dcropcol=0;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">double</span> dcroprow=0;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">double</span> deltaX=imgReader.getDeltaX();</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">double</span> deltaY=imgReader.getDeltaY();</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> dcropcol=(lri-uli+1)/(dx/deltaX);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> dcroprow=(lrj-ulj+1)/(dy/deltaY);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> cout << <span class="stringliteral">"cropulx: "</span> << cropulx << endl;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> cout << <span class="stringliteral">"cropuly: "</span> << cropuly << endl;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> cout << <span class="stringliteral">"croplrx: "</span> << croplrx << endl;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> cout << <span class="stringliteral">"croplry: "</span> << croplry << endl;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> cout << <span class="stringliteral">"ncropcol: "</span> << ncropcol << endl;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> cout << <span class="stringliteral">"ncroprow: "</span> << ncroprow << endl;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> cout << <span class="stringliteral">"cropulx+ncropcol*dx: "</span> << cropulx+ncropcol*dx << endl;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> cout << <span class="stringliteral">"cropuly-ncroprow*dy: "</span> << cropuly-ncroprow*dy << endl;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> cout << <span class="stringliteral">"selected upper left column in input image: "</span> << uli << endl;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> cout << <span class="stringliteral">"selected upper left row of input image: "</span> << ulj << endl;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> cout << <span class="stringliteral">"selected lower right column in input image: "</span> << lri << endl;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> cout << <span class="stringliteral">"selected lower right row in input image: "</span> << lrj << endl;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> imgReader.getGeoTransform(gt);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// imgWriter.setGeoTransform(gt);</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// imgWriter.setProjection(imgReader.getProjection());</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">double</span> readRow=0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordtype">double</span> readCol=0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">double</span> lowerCol=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">double</span> upperCol=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">int</span> readncol=endCol-startCol+1;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// vector<double> readBuffer(readncol);</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> vector<double> readBuffer(readncol+1);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// assert(imgWriter.isGeoRef());</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(band_opt.empty()){</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<imgReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> band_opt.push_back(iband);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband){</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> assert(band_opt[iband]>=0);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> assert(band_opt[iband]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<ncroprow;++irow){</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> std::cout << irow << std::endl;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">double</span> x=0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">double</span> y=0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">//convert irow to geo</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// imgWriter.image2geo(0,irow,x,y);</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> imgReader.image2geo(0,irow,x,y);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span>(readRow<0||readRow>=imgReader.nrOfRow()){</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> std::cout << <span class="stringliteral">"skipping row "</span> << readRow << std::endl;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// imgReader.readData(readBuffer,GDT_Float64,startCol,endCol,readRow,band_opt[0],theResample);</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(endCol<imgReader.nrOfCol()-1)</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> imgReader.readData(readBuffer,GDT_Float64,startCol,endCol+1,readRow,band_opt[iband],theResample);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> imgReader.readData(readBuffer,GDT_Float64,startCol,endCol,readRow,band_opt[iband],theResample);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ib=0;ib<ncropcol;++ib){</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// assert(imgWriter.image2geo(ib,irow,x,y));</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> assert(imgReader.image2geo(ib,irow,x,y));</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">//lookup corresponding row for irow in this file</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> imgReader.geo2image(x,y,readCol,readRow);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(readCol<0||readCol>=imgReader.nrOfCol()){</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">if</span>(oformat_opt[0]==<span class="stringliteral">"matrix"</span>){</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> std::cout << dstnodata_opt[0] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> outputStream << dstnodata_opt[0] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> std::cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << dstnodata_opt[0] << endl;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> outputStream << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << dstnodata_opt[0] << endl;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">switch</span>(theResample){</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">case</span>(BILINEAR):</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> lowerCol=readCol-0.5;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> lowerCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lowerCol);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> upperCol=readCol+0.5;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> upperCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(upperCol);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>(lowerCol<0)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> lowerCol=0;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">if</span>(upperCol>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> upperCol=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span>(oformat_opt[0]==<span class="stringliteral">"matrix"</span>){</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> std::cout << (readCol-0.5-lowerCol)*readBuffer[upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[lowerCol-startCol] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> outputStream << (readCol-0.5-lowerCol)*readBuffer[upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[lowerCol-startCol] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!imgReader.isNoData(readBuffer[upperCol-startCol])&&!imgReader.isNoData(readBuffer[lowerCol-startCol])){</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> std::cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << (readCol-0.5-lowerCol)*readBuffer[upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[lowerCol-startCol] << <span class="stringliteral">" "</span> << endl;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> outputStream << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << (readCol-0.5-lowerCol)*readBuffer[upperCol-startCol]+(1-readCol+0.5+lowerCol)*readBuffer[lowerCol-startCol] << <span class="stringliteral">" "</span> << endl;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> readCol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(readCol);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> readCol-=startCol;<span class="comment">//we only start reading from startCol</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> assert(readCol>=0);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(readCol>=readBuffer.size())</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::cout << <span class="stringliteral">"Error: "</span> << readCol << <span class="stringliteral">" >= "</span> << readBuffer.size() << std::endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> assert(readCol<readBuffer.size());</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(oformat_opt[0]==<span class="stringliteral">"matrix"</span>){</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> std::cout << readBuffer[readCol] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> outputStream << readBuffer[readCol] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!imgReader.isNoData(readBuffer[readCol])){</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> std::cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << readBuffer[readCol] << std::endl;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> outputStream << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << readBuffer[readCol] << std::endl;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> exit(1);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span>(oformat_opt[0]==<span class="stringliteral">"matrix"</span>){</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">if</span>(output_opt[0].empty())</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> outputStream << std::endl;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> }</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">if</span>(extent_opt[0]!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> extentReader.close();</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> imgReader.close();</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">if</span>(!output_opt[0].empty())</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> outputStream.close();</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdumpogr.html b/doc/html/pkdumpogr.html
new file mode 100644
index 0000000..2c88bfe
--- /dev/null
+++ b/doc/html/pkdumpogr.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkdumpogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdumpogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>dump ogr file to text file or standard output </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkdumpogr -i input [-o output] </code></p>
+<p><code></code></p>
+<p><code> Options: [-ln layername] [-n attribute]* [-pos] [-transpose]</code></p>
+<p><code> Advanced options:</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkdumpogr_description"></a>
+Description</h1>
+<p>The utility pkdumpogr dumps the content of a vector dataset to (standard) output (screen or filename). The default is to dump all the attributes. Individual attributes can be selected with the option -n. The X and Y positions can be printed with the option -pos. Use the option -transpose to transpose the output (only in combination with the option -n attribute).</p>
+<h1><a class="anchor" id="pkdumpogr_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input shape file </td></tr>
+<tr>
+<td>ln </td><td>lname </td><td>std::string </td><td></td><td>Layer name(s) in sample (leave empty to select all) </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output ASCII file </td></tr>
+<tr>
+<td>n </td><td>name </td><td>std::string </td><td>ALL </td><td>names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes </td></tr>
+<tr>
+<td>pos </td><td>pos </td><td>bool </td><td>false </td><td>include position (x and y) </td></tr>
+<tr>
+<td>t </td><td>transpose </td><td>bool </td><td>false </td><td>transpose output (does not work for -n ALL </td></tr>
+<tr>
+<td>fs </td><td>fs </td><td>char </td><td></td><td>field separator. </td></tr>
+</table>
+Usage: pkdumpogr -i input. [-o output]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkdumpogr can be found <a class="el" href="md_examples_pkdumpogr.html#examples_pkdumpogr">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdumpogr_8cc_source.html b/doc/html/pkdumpogr_8cc_source.html
new file mode 100644
index 0000000..83ec34c
--- /dev/null
+++ b/doc/html/pkdumpogr_8cc_source.html
@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkdumpogr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdumpogr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkdumpogr.cc: dump ogr file to text file or standard output</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "pkdumpogr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input shape file"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> layer_opt(<span class="stringliteral">"ln"</span>, <span class="stringliteral">"lname"</span>, <span class="stringliteral">"Layer name(s) in sample (leave empty to select all)"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output ASCII file"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> attribute_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"name"</span>, <span class="stringliteral">"names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes"</span>, <span class="stringliteral">"ALL"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> pos_opt(<span class="stringliteral">"pos"</span>,<span class="stringliteral">"pos"</span>,<span class="stringliteral">"include position (x and y)"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> transpose_opt(<span class="stringliteral">"t"</span>,<span class="stringliteral">"transpose"</span>,<span class="stringliteral">"transpose output (does not work for -n ALL "</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<char></a> fs_opt(<span class="stringliteral">"fs"</span>,<span class="stringliteral">"fs"</span>,<span class="stringliteral">"field separator."</span>,<span class="charliteral">' '</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose (Default: 0)"</span>, 0,2);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> fs_opt.setHide(1);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> verbose_opt.setHide(2);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> layer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> attribute_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> pos_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> transpose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> fs_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> exit(0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> cout << endl;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> cout << <span class="stringliteral">"Usage: pkdumpogr -i input [-o output]"</span> << endl;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> cout << endl;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> exit(0);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> inputReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> ofstream outputFile;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> outputFile.open(output_opt[0].c_str(),ios::out);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> inputReader.setFieldSeparator(fs_opt[0]);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">//support multiple layers</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> nlayerRead=inputReader.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> cout << <span class="stringliteral">"number of layers: "</span> << nlayerRead << endl;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayerRead;++ilayer){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> OGRLayer *readLayer=inputReader.getLayer(ilayer);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">string</span> currentLayername=readLayer->GetName();</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(layer_opt.size())</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> cout << <span class="stringliteral">"processing layer "</span> << currentLayername << endl;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// if(layer_opt.size())</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// cout << " --lname " << currentLayername << endl;</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span>(attribute_opt[0]==<span class="stringliteral">"ALL"</span>){</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> attribute_opt.clear();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> OGRFeatureDefn *poFDefn = readLayer->GetLayerDefn();</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> std::string fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> attribute_opt.push_back(fieldname);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// if(attribute_opt[0]!="ALL"){</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> vector<double> xvector;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> vector<double> yvector;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(inputReader.getGeometryType()==wkbPoint)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> inputReader.readXY(xvector,yvector);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <a class="code" href="classVector2d.html">Vector2d<std::string></a> theData(attribute_opt.size());</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<attribute_opt.size();++ifield){</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> cout << <span class="stringliteral">"field: "</span> << ifield << endl;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> theData[ifield].clear();</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> inputReader.readData(theData[ifield],OFTReal,attribute_opt[ifield],ilayer,verbose_opt[0]);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> std::cout << <span class="stringliteral">"number of fields: "</span> << theData.size() << std::endl;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> std::cout << <span class="stringliteral">"number of samples: "</span> << theData[0].size() << std::endl;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(transpose_opt[0]){</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(pos_opt[0]&&(inputReader.getGeometryType()==wkbPoint)){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> outputFile << <span class="stringliteral">"X"</span> << fs_opt[0];</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<xvector.size();++isample){</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> outputFile << xvector[isample];</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span>(isample<xvector.size()-1)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> outputFile << fs_opt[0];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> outputFile << std::endl;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> outputFile << <span class="stringliteral">"Y"</span> << fs_opt[0];</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<yvector.size();++isample){</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> outputFile << yvector[isample];</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(isample<yvector.size()-1)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> outputFile << fs_opt[0];</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> outputFile << std::endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> std::cout << <span class="stringliteral">"X"</span> << fs_opt[0];</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<xvector.size();++isample){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::cout << xvector[isample];</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(isample<xvector.size()-1)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> std::cout << fs_opt[0];</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> std::cout << <span class="stringliteral">"Y"</span> << fs_opt[0];</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<yvector.size();++isample){</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> std::cout << yvector[isample];</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(isample<yvector.size()-1)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::cout << fs_opt[0];</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<theData.size();++ifield){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> outputFile << ifield << fs_opt[0];</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<theData[0].size();++isample){</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> outputFile << theData[ifield][isample];</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(isample<theData[0].size()-1)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> outputFile << fs_opt[0];</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> outputFile << std::endl;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> std::cout << ifield << fs_opt[0];</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<theData[0].size();++isample){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> std::cout << theData[ifield][isample];</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(isample<theData[0].size()-1)</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> std::cout << fs_opt[0];</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<theData[0].size();++isample){</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> outputFile << isample << fs_opt[0];</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span>(pos_opt[0])</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> outputFile << xvector[isample] << fs_opt[0] << yvector[isample] << fs_opt[0];</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<theData.size();++ifield){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> outputFile << theData[ifield][isample];</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span>(ifield<theData.size()-1)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> outputFile << fs_opt[0];</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> outputFile << std::endl;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> std::cout << isample << fs_opt[0];</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(pos_opt[0])</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> std::cout << xvector[isample] << fs_opt[0] << yvector[isample] << fs_opt[0];</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<theData.size();++ifield){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> std::cout << theData[ifield][isample];</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(ifield<theData.size()-1)</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> std::cout << fs_opt[0];</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> outputFile.close();</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// if(output_opt.size()){</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">// ofstream outputFile(output_opt[0].c_str(),ios::out);</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">// outputFile << inputReader;</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// outputFile.close();</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">// std::cout << inputReader;</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> inputReader.close();</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkdumpogr_8h_source.html b/doc/html/pkdumpogr_8h_source.html
new file mode 100644
index 0000000..3a1fd79
--- /dev/null
+++ b/doc/html/pkdumpogr_8h_source.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkdumpogr.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkdumpogr.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkdumpogr.h: dump ogr file to text file or standard output</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef _PKDUMPOGR_H_</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#define _PKDUMPOGR_H_</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readDataImageShape(<span class="keyword">const</span> <span class="keywordtype">string</span> &filename,</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> map<<span class="keywordtype">int</span>,<a class="code" href="classVector2d.html">Vector2d<T></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> vector<string>& fields,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">double</span> start,</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">double</span> end,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">const</span> <span class="keywordtype">string</span>& label,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> <span class="keywordtype">string</span>& query=<span class="stringliteral">""</span>,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readDataImageShape(<span class="keyword">const</span> <span class="keywordtype">string</span> &filename,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> map<<span class="keywordtype">int</span>,<a class="code" href="classVector2d.html">Vector2d<T></a> > &mapPixels, <span class="comment">//[classNr][pixelNr][bandNr],</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> vector<string>& fields,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> start,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> end,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">const</span> <span class="keywordtype">string</span>& label,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">const</span> <span class="keywordtype">string</span>& query,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> verbose)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> mapPixels.clear();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> totalSamples=0; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> cout << <span class="stringliteral">"reading shape file "</span> << filename << endl;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> imgReaderShape;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> imgReaderShape.open(filename);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">bool</span> queryFound=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//only retain bands in fields</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> imgReaderShape.getFields(fields);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> vector<string>::iterator fit=fields.begin();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> cout << <span class="stringliteral">"reading fields: "</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">while</span>(fit!=fields.end()){</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> cout << *fit << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">size_t</span> pos=(*fit).find_first_not_of(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span>(pos==string::npos){</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>(query!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>((*fit).find(query)!=string::npos)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> queryFound=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> fields.erase(fit);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">string</span> fieldname=(*fit).substr(pos);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">int</span> iband=atoi(fieldname.c_str());</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>((start||end)&&(iband<start||iband>end))</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> fields.erase(fit);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> ++fit;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> cout << endl;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(verbose){</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> cout << <span class="stringliteral">"fields:"</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span>(vector<string>::iterator fit=fields.begin();fit!=fields.end();++fit)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> cout << <span class="stringliteral">" "</span> << *fit;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> cout << endl;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span>(!nband){</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(queryFound){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> ostringstream qs;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> qs << <span class="stringliteral">"select * from "</span> << imgReaderShape.getLayerName() << <span class="stringliteral">" where "</span> << query << <span class="stringliteral">"=1"</span>;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> cout << <span class="stringliteral">"reading with sql: "</span> << qs.str() << endl;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> nband=imgReaderShape.readSql(mapPixels,OFTReal,fields,label,qs.str(),NULL,0,<span class="keyword">true</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> cout << <span class="stringliteral">"reading data"</span> << endl;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> nband=imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,<span class="keyword">true</span>,verbose==2);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span>(queryFound){</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> ostringstream qs;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> qs << <span class="stringliteral">"select * from "</span> << imgReaderShape.getLayerName() << <span class="stringliteral">" where "</span> << query << <span class="stringliteral">"=1"</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> cout << <span class="stringliteral">"reading with sql: "</span> << qs.str() << endl;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> assert(nband==imgReaderShape.readSql(mapPixels,OFTReal,fields,label,qs.str(),NULL,0,<span class="keyword">true</span>,<span class="keyword">false</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> assert(nband==imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,<span class="keyword">true</span>,<span class="keyword">false</span>));</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> e){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> ostringstream estr;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> estr << e << <span class="stringliteral">" "</span> << filename;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">throw</span>(estr.str());</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> nsample=imgReaderShape.getFeatureCount();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> totalSamples+=nsample;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> cout << <span class="stringliteral">": "</span> << nsample << <span class="stringliteral">" samples read with "</span> << nband << <span class="stringliteral">" bands"</span> << endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> imgReaderShape.close();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span>(verbose)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> cout << <span class="stringliteral">"total number of samples read "</span> << totalSamples << endl;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> totalSamples;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#endif //_PKDUMPOGR_H_</span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkeditogr_8cc_source.html b/doc/html/pkeditogr_8cc_source.html
new file mode 100644
index 0000000..192e232
--- /dev/null
+++ b/doc/html/pkeditogr_8cc_source.html
@@ -0,0 +1,361 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/not_used/pkeditogr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html">not_used</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkeditogr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkeditogr.cc: program to edit (rename fields) ogr fil</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input vector file"</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output vector file"</span>);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output OGR file format"</span>,<span class="stringliteral">"ESRI Shapefile"</span>);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> selectField_opt(<span class="stringliteral">"select"</span>, <span class="stringliteral">"select"</span>, <span class="stringliteral">"select field (combined with like opt)"</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">//selectField can also be done via ogr2ogr using the -select option</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> like_opt(<span class="stringliteral">"like"</span>, <span class="stringliteral">"like"</span>, <span class="stringliteral">"substring(s) to be found in select field. If multiple substrings are provided, feature will be selected if one of them is found (stringent option must be false)"</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stringent_opt(<span class="stringliteral">"st"</span>, <span class="stringliteral">"stringent"</span>, <span class="stringliteral">"string in like option must exactly match to select feature)"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Optionpk<string> field_opt("as_field", "_field", "output field names (number must exactly match input fields)");</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">//renaming fields can also be done via ogr2ogr using the -sql option:</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">//ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="classOptionpk.html">Optionpk<long int></a> setfeature_opt(<span class="stringliteral">"sf"</span>, <span class="stringliteral">"sf"</span>, <span class="stringliteral">"id of feature(s) to set (start from 0)"</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> setname_opt(<span class="stringliteral">"sn"</span>, <span class="stringliteral">"sn"</span>, <span class="stringliteral">"name(s) of field(s) to set"</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> setvalue_opt(<span class="stringliteral">"sv"</span>, <span class="stringliteral">"sv"</span>, <span class="stringliteral">"value(s) of field(s) to set"</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> addname_opt(<span class="stringliteral">"an"</span>, <span class="stringliteral">"an"</span>, <span class="stringliteral">"name(s) of field(s) to add (number must exactly match field types)"</span>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> addtype_opt(<span class="stringliteral">"at"</span>, <span class="stringliteral">"at"</span>, <span class="stringliteral">"type(s) of field(s) to add (number must exactly match fieldnames to add"</span>, <span class="stringliteral">"Real"</span>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> addvalue_opt(<span class="stringliteral">"av"</span>, <span class="stringliteral">"av"</span>, <span class="stringliteral">"value(s) of field(s) to add"</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> selectField_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> like_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> stringent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// field_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> addname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> addtype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> addvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> setfeature_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> setname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> setvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> exit(0);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> cout << <span class="stringliteral">"opening "</span> << input_opt[0] << <span class="stringliteral">" for reading "</span> << endl;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> ogrReader(input_opt[0]);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> cout << <span class="stringliteral">"opening "</span> << output_opt[0] << <span class="stringliteral">" for writing "</span> << endl;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> OGRFieldType fieldType[addtype_opt.size()];</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> ogr_typecount=11;<span class="comment">//hard coded for now!</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> it=0;it<addtype_opt.size();++it){</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < ogr_typecount; ++iType){</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> addtype_opt[it].c_str()))</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fieldType[it]=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> std::cout << std::endl << <span class="stringliteral">"field type is: "</span> << OGRFieldDefn::GetFieldTypeName(fieldType[it]) << std::endl;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// if(field_opt.size())</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// assert(field_opt.size()==ogrReader.getFieldCount());</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> cout << <span class="stringliteral">"going through features"</span> << endl << flush;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">//support multiple layers</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">int</span> nlayer=ogrReader.getLayerCount();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"number of layers: "</span> << nlayer << endl;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayer;++ilayer){</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> OGRLayer *readLayer=ogrReader.getLayer(ilayer);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> cout << <span class="stringliteral">"reset reading"</span> << endl;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> readLayer->ResetReading();</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> OGRLayer *writeLayer=ogrWriter.createLayer(output_opt[0],ogrReader.getProjection(),ogrReader.getGeometryType(ilayer),NULL);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> std::vector<OGRFieldDefn*> readFields;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> std::vector<OGRFieldDefn*> writeFields;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> ogrReader.getFields(readFields,ilayer);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> writeFields=readFields;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<readFields.size();++ifield){</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// if(field_opt.size()>ifield)</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// writeFields[ifield]->SetName(field_opt[ifield].c_str());</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> std::cout << readFields[ifield]->GetNameRef() << <span class="stringliteral">" -> "</span> << writeFields[ifield]->GetNameRef() << std::endl;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(writeLayer->CreateField(writeFields[ifield]) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> ostringstream es;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// if(field_opt.size()>ifield)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// es << "Creating field " << field_opt[ifield] << " failed";</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> es << <span class="stringliteral">"Creating field "</span> << readFields[ifield] << <span class="stringliteral">" failed"</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">string</span> errorString=es.str();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> std::cerr << errorString << std::endl;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> exit(1);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> std::cout << <span class="stringliteral">"add "</span> << addname_opt.size() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(addname_opt.size()){</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> assert(addname_opt.size()==addtype_opt.size());</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">while</span>(addvalue_opt.size()<addname_opt.size())</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> addvalue_opt.push_back(addvalue_opt.back());</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iname=0;iname<addname_opt.size();++iname){</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> std::cout << addname_opt[iname] << <span class="stringliteral">" "</span> << std::endl;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> ogrWriter.createField(addname_opt[iname],fieldType[iname]);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::cout << addname_opt.size() << <span class="stringliteral">" fields created"</span> << std::endl;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nfeature=ogrReader.getFeatureCount(ilayer);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">while</span>((poFeature = ogrReader.getLayer(ilayer)->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> std::cout << <span class="stringliteral">"feature "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> ++ifeature;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">bool</span> doSelect;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(like_opt.empty())</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> doSelect=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> assert(selectField_opt.size());</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">int</span> fieldIndex=poFeature->GetFieldIndex(selectField_opt[0].c_str());</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">string</span> fieldValue=poFeature->GetFieldAsString(fieldIndex);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(stringent_opt[0]){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(fieldValue==like_opt[0])</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> doSelect=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> doSelect=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> doSelect=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilike=0;ilike<like_opt.size();++ilike){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(fieldValue.find(like_opt[ilike])!=std::string::npos){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> std::cout << <span class="stringliteral">"found "</span> << like_opt[ilike] << <span class="stringliteral">" in "</span> << fieldValue << std::endl;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> doSelect=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(!doSelect){</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::cout << <span class="stringliteral">"string not found in feature "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> OGRFeature *poDstFeature = NULL;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> poDstFeature=ogrWriter.createFeature(ilayer);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">string</span> errorString=<span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> fmt=errorString.c_str();</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> fmt,</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> poFeature->GetFID(), ogrWriter.getLayerName().c_str() );</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> fid=poFeature->GetFID();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> poDstFeature->SetFID( poFeature->GetFID() );</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<setfeature_opt.size();++ifeature){</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span>(fid==setfeature_opt[ifeature]){</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">switch</span>(poDstFeature->GetFieldDefnRef(fid)->GetType()){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> poDstFeature->SetField(setname_opt[ifeature].c_str(),string2type<float>(setvalue_opt[ifeature]));</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> poDstFeature->SetField(setname_opt[ifeature].c_str(),string2type<int>(setvalue_opt[ifeature]));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">case</span>(OFTString):</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> poDstFeature->SetField(setname_opt[ifeature].c_str(),setvalue_opt[ifeature].c_str());</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> std::cerr << <span class="stringliteral">"Error: field type not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> exit(1);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">//set default values for new fields</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> std::cout << <span class="stringliteral">"set default values for new fields in feature "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iname=0;iname<addname_opt.size();++iname){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">switch</span>(fieldType[iname]){</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">case</span>(OFTReal):</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> std::cout << <span class="stringliteral">"set field "</span> << addname_opt[iname] << <span class="stringliteral">" to default "</span> << string2type<float>(addvalue_opt[iname]) << std::endl;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> poDstFeature->SetField(addname_opt[iname].c_str(),string2type<float>(addvalue_opt[iname]));</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">case</span>(OFTInteger):</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> std::cout << <span class="stringliteral">"set field "</span> << addname_opt[iname] << <span class="stringliteral">" to default "</span> << string2type<int>(addvalue_opt[iname]) << std::endl;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> poDstFeature->SetField(addname_opt[iname].c_str(),string2type<int>(addvalue_opt[iname]));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">case</span>(OFTString):</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> std::cout << <span class="stringliteral">"set field "</span> << addname_opt[iname] << <span class="stringliteral">" to default "</span> << addvalue_opt[iname] << std::endl;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> poDstFeature->SetField(addname_opt[iname].c_str(),addvalue_opt[iname].c_str());</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> std::cerr << <span class="stringliteral">"Error: field type not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> exit(1);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> CPLErrorReset();</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> std::cout << <span class="stringliteral">"create feature"</span> << std::endl;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>(ogrWriter.createFeature( poDstFeature,ilayer ) != OGRERR_NONE){</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">string</span> errorString=<span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> fmt=errorString.c_str();</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> fmt,</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> poFeature->GetFID(), ogrWriter.getLayerName().c_str() );</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ifeature+1)/nfeature;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> std::cout << <span class="stringliteral">"replaced "</span> << ifeature << <span class="stringliteral">" features"</span> << std::endl;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> ogrReader.close();</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> ogrWriter.close();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkegcs.html b/doc/html/pkegcs.html
new file mode 100644
index 0000000..4714e88
--- /dev/null
+++ b/doc/html/pkegcs.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkegcs</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkegcs </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Utility for raster files in European Grid Coordinate System </p>
+<h2>SYNOPSIS</h2>
+<p><code></code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkegcs_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>image </td><td>std::string </td><td></td><td>input image to analyse </td></tr>
+<tr>
+<td>b </td><td>band </td><td>unsigned short </td><td>0 </td><td>Band specific information </td></tr>
+<tr>
+<td>c2b </td><td>cell2bb </td><td>std::string </td><td></td><td>convert cell code to geo coordinates of boundingbox (e.g. 32-AB) </td></tr>
+<tr>
+<td>c2m </td><td>cell2mid </td><td>std::string </td><td></td><td>convert cell code to centre in geo coordinates (e.g. 32-AB) </td></tr>
+<tr>
+<td>g2c </td><td>geo2cell </td><td>bool </td><td>false </td><td>get cell code for coordinates in x_opt and y_opt given the resolution in dx_opt </td></tr>
+<tr>
+<td>ref </td><td>ref </td><td>bool </td><td>false </td><td>get reference pixel (lower left corner of centre of gravity pixel) </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>double </td><td>0 </td><td>mask value(s) for no data to calculate reference pixel in image </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>int </td><td>250 </td><td>resolution </td></tr>
+<tr>
+<td>x </td><td>x </td><td>double </td><td>0 </td><td>x coordinate in epsg:3035 </td></tr>
+<tr>
+<td>y </td><td>y </td><td>double </td><td>0 </td><td>y coordinate in epsg:3035 </td></tr>
+</table>
+</li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkegcs_8cc_source.html b/doc/html/pkegcs_8cc_source.html
new file mode 100644
index 0000000..966cfc8
--- /dev/null
+++ b/doc/html/pkegcs_8cc_source.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkegcs.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkegcs.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkegcs.cc: Utility for raster files in European Grid Coordinate System</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "algorithms/Egcs.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> image_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"image"</span>,<span class="stringliteral">"input image to analyse"</span>,<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Band specific information"</span>, 0);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> cell2bb_opt(<span class="stringliteral">"c2b"</span>,<span class="stringliteral">"cell2bb"</span>,<span class="stringliteral">"convert cell code to geo coordinates of boundingbox (e.g. 32-AB)"</span>,<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> cell2mid_opt(<span class="stringliteral">"c2m"</span>,<span class="stringliteral">"cell2mid"</span>,<span class="stringliteral">"convert cell code to centre in geo coordinates (e.g. 32-AB)"</span>,<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> refpixel_opt(<span class="stringliteral">"ref"</span>, <span class="stringliteral">"ref"</span>, <span class="stringliteral">"get reference pixel (lower left corner of centre of gravity pixel)"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> maskValue_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"mask value(s) for no data to calculate reference pixel in image"</span>,0);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> dx_opt(<span class="stringliteral">"dx"</span>,<span class="stringliteral">"dx"</span>,<span class="stringliteral">"resolution"</span>,250);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> geo2cell_opt(<span class="stringliteral">"g2c"</span>, <span class="stringliteral">"geo2cell"</span>, <span class="stringliteral">"get cell code for coordinates in x_opt and y_opt given the resolution in dx_opt"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> x_opt(<span class="stringliteral">"x"</span>,<span class="stringliteral">"x"</span>,<span class="stringliteral">"x coordinate in epsg:3035"</span>,0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> y_opt(<span class="stringliteral">"y"</span>,<span class="stringliteral">"y"</span>,<span class="stringliteral">"y coordinate in epsg:3035"</span>,0);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> doProcess=image_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> cell2bb_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> cell2mid_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> geo2cell_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> refpixel_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> maskValue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> x_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> y_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">catch</span>(std::string predefinedString){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classEgcs.html">Egcs</a> egcs;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span>(cell2bb_opt[0]!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> egcs.setLevel(egcs.cell2level(cell2bb_opt[0]));</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> egcs.cell2bb(cell2bb_opt[0],theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> std::cout << std::setprecision(12) << <span class="stringliteral">"--ulx="</span> << theULX << <span class="stringliteral">" --uly="</span> << theULY << <span class="stringliteral">" --lrx="</span> << theLRX << <span class="stringliteral">" --lry="</span> << theLRY << std::endl;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span>(cell2mid_opt[0]!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">double</span> midX, midY;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> egcs.setLevel(egcs.cell2level(cell2mid_opt[0]));</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> egcs.cell2mid(cell2mid_opt[0],midX,midY);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> std::cout << std::setprecision(12) << <span class="stringliteral">"-x="</span> << midX << <span class="stringliteral">" -y="</span> << midY << std::endl;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span>(geo2cell_opt[0]){</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> egcs.setLevel(egcs.res2level(dx_opt[0]));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> std::cout << egcs.geo2cell(x_opt[0],y_opt[0]) << std::endl;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(image_opt[0]!=<span class="stringliteral">""</span>){</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> imgReader.open(image_opt[0]);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span>(refpixel_opt[0]){</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> assert(band_opt[0]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<maskValue_opt.size();++inodata)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> imgReader.pushNoDataValue(maskValue_opt[inodata]);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// if(verbose_opt[0]){</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// vector<double> noData;</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// imgReader.getNoDataValues(noData,band_opt[0]);</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// std::cout << "number of no data values: " << noData.size() << std::endl;</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> refX,refY;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//get centre of reference (centre of gravity) pixel in image</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> imgReader.getRefPix(refX,refY,band_opt[0]);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> std::cout << std::setprecision(12) << <span class="stringliteral">"--x "</span> << refX << <span class="stringliteral">" --y "</span> << refY << std::endl;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> egcs.setLevel(egcs.res2level(imgReader.getDeltaX()));</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// unsigned short theLevel=egcs.getLevel(imgReader.getDeltaX());</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// egcs.setLevel(theLevel);</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> std::cout << <span class="stringliteral">"cell code at level "</span> << egcs.getLevel() << <span class="stringliteral">" (resolution is "</span> << egcs.getResolution() << <span class="stringliteral">"): "</span> << egcs.geo2cell(refX,refY) << std::endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classEgcs_html"><div class="ttname"><a href="classEgcs.html">Egcs</a></div><div class="ttdef"><b>Definition:</b> <a href="Egcs_8h_source.html#l00026">Egcs.h:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkenhance_8cc_source.html b/doc/html/pkenhance_8cc_source.html
new file mode 100644
index 0000000..d686747
--- /dev/null
+++ b/doc/html/pkenhance_8cc_source.html
@@ -0,0 +1,274 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/not_used/pkenhance.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html">not_used</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkenhance.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkenhance.cc: program to enhance raster images: histogram matching</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> reference_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reference"</span>, <span class="stringliteral">"Reference image file"</span>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> minRef_opt(<span class="stringliteral">"minref"</span>, <span class="stringliteral">"minref"</span>, <span class="stringliteral">"Sets minimum for histogram of reference image"</span>);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> maxRef_opt(<span class="stringliteral">"maxref"</span>, <span class="stringliteral">"maxref"</span>, <span class="stringliteral">"Sets maximum for histogram of reference image"</span>);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> minInput_opt(<span class="stringliteral">"mininput"</span>, <span class="stringliteral">"mininput"</span>, <span class="stringliteral">"Sets minimum for histogram of input image"</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> maxInput_opt(<span class="stringliteral">"maxinput"</span>, <span class="stringliteral">"maxinput"</span>, <span class="stringliteral">"Sets maximum for histogram of input image"</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Sets no data value(s) for calculations (nodata values in input image)"</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> method_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"method"</span>, <span class="stringliteral">"enhancement method (histmatch)"</span>, <span class="stringliteral">"histmatch"</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Optionpk<std::string> wavelet_type_opt("wt", "wavelet", "wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered", "daubechies");</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// Optionpk<int> family_opt("wf", "family", "wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html)", 4);</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// Optionpk<double> quantize_opt("q", "quantize", "Quantize threshold",0);</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nbin_opt(<span class="stringliteral">"nbin"</span>, <span class="stringliteral">"nbin"</span>, <span class="stringliteral">"Number of bins used in histogram. Use 0 for all input values as integers"</span>,0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>,<span class="stringlitera [...]
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> reference_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> minRef_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> maxRef_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> minInput_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> maxInput_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> method_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> nbin_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> exit(0);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputImg;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> referenceImg;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputImg;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> inputImg.open(input_opt[0]);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span>(!inodata)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> inputImg.GDALSetNoDataValue(nodata_opt[0],0);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> inputImg.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> nband=inputImg.nrOfBand();</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> theType=inputImg.getDataType();</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> std::cout << std::endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">string</span> imageType=inputImg.getImageType();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(oformat_opt.size())</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> theInterleave+=inputImg.getInterleave();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> std::cout << <span class="stringliteral">"opening output image "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> outputImg.open(output_opt[0],inputImg.nrOfCol(),inputImg.nrOfRow(),inputImg.nrOfBand(),theType,imageType,option_opt);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> exit(1);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(method_opt[0]==<span class="stringliteral">"histmatch"</span>){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> assert(reference_opt.size());</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> referenceImg.open(reference_opt[0]);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> assert(nband==referenceImg.nrOfBand());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(!inodata)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> referenceImg.GDALSetNoDataValue(nodata_opt[0],0);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> referenceImg.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">//calculate histograms</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbinRef=nbin_opt[0];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbinInput=nbin_opt[0];</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> std::vector<double> histRef(nbinRef);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> std::vector<double> histInput(nbinInput);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">double</span> minValueRef=0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">double</span> maxValueRef=0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">double</span> minValueInput=0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">double</span> maxValueInput=0;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(minRef_opt.size())</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> minValueRef=minRef_opt[0];</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(maxRef_opt.size())</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> maxValueRef=maxRef_opt[0];</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(minInput_opt.size())</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> minValueInput=minInput_opt[0];</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span>(maxInput_opt.size())</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> maxValueInput=maxInput_opt[0];</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nsampleRef=referenceImg.getHistogram(histRef,minValueRef,maxValueRef,nbinRef,iband);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nsampleInput=inputImg.getHistogram(histInput,minValueInput,maxValueInput,nbinInput,iband);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">//create cumulative historgrams</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bin=0;bin<nbinRef;++bin){</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> histRef[bin]+=100.0*<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(histRef[bin])/static_cast<double>(nsampleRef);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bin=0;bin<nbinInput;++bin)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> histInput[bin]+=100.0*static_cast<double>(histInput[bin])/<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(nsampleInput);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">//match histograms</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> vector<double> lineBuffer(inputImg.nrOfCol());</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<inputImg.nrOfRow();++irow){</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> inputImg.readData(lineBuffer,GDT_Float64, irow, iband);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputImg.nrOfCol();++icol){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">//find bin in input image histogram</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">int</span> inputBin=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(lineBuffer[icol]-minValueInput)/(maxValueInput-minValueInput)*(histInput.size()-1));</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">//find corresponding bin in reference image histogram</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">//todo: optimize with lower_bound?</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// std::vector<unsigned long int>::const_iterator hit=histRef.begin();</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">int</span> ibin=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span>(ibin=0;ibin<histRef.size();++ibin){</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(histRef[ibin]>histInput[inputBin])</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(ibin)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> --ibin;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> lineBuffer[icol]=(maxValueRef-minValueRef)/(histRef.size()-1)*(ibin)+minValueRef;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// std::vector<unsigned long int>::const_iterator it=std::lower_bound(histRef.begin(),histRef.end(),culInput);</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> outputImg.writeData(lineBuffer,GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> progress=(1.0+irow);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> progress+=(outputImg.nrOfRow()*iband);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> progress/=outputImg.nrOfBand()*outputImg.nrOfRow();</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> assert(progress>=0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> assert(progress<=1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> inputImg.close();</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(method_opt[0]==<span class="stringliteral">"histmatch"</span>)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> referenceImg.close();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> outputImg.close();</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract.html b/doc/html/pkextract.html
new file mode 100644
index 0000000..3cf92b1
--- /dev/null
+++ b/doc/html/pkextract.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkextract</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>extract pixel values from raster image from a (vector or raster) sample </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkextract -i input [-s sample | -rand number | -grid size] -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-ln layer]* [-c class]* [-t threshold]* [-f format] [-ft fieldType] [-lt labelType] [-polygon] [-b band]* [-r rule]</code></p>
+<p><code> Advanced options: [-bndnodata band -srcnodata value]* [-tp threshold] [-test testSample] [-bn attribute] [-cn attribute] [-geo value] [-down value] [-buf value [-circ]] </code></p>
+<h1><a class="anchor" id="pkextract_description"></a>
+Description</h1>
+<p>The utility pkextract extracts pixel values from an input raster dataset, based on the locations you provide via a sample file. Alternatively, a random sample or systematic grid of points can also be extracted. The sample can be a vector file with points or polygons. In the case of polygons, you can either extract the values for all raster pixels that are covered by the polygons, or extract a single value for each polygon such as the centroid, mean, median, etc. As output, a new copy [...]
+<p>Instead of a vector dataset, the sample can also be a raster dataset with categorical values. The typical use case is a land cover map that overlaps the input raster dataset. The utility then extracts pixels from the input raster for the respective land cover classes. To select a random subset of the sample raster dataset you can set the threshold option -t with a percentage value.</p>
+<p>A typical usage of pkextract is to prepare a training sample for one of the classifiers implemented in pktools.</p>
+<h1><a class="anchor" id="pkextract_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Raster input dataset containing band information </td></tr>
+<tr>
+<td>s </td><td>sample </td><td>std::string </td><td></td><td>OGR vector dataset with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset. </td></tr>
+<tr>
+<td>ln </td><td>ln </td><td>std::string </td><td></td><td>Layer name(s) in sample (leave empty to select all) </td></tr>
+<tr>
+<td>rand </td><td>random </td><td>unsigned int </td><td></td><td>Create simple random sample of points. Provide number of points to generate </td></tr>
+<tr>
+<td>grid </td><td>grid </td><td>double </td><td></td><td>Create systematic grid of points. Provide cell grid size (in projected units, e.g,. m) </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output sample dataset </td></tr>
+<tr>
+<td>c </td><td>class </td><td>int </td><td></td><td>Class(es) to extract from input sample image. Leave empty to extract all valid data pixels from sample dataset. Make sure to set classes if rule is set to mode or proportion </td></tr>
+<tr>
+<td>t </td><td>threshold </td><td>float </td><td>100 </td><td>Probability threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). Use a single threshold for vector sample datasets. If using raster land cover maps as a sample dataset, you can provide a threshold value for each class (e.g. -t 80 -t 60). Use value 100 to select all pixels for selected class(es) </td></tr>
+<tr>
+<td>perc </td><td>perc </td><td>double </td><td>95 </td><td>Percentile value used for rule percentile </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>SQLite </td><td>Output sample dataset format </td></tr>
+<tr>
+<td>ft </td><td>ftype </td><td>std::string </td><td>Real </td><td>Field type (only Real or Integer) </td></tr>
+<tr>
+<td>lt </td><td>ltype </td><td>std::string </td><td>Integer </td><td>Label type: In16 or String </td></tr>
+<tr>
+<td>polygon </td><td>polygon </td><td>bool </td><td>false </td><td>Create OGRPolygon as geometry instead of OGRPoint. </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td></td><td>Band index(es) to extract (0 based). Leave empty to use all bands </td></tr>
+<tr>
+<td>r </td><td>rule </td><td>std::string </td><td>centroid </td><td>Rule how to report image information per feature (only for vector sample). point (value at each point or at centroid if polygon), centroid, mean, stdev, median, proportion, min, max, mode, sum, percentile. </td></tr>
+<tr>
+<td>bndnodata </td><td>bndnodata </td><td>int </td><td>0 </td><td>Band(s) in input image to check if pixel is valid (used for srcnodata) </td></tr>
+<tr>
+<td>srcnodata </td><td>srcnodata </td><td>double </td><td></td><td>Invalid value(s) for input image </td></tr>
+<tr>
+<td>tp </td><td>thresholdPolygon </td><td>float </td><td></td><td>(absolute) threshold for selecting samples in each polygon </td></tr>
+<tr>
+<td>test </td><td>test </td><td>std::string </td><td></td><td>Test sample dataset (use this option in combination with threshold<100 to create a training (output) and test set </td></tr>
+<tr>
+<td>bn </td><td>bname </td><td>std::string </td><td>b </td><td>For single band input data, this extra attribute name will correspond to the raster values. For multi-band input data, multiple attributes with this prefix will be added (e.g. b0, b1, b2, etc.) </td></tr>
+<tr>
+<td>cn </td><td>cname </td><td>std::string </td><td>label </td><td>Name of the class label in the output vector dataset </td></tr>
+<tr>
+<td>geo </td><td>geo </td><td>short </td><td>1 </td><td>Use geo coordinates (set to 0 to use image coordinates) </td></tr>
+<tr>
+<td>down </td><td>down </td><td>short </td><td>1 </td><td>Down sampling factor (for raster sample datasets only). Can be used to create grid points </td></tr>
+<tr>
+<td>buf </td><td>buffer </td><td>short </td><td></td><td>Buffer for calculating statistics for point features </td></tr>
+<tr>
+<td>circ </td><td>circular </td><td>bool </td><td>false </td><td>Use a circular disc kernel buffer (for vector point sample datasets only, use in combination with buffer option) </td></tr>
+</table>
+Usage: pkextract -i input [-s sample | -rand number | -grid size] -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkextract can be found <a class="el" href="md_examples_pkextract.html#examples_pkextract">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract_8cc_source.html b/doc/html/pkextract_8cc_source.html
new file mode 100644
index 0000000..1e41774
--- /dev/null
+++ b/doc/html/pkextract_8cc_source.html
@@ -0,0 +1,2517 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkextract.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkextract.cc: extract pixel values from raster image from a (vector or raster) sample</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <ctime></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifndef PI</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#define PI 3.1415926535897932384626433832795</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">namespace </span>rule{</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">enum</span> RULE_TYPE {point=0, mean=1, proportion=2, custom=3, min=4, max=5, mode=6, centroid=7, sum=8, median=9, stdev=10, percentile=11};</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> image_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Raster input dataset containing band information"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> sample_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"sample"</span>, <span class="stringliteral">"OGR vector dataset with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset."</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> layer_opt(<span class="stringliteral">"ln"</span>, <span class="stringliteral">"ln"</span>, <span class="stringliteral">"Layer name(s) in sample (leave empty to select all)"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> random_opt(<span class="stringliteral">"rand"</span>, <span class="stringliteral">"random"</span>, <span class="stringliteral">"Create simple random sample of points. Provide number of points to generate"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> grid_opt(<span class="stringliteral">"grid"</span>, <span class="stringliteral">"grid"</span>, <span class="stringliteral">"Create systematic grid of points. Provide cell grid size (in projected units, e.g,. m)"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output sample dataset"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> class_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"Class(es) to extract from input sample image. Leave empty to extract all valid data pixels from sample dataset. Make sure to set classes if rule is set to mode or proportion"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> threshold_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"threshold"</span>, <span class="stringliteral">"Probability threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). Use a single threshold for vector sample datasets. If using raster la [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> percentile_opt(<span class="stringliteral">"perc"</span>,<span class="stringliteral">"perc"</span>,<span class="stringliteral">"Percentile value used for rule percentile"</span>,95);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output sample dataset format"</span>,<span class="stringliteral">"SQLite"</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ftype_opt(<span class="stringliteral">"ft"</span>, <span class="stringliteral">"ftype"</span>, <span class="stringliteral">"Field type (only Real or Integer)"</span>, <span class="stringliteral">"Real"</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ltype_opt(<span class="stringliteral">"lt"</span>, <span class="stringliteral">"ltype"</span>, <span class="stringliteral">"Label type: In16 or String"</span>, <span class="stringliteral">"Integer"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> polygon_opt(<span class="stringliteral">"polygon"</span>, <span class="stringliteral">"polygon"</span>, <span class="stringliteral">"Create OGRPolygon as geometry instead of OGRPoint."</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Band index(es) to extract (0 based). Leave empty to use all bands"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> rule_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"rule"</span>, <span class="stringliteral">"Rule how to report image information per feature (only for vector sample). point (value at each point or at centroid if polygon), centroid, mean, stdev, median, proportion, min, max, mode, sum, per [...]
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> srcnodata_opt(<span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"srcnodata"</span>, <span class="stringliteral">"Invalid value(s) for input image"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> bndnodata_opt(<span class="stringliteral">"bndnodata"</span>, <span class="stringliteral">"bndnodata"</span>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (used for srcnodata)"</span>, 0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> polythreshold_opt(<span class="stringliteral">"tp"</span>, <span class="stringliteral">"thresholdPolygon"</span>, <span class="stringliteral">"(absolute) threshold for selecting samples in each polygon"</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> test_opt(<span class="stringliteral">"test"</span>, <span class="stringliteral">"test"</span>, <span class="stringliteral">"Test sample dataset (use this option in combination with threshold<100 to create a training (output) and test set"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> fieldname_opt(<span class="stringliteral">"bn"</span>, <span class="stringliteral">"bname"</span>, <span class="stringliteral">"For single band input data, this extra attribute name will correspond to the raster values. For multi-band input data, multiple attributes with this prefix will be added (e.g. b0, b1, b2, et [...]
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"cn"</span>, <span class="stringliteral">"cname"</span>, <span class="stringliteral">"Name of the class label in the output vector dataset"</span>, <span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> geo_opt(<span class="stringliteral">"geo"</span>, <span class="stringliteral">"geo"</span>, <span class="stringliteral">"Use geo coordinates (set to 0 to use image coordinates)"</span>, 1);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> down_opt(<span class="stringliteral">"down"</span>, <span class="stringliteral">"down"</span>, <span class="stringliteral">"Down sampling factor (for raster sample datasets only). Can be used to create grid points"</span>, 1);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> buffer_opt(<span class="stringliteral">"buf"</span>, <span class="stringliteral">"buffer"</span>, <span class="stringliteral">"Buffer for calculating statistics for point features "</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> disc_opt(<span class="stringliteral">"circ"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"Use a circular disc kernel buffer (for vector point sample datasets only, use in combination with buffer option)"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"Verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> bndnodata_opt.setHide(1);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> srcnodata_opt.setHide(1);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> polythreshold_opt.setHide(1);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> percentile_opt.setHide(1);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> test_opt.setHide(1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> fieldname_opt.setHide(1);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> label_opt.setHide(1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> geo_opt.setHide(1);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> down_opt.setHide(1);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> buffer_opt.setHide(1);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> disc_opt.setHide(1);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> doProcess=image_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> sample_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> layer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> grid_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> class_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> threshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> percentile_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> ftype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> ltype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> polygon_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> rule_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> bndnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> srcnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> polythreshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> test_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> fieldname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> geo_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> down_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> buffer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> disc_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// rbox_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// cbox_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> exit(0);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cout << endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> cout << <span class="stringliteral">"Usage: pkextract -i input [-s sample | -rand number | -grid size] -o output"</span> << endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> cout << endl;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> std::map<std::string, rule::RULE_TYPE> ruleMap;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">//initialize ruleMap</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> ruleMap[<span class="stringliteral">"point"</span>]=rule::point;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> ruleMap[<span class="stringliteral">"centroid"</span>]=rule::centroid;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> ruleMap[<span class="stringliteral">"mean"</span>]=rule::mean;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> ruleMap[<span class="stringliteral">"stdev"</span>]=rule::stdev;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> ruleMap[<span class="stringliteral">"median"</span>]=rule::median;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> ruleMap[<span class="stringliteral">"proportion"</span>]=rule::proportion;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> ruleMap[<span class="stringliteral">"min"</span>]=rule::min;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> ruleMap[<span class="stringliteral">"max"</span>]=rule::max;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> ruleMap[<span class="stringliteral">"custom"</span>]=rule::custom;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> ruleMap[<span class="stringliteral">"mode"</span>]=rule::mode;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> ruleMap[<span class="stringliteral">"sum"</span>]=rule::sum;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> ruleMap[<span class="stringliteral">"percentile"</span>]=rule::percentile;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">while</span>(srcnodata_opt.size()<bndnodata_opt.size())</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> srcnodata_opt.push_back(srcnodata_opt[0]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">while</span>(bndnodata_opt.size()<srcnodata_opt.size())</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> bndnodata_opt.push_back(bndnodata_opt[0]);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> std::cout << class_opt << std::endl;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> stat.setNoDataValues(srcnodata_opt);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <a class="code" href="classVector2d.html">Vector2d<unsigned int></a> posdata;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ntotalvalid=0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ntotalinvalid=0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> vector<unsigned long int> nvalid(class_opt.size());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> vector<unsigned long int> ninvalid(class_opt.size());</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> it=0;it<nvalid.size();++it){</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> nvalid[it]=0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> ninvalid[it]=0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(image_opt.empty()){</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> std::cerr << <span class="stringliteral">"No image dataset provided (use option -i). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> exit(0);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> std::cerr << <span class="stringliteral">"No output dataset provided (use option -o). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> exit(0);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> imgReader.open(image_opt[0]);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> std::cout << errorstring << std::endl;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> exit(0);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">int</span> nband=(band_opt.size()) ? band_opt.size() : imgReader.nrOfBand();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(fieldname_opt.size()<nband){</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> std::string bandString=fieldname_opt[0];</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> fieldname_opt.clear();</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> fieldname_opt.resize(nband);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> ostringstream fs;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> fs << bandString << theBand;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> fieldname_opt[iband]=fs.str();</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> std::cout << fieldname_opt << std::endl;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> std::cout << <span class="stringliteral">"Number of bands in input image: "</span> << imgReader.nrOfBand() << std::endl;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> OGRFieldType fieldType;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> OGRFieldType labelType;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> ogr_typecount=11;<span class="comment">//hard coded for now!</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> std::cout << <span class="stringliteral">"field and label types can be: "</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < ogr_typecount; ++iType){</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> std::cout << <span class="stringliteral">" "</span> << OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> ftype_opt[0].c_str()))</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> fieldType=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> ltype_opt[0].c_str()))</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> labelType=(OGRFieldType) iType;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">case</span> OFTRealList:</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> std::cout << std::endl << <span class="stringliteral">"field type is: "</span> << OGRFieldDefn::GetFieldTypeName(fieldType) << std::endl;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> cerr << <span class="stringliteral">"field type "</span> << OGRFieldDefn::GetFieldTypeName(fieldType) << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> exit(0);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">switch</span>( labelType ){</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">case</span> OFTRealList:</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> std::cout << std::endl << <span class="stringliteral">"label type is: "</span> << OGRFieldDefn::GetFieldTypeName(labelType) << std::endl;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> cerr << <span class="stringliteral">"label type "</span> << OGRFieldDefn::GetFieldTypeName(labelType) << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> exit(0);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> srand(time(NULL));</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">bool</span> sampleIsRaster=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">bool</span> sampleIsVirtual=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> sampleReaderOgr;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> sampleWriterOgr;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span>(sample_opt.size()){</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> sampleReaderOgr.open(sample_opt[0]);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> sampleIsRaster=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> sampleWriterOgr.open(<span class="stringliteral">"/vsimem/virtual"</span>,ogrformat_opt[0]);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> sampleWriterOgr.createLayer(<span class="stringliteral">"points"</span>, imgReader.getProjection(), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> sampleIsVirtual=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// string fieldName="label";</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// string fieldValue="class";</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">// sampleWriterOgr.createField(fieldName,OFTString);</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(random_opt.size()){</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">//create simple random sampling within boundary</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> OGRPoint pt;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> imgReader.getBoundingBox(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ipoint=1;ipoint<=random_opt[0];++ipoint){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> OGRFeature *pointFeature;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> pointFeature=sampleWriterOgr.createFeature();</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// pointFeature->SetField(fieldName.c_str(),fieldValue.c_str());</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">double</span> theX=ulx+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX)*(lrx-ulx);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">double</span> theY=uly-<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX)*(uly-lry);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> pt.setX(theX);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> pt.setY(theY);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> pointFeature->SetGeometry( &pt ); </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(sampleWriterOgr.createFeature(pointFeature) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> cerr << <span class="stringliteral">"Failed to create feature in shapefile"</span> << endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> exit( 1 );</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> OGRFeature::DestroyFeature(pointFeature);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(grid_opt.size()){</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">//create systematic grid of points </span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> OGRPoint pt;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> imgReader.getBoundingBox(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ipoint=0;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> theY=uly-grid_opt[0]/2;theY>lry;theY-=grid_opt[0]){</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> theX=ulx+grid_opt[0]/2;theX<lrx;theX+=grid_opt[0]){</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> cout << <span class="stringliteral">"position: "</span> << theX << <span class="stringliteral">" "</span> << theY << endl;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> OGRFeature *pointFeature;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> pointFeature=sampleWriterOgr.createFeature();</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">// pointFeature->SetField(fieldName.c_str(),fieldValue.c_str());</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> pt.setX(theX);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> pt.setY(theY);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> pointFeature->SetGeometry( &pt ); </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span>(sampleWriterOgr.createFeature(pointFeature) != OGRERR_NONE ){</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> cerr << <span class="stringliteral">"Failed to create feature in shapefile"</span> << endl;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> exit( 1 );</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> OGRFeature::DestroyFeature(pointFeature);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> }</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cerr << <span class="stringliteral">"No sample dataset provided (use option -s). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> exit(0);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> sampleWriterOgr.close();</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> sampleReaderOgr.open(<span class="stringliteral">"/vsimem/virtual"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">if</span>(sampleIsRaster){</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span>(class_opt.empty()){</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">// std::cout << "Warning: no classes selected, if a classes must be extracted, set to -1 for all classes using option -c -1" << std::endl;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> classReader;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> assert(sample_opt.size());</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> classReader.open(sample_opt[0]);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment">// vector<int> classBuffer(classReader.nrOfCol());</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> vector<double> classBuffer(classReader.nrOfCol());</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <a class="code" href="classVector2d.html">Vector2d<double></a> imgBuffer(nband);<span class="comment">//[band][col]</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> vector<double> sample(2+nband);<span class="comment">//x,y,band values</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <a class="code" href="classVector2d.html">Vector2d<double></a> writeBuffer;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="comment">// vector<int> writeBufferClass;</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> vector<double> writeBufferClass;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> vector<int> selectedClass;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <a class="code" href="classVector2d.html">Vector2d<double></a> selectedBuffer;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">double</span> oldimgrow=-1;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> std::cout << <span class="stringliteral">"extracting sample from image..."</span> << std::endl;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> progress=0;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">for</span>(irow=0;irow<classReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">if</span>(irow%down_opt[0])</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// classReader.readData(classBuffer,GDT_Int32,irow);</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> classReader.readData(classBuffer,GDT_Float64,irow);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">double</span> x,y;<span class="comment">//geo coordinates</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">double</span> iimg,jimg;<span class="comment">//image coordinates in img image</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">for</span>(icol=0;icol<classReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">if</span>(icol%down_opt[0])</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// int theClass=0;</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordtype">double</span> theClass=classBuffer[icol];</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// int processClass=-1;</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordtype">int</span> processClass=0;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">// if(class_opt[0]<0){//process every class except 0</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">// if(classBuffer[icol]){</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">// processClass=0;</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// theClass=classBuffer[icol];</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// for(int iclass=0;iclass<class_opt.size();++iclass){</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// if(classBuffer[icol]==class_opt[iclass]){</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// processClass=iclass;</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// theClass=class_opt[iclass];</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">// if(processClass>=0){</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(valid){</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(geo_opt[0]){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> classReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> sample[0]=x;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> sample[1]=y;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> std::cout.precision(12);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> std::cout << theClass << <span class="stringliteral">" "</span> << x << <span class="stringliteral">" "</span> << y << std::endl;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">//find col in img</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> imgReader.geo2image(x,y,iimg,jimg);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> jimg=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(jimg);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> iimg=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span>(static_cast<int>(iimg)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> iimg=icol;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> jimg=irow;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> sample[0]=iimg;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> sample[1]=jimg;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(static_cast<int>(jimg)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(jimg)>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">if</span>(static_cast<int>(jimg)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldimgrow)){</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> assert(imgBuffer.size()==nband);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> imgReader.readData(imgBuffer[iband],GDT_Float64,static_cast<int>(jimg),theBand);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> assert(imgBuffer[iband].size()==imgReader.nrOfCol());</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> vector<int>::const_iterator bndit=bndnodata_opt.begin();</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> vector<double>::const_iterator srcit=srcnodata_opt.begin();</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">while</span>(bndit!=bndnodata_opt.end()&&srcit!=srcnodata_opt.end()){</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span>((*bndit==theBand)&&(*srcit==imgBuffer[iband][<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)])){</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> ++bndit;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> ++srcit;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> oldimgrow=jimg;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span>(valid){</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<imgBuffer.size();++iband){</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span>(imgBuffer[iband].size()!=imgReader.nrOfCol()){</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> std::cout << <span class="stringliteral">"Error in band "</span> << iband << <span class="stringliteral">": "</span> << imgBuffer[iband].size() << <span class="stringliteral">"!="</span> << imgReader.nrOfCol() << std::endl;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> assert(imgBuffer[iband].size()==imgReader.nrOfCol());</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> sample[iband+2]=imgBuffer[iband][<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)];</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordtype">float</span> theThreshold=(threshold_opt.size()>1)?threshold_opt[processClass]:threshold_opt[0];</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">if</span>(theThreshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> p*=100.0;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">if</span>(p>theThreshold)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nvalid.size()>processClass){<span class="comment">//absolute value</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(nvalid[processClass]>=-theThreshold)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select any more pixels for this class, go to next column to search for other classes</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> writeBuffer.push_back(sample);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> writeBufferClass.push_back(theClass);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> ++ntotalvalid;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">if</span>(nvalid.size()>processClass)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> ++(nvalid[processClass]);</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> ++ntotalinvalid;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">if</span>(ninvalid.size()>processClass)</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> ++(ninvalid[processClass]);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }<span class="comment">//processClass</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> }<span class="comment">//icol</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/classReader.nrOfRow();</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }<span class="comment">//irow</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> progress=100;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">if</span>(writeBuffer.size()>0){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> assert(ntotalvalid==writeBuffer.size());</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> std::cout << <span class="stringliteral">"creating image sample writer "</span> << output_opt[0] << <span class="stringliteral">" with "</span> << writeBuffer.size() << <span class="stringliteral">" samples ("</span> << ntotalinvalid << <span class="stringliteral">" invalid)"</span> << std::endl;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> ogrWriter.open(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> ostringstream slayer;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> slayer << <span class="stringliteral">"training data"</span>;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> std::string layername=slayer.str();</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> ogrWriter.createLayer(layername, imgReader.getProjection(), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> std::string fieldname=<span class="stringliteral">"fid"</span>;<span class="comment">//number of the point</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> ogrWriter.createField(fieldname,OFTInteger);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> map<std::string,double> pointAttributes;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> ogrWriter.createField(label_opt[0],labelType);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> ogrWriter.createField(fieldname_opt[iband],fieldType);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> }</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> std::cout << <span class="stringliteral">"writing sample to "</span> << output_opt[0] << <span class="stringliteral">"..."</span> << std::endl;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> progress=0;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<writeBuffer.size();++isample){</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> std::cout << <span class="stringliteral">"writing sample "</span> << isample << std::endl;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> pointAttributes[label_opt[0]]=writeBufferClass[isample];</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<writeBuffer[0].size()-2;++iband){</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">// ostringstream fs;</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">// if(nband==1)</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// fs << fieldname_opt[0];</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// fs << fieldname_opt[0] << theBand;</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// pointAttributes[fs.str()]=writeBuffer[isample][iband+2];</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> pointAttributes[fieldname_opt[iband]]=writeBuffer[isample][iband+2];</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> std::cout << <span class="stringliteral">"all bands written"</span> << std::endl;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> ogrWriter.addPoint(writeBuffer[isample][0],writeBuffer[isample][1],pointAttributes,fieldname,isample);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(isample+1.0)/writeBuffer.size();</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> ogrWriter.close();</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> std::cout << <span class="stringliteral">"No data found for any class "</span> << std::endl;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> classReader.close();</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> nsample=writeBuffer.size();</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> std::cout << <span class="stringliteral">"total number of samples written: "</span> << nsample << std::endl;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> }</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">else</span>{<span class="comment">//class_opt.size()!=0</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> assert(class_opt[0]);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">// if(class_opt[0]){</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> assert(threshold_opt.size()==1||threshold_opt.size()==class_opt.size());</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> classReader;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> std::cout << <span class="stringliteral">"reading position from sample dataset "</span> << std::endl;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> std::cout << <span class="stringliteral">"class thresholds: "</span> << std::endl;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span>(threshold_opt.size()>1)</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> std::cout << class_opt[iclass] << <span class="stringliteral">": "</span> << threshold_opt[iclass] << std::endl;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> std::cout << class_opt[iclass] << <span class="stringliteral">": "</span> << threshold_opt[0] << std::endl;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> }</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> classReader.open(sample_opt[0]);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> vector<int> classBuffer(classReader.nrOfCol());</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment">// vector<double> classBuffer(classReader.nrOfCol());</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <a class="code" href="classVector2d.html">Vector2d<double></a> imgBuffer(nband);<span class="comment">//[band][col]</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> vector<double> sample(2+nband);<span class="comment">//x,y,band values</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <a class="code" href="classVector2d.html">Vector2d<double></a> writeBuffer;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> vector<int> writeBufferClass;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment">// vector<double> writeBufferClass;</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> vector<int> selectedClass;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <a class="code" href="classVector2d.html">Vector2d<double></a> selectedBuffer;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">double</span> oldimgrow=-1;</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> std::cout << <span class="stringliteral">"extracting sample from image..."</span> << std::endl;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> progress=0;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">for</span>(irow=0;irow<classReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">if</span>(irow%down_opt[0])</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> classReader.readData(classBuffer,GDT_Int32,irow);</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// classReader.readData(classBuffer,GDT_Float64,irow);</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordtype">double</span> x,y;<span class="comment">//geo coordinates</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordtype">double</span> iimg,jimg;<span class="comment">//image coordinates in img image</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">for</span>(icol=0;icol<classReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">if</span>(icol%down_opt[0])</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordtype">int</span> theClass=0;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">// double theClass=0;</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">int</span> processClass=-1;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">if</span>(class_opt.empty()){<span class="comment">//process every class</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">if</span>(classBuffer[icol]){</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> processClass=0;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> theClass=classBuffer[icol];</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span>(classBuffer[icol]==class_opt[iclass]){</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> processClass=iclass;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> theClass=class_opt[iclass];</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">if</span>(processClass>=0){</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment">// if(classBuffer[icol]==class_opt[0]){</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">if</span>(geo_opt[0]){</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> classReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> sample[0]=x;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> sample[1]=y;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> std::cout.precision(12);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> std::cout << theClass << <span class="stringliteral">" "</span> << x << <span class="stringliteral">" "</span> << y << std::endl;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">//find col in img</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> imgReader.geo2image(x,y,iimg,jimg);</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> jimg=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(jimg);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> iimg=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg);</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">if</span>(static_cast<int>(iimg)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> iimg=icol;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> jimg=irow;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> sample[0]=iimg;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> sample[1]=jimg;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">if</span>(static_cast<int>(jimg)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(jimg)>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">if</span>(static_cast<int>(jimg)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldimgrow)){</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> assert(imgBuffer.size()==nband);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> imgReader.readData(imgBuffer[iband],GDT_Float64,static_cast<int>(jimg),theBand);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> assert(imgBuffer[iband].size()==imgReader.nrOfCol());</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> vector<int>::const_iterator bndit=bndnodata_opt.begin();</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> vector<double>::const_iterator srcit=srcnodata_opt.begin();</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">while</span>(bndit!=bndnodata_opt.end()&&srcit!=srcnodata_opt.end()){</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">if</span>((*bndit==theBand)&&(*srcit==imgBuffer[iband][<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)])){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> ++bndit;</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> ++srcit;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> }</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> }</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> oldimgrow=jimg;</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">if</span>(valid){</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<imgBuffer.size();++iband){</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">if</span>(imgBuffer[iband].size()!=imgReader.nrOfCol()){</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> std::cout << <span class="stringliteral">"Error in band "</span> << iband << <span class="stringliteral">": "</span> << imgBuffer[iband].size() << <span class="stringliteral">"!="</span> << imgReader.nrOfCol() << std::endl;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> assert(imgBuffer[iband].size()==imgReader.nrOfCol());</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> sample[iband+2]=imgBuffer[iband][<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(iimg)];</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordtype">float</span> theThreshold=(threshold_opt.size()>1)?threshold_opt[processClass]:threshold_opt[0];</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">if</span>(theThreshold>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> p*=100.0;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">if</span>(p>theThreshold)</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> }</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nvalid.size()>processClass){<span class="comment">//absolute value</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">if</span>(nvalid[processClass]>=-theThreshold)</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select any more pixels for this class, go to next column to search for other classes</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> writeBuffer.push_back(sample);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="comment">// writeBufferClass.push_back(class_opt[processClass]);</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> writeBufferClass.push_back(theClass);</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> ++ntotalvalid;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">if</span>(nvalid.size()>processClass)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> ++(nvalid[processClass]);</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> ++ntotalinvalid;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">if</span>(ninvalid.size()>processClass)</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> ++(ninvalid[processClass]);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }<span class="comment">//processClass</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }<span class="comment">//icol</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/classReader.nrOfRow();</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> }<span class="comment">//irow</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">if</span>(writeBuffer.size()>0){</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> assert(ntotalvalid==writeBuffer.size());</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> std::cout << <span class="stringliteral">"creating image sample writer "</span> << output_opt[0] << <span class="stringliteral">" with "</span> << writeBuffer.size() << <span class="stringliteral">" samples ("</span> << ntotalinvalid << <span class="stringliteral">" invalid)"</span> << std::endl;</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> ogrWriter.open(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> ostringstream slayer;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> slayer << <span class="stringliteral">"training data"</span>;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> std::string layername=slayer.str();</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> ogrWriter.createLayer(layername, imgReader.getProjection(), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> std::string fieldname=<span class="stringliteral">"fid"</span>;<span class="comment">//number of the point</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> ogrWriter.createField(fieldname,OFTInteger);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> map<std::string,double> pointAttributes;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="comment">// ogrWriter.createField(label_opt[0],OFTInteger);</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> ogrWriter.createField(label_opt[0],labelType);</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="comment">// ostringstream fs;</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">// if(nband==1)</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="comment">// fs << fieldname_opt[0];</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="comment">// fs << fieldname_opt[0] << theBand;</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="comment">// ogrWriter.createField(fs.str(),fieldType);</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> ogrWriter.createField(fieldname_opt[iband],fieldType);</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> std::cout << <span class="stringliteral">"writing sample to "</span> << output_opt[0] << <span class="stringliteral">"..."</span> << std::endl;</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> progress=0;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<writeBuffer.size();++isample){</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> pointAttributes[label_opt[0]]=writeBufferClass[isample];</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<writeBuffer[0].size()-2;++iband){</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="comment">// ostringstream fs;</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="comment">// if(nband==1)</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="comment">// fs << fieldname_opt[0];</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="comment">// fs << fieldname_opt[0] << theBand;</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment">// pointAttributes[fs.str()]=writeBuffer[isample][iband+2];</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> pointAttributes[fieldname_opt[iband]]=writeBuffer[isample][iband+2];</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> }</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> ogrWriter.addPoint(writeBuffer[isample][0],writeBuffer[isample][1],pointAttributes,fieldname,isample);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(isample+1.0)/writeBuffer.size();</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> }</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> ogrWriter.close();</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> }</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> std::cout << <span class="stringliteral">"No data found for any class "</span> << std::endl;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> }</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> classReader.close();</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> nsample=writeBuffer.size();</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> std::cout << <span class="stringliteral">"total number of samples written: "</span> << nsample << std::endl;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span>(nvalid.size()==class_opt.size()){</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> std::cout << <span class="stringliteral">"class "</span> << class_opt[iclass] << <span class="stringliteral">" has "</span> << nvalid[iclass] << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> }</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> }</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">else</span>{<span class="comment">//vector dataset</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> std::cout << <span class="stringliteral">"creating image sample writer "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrTestWriter;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> ogrWriter.open(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(test_opt.size()){</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> std::cout << <span class="stringliteral">"creating image test writer "</span> << test_opt[0] << std::endl;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> ogrTestWriter.open(test_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> }</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> }</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="comment">//support multiple layers</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordtype">int</span> nlayerRead=sampleReaderOgr.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordtype">int</span> ilayerWrite=0;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> std::cout << <span class="stringliteral">"number of layers: "</span> << nlayerRead << endl;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayerRead;++ilayer){</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> OGRLayer *readLayer=sampleReaderOgr.getLayer(ilayer);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keywordtype">string</span> currentLayername=readLayer->GetName();</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">if</span>(layer_opt.size())</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">if</span>(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> cout << <span class="stringliteral">"processing layer "</span> << currentLayername << endl;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> readLayer->ResetReading();</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> OGRLayer *writeLayer;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> OGRLayer *writeTestLayer;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> std::cout << <span class="stringliteral">"create polygons"</span> << std::endl;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> writeLayer=ogrWriter.createLayer(readLayer->GetName(), imgReader.getProjection(), wkbPolygon, papszOptions);</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> writeTestLayer=ogrTestWriter.createLayer(readLayer->GetName(), imgReader.getProjection(), wkbPolygon, papszOptions);</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> }</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> std::cout << <span class="stringliteral">"create points in layer "</span> << readLayer->GetName() << std::endl;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> writeLayer=ogrWriter.createLayer(readLayer->GetName(), imgReader.getProjection(), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">if</span>(test_opt.size()){</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordtype">char</span> **papszOptions=NULL;</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> writeTestLayer=ogrTestWriter.createLayer(readLayer->GetName(), imgReader.getProjection(), wkbPoint, papszOptions);</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> }</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> std::cout << <span class="stringliteral">"copy fields from layer "</span> << ilayer << std::flush << std::endl;</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> ogrWriter.copyFields(sampleReaderOgr,ilayer,ilayerWrite);</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="keywordflow">if</span>(test_opt.size()){</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> std::cout << <span class="stringliteral">"copy fields test writer"</span> << std::flush << std::endl;</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> ogrTestWriter.copyFields(sampleReaderOgr,ilayer,ilayerWrite);</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> }</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment">// vector<std::string> fieldnames;</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment">// std::cout << "get fields" << std::flush << std::endl;</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="comment">// sampleReaderOgr.getFields(fieldnames);</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="comment">// assert(fieldnames.size()==ogrWriter.getFieldCount(ilayerWrite));</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="comment">// map<std::string,double> pointAttributes;</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">switch</span>(ruleMap[rule_opt[0]]){</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">case</span>(rule::proportion):{<span class="comment">//proportion for each class</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> ostringstream cs;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> cs << class_opt[iclass];</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> ogrWriter.createField(cs.str(),fieldType,ilayerWrite);</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> }</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">case</span>(rule::custom):</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">case</span>(rule::mode):</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> ogrWriter.createField(label_opt[0],fieldType,ilayerWrite);</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> ogrTestWriter.createField(label_opt[0],fieldType,ilayerWrite);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> }</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> }</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> ostringstream fs;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> fs << fieldname_opt[iband];</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> std::cout << <span class="stringliteral">"creating field "</span> << fs.str() << std::endl;</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> ogrWriter.createField(fs.str(),fieldType,ilayerWrite);</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> ogrTestWriter.createField(fs.str(),fieldType,ilayerWrite);</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> }</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> OGRFeature *readFeature;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nfeature=sampleReaderOgr.getFeatureCount();</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> progress=0;</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">while</span>( (readFeature = readLayer->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordtype">bool</span> validFeature=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordtype">bool</span> writeTest=<span class="keyword">false</span>;<span class="comment">//write this feature to test_opt[0] instead of output_opt</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> std::cout << <span class="stringliteral">"reading feature "</span> << readFeature->GetFID() << std::endl;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span>(threshold_opt[0]>0){<span class="comment">//percentual value</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> p*=100.0;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">if</span>(p>threshold_opt[0]){</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> writeTest=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next feature</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> }</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> }</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">else</span>{<span class="comment">//absolute value</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span>(ntotalvalid>=-threshold_opt[0]){</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> writeTest=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select any more pixels, go to next column feature</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> }</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> std::cout << <span class="stringliteral">"processing feature "</span> << readFeature->GetFID() << std::endl;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">//get x and y from readFeature</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordtype">double</span> x,y;</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> OGRGeometry *poGeometry;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> poGeometry = readFeature->GetGeometryRef();</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> assert(poGeometry!=NULL);</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint ){</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">if</span>(!buffer_opt.size()){</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">switch</span>(ruleMap[rule_opt[0]]){</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="keywordflow">case</span>(rule::point):</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">case</span>(rule::centroid):</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> buffer_opt.push_back(1);<span class="comment">//default</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> buffer_opt.push_back(3);<span class="comment">//default</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> }</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> }</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> std::cout << <span class="stringliteral">"boundary: "</span> << buffer_opt[0] << std::endl;</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> OGRPolygon writePolygon;</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> OGRLinearRing writeRing;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> OGRPoint writeCentroidPoint;</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> OGRFeature *writePolygonFeature;</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> OGRFeature *writeCentroidFeature;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> OGRPoint *poPoint = (OGRPoint *) poGeometry;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> writeCentroidPoint=*poPoint;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> x=poPoint->getX();</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> y=poPoint->getY();</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordtype">double</span> i_centre,j_centre;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">if</span>(geo_opt[0])</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> imgReader.geo2image(x,y,i_centre,j_centre);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> i_centre=x;</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> j_centre=y;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> j_centre=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(j_centre);</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> i_centre=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(i_centre);</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordtype">double</span> uli=i_centre-buffer_opt[0]/2;</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordtype">double</span> ulj=j_centre-buffer_opt[0]/2;</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordtype">double</span> lri=i_centre+buffer_opt[0]/2;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordtype">double</span> lrj=j_centre+buffer_opt[0]/2;</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> ulj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ulj);</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> uli=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(uli);</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> lrj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lrj);</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> lri=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lri);</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// if((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment">// uli=i_centre;</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment">// ulj=j_centre;</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="comment">// lri=i_centre;</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment">// lrj=j_centre;</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment">//check if j is out of bounds</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">if</span>(static_cast<int>(ulj)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ulj)>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">//check if j is out of bounds</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordflow">if</span>(static_cast<int>(uli)<0||<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lri)>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> OGRPoint ulPoint,urPoint,llPoint,lrPoint;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordtype">double</span> ulx,uly;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordtype">double</span> urx,ury;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">if</span>(disc_opt[0]){</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordtype">double</span> gt[6];<span class="comment">// { 444720, 30, 0, 3751320, 0, -30 };</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordtype">double</span> radius=buffer_opt[0]/2.0*sqrt(imgReader.getDeltaX()*imgReader.getDeltaY());</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nstep = 25;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nstep;++i){</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> OGRPoint aPoint;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> aPoint.setX(x+imgReader.getDeltaX()/2.0+radius*cos(2*PI*i/nstep));</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> aPoint.setY(y-imgReader.getDeltaY()/2.0+radius*sin(2*PI*i/nstep));</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> writeRing.addPoint(&aPoint);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> }</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> writePolygon.addRing(&writeRing);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> writePolygon.closeRings();</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordtype">double</span> llx,lly;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordtype">double</span> lrx,lry;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> imgReader.image2geo(uli,ulj,ulx,uly);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> imgReader.image2geo(lri,lrj,lrx,lry);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> ulPoint.setX(ulx-imgReader.getDeltaX()/2.0);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> ulPoint.setY(uly+imgReader.getDeltaY()/2.0);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> lrPoint.setX(lrx+imgReader.getDeltaX()/2.0);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> lrPoint.setY(lry-imgReader.getDeltaY()/2.0);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> urPoint.setX(lrx+imgReader.getDeltaX()/2.0);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> urPoint.setY(uly+imgReader.getDeltaY()/2.0);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> llPoint.setX(ulx-imgReader.getDeltaX()/2.0);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> llPoint.setY(lry-imgReader.getDeltaY()/2.0);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> writeRing.addPoint(&ulPoint);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> writeRing.addPoint(&urPoint);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> writeRing.addPoint(&lrPoint);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> writeRing.addPoint(&llPoint);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> writePolygon.addRing(&writeRing);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> writePolygon.closeRings();</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> }</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> }</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordflow">if</span>((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> uli=i_centre;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> ulj=j_centre;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> lri=i_centre;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> lrj=j_centre;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> }</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordtype">int</span> nPointWindow=0;<span class="comment">//similar to nPointPolygon for polygons</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> writePolygonFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> writePolygonFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> writeCentroidFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> writeCentroidFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <a class="code" href="classVector2d.html">Vector2d<double></a> windowValues;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> vector<double> windowClassValues;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> </div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> windowClassValues.resize(class_opt.size());</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">//initialize</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> windowClassValues[iclass]=0;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> windowValues.resize(nband);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> vector< Vector2d<double> > readValues(nband);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> assert(uli>=0);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> assert(uli<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> assert(lri>=0);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> assert(lri<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> assert(ulj>=0);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> assert(ulj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> assert(lrj>=0);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> assert(lrj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> imgReader.readDataBlock(readValues[iband],GDT_Float64,uli,lri,ulj,lrj,theBand);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> }</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=ulj;j<=lrj;++j){</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=uli;i<=lri;++i){</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">//check if within raster image</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordflow">if</span>(i<0||i>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordflow">if</span>(j<0||j>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment">//no need to check if point is on surface</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordtype">double</span> theX=0;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="keywordtype">double</span> theY=0;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> imgReader.image2geo(i,j,theX,theY);</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> thePoint.setX(theX);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> thePoint.setY(theY);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="keywordflow">if</span>(disc_opt[0]&&buffer_opt[0]>1){</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="keywordtype">double</span> radius=buffer_opt[0]/2.0*sqrt(imgReader.getDeltaX()*imgReader.getDeltaY());</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">if</span>((theX-x)*(theX-x)+(theY-y)*(theY-y)>radius*radius)</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> vband=0;vband<bndnodata_opt.size();++vband){</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordtype">double</span> value=((readValues[bndnodata_opt[vband]])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordflow">if</span>(value==srcnodata_opt[vband]){</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> }</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> }</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> </div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">if</span>(!valid)</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> validFeature=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment">// writeRing.addPoint(&thePoint);//already done</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> </div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> ++nPointWindow;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> OGRFeature *writePointFeature;</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean, stdev, median, sum or centroid (only create point at centroid)</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> writePointFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">//Geometry of readFeature and writePointFeature are both wkbPoint</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment">//attributes AND geometry are copied with SetFrom</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment">// writePointFeature->SetGeometry(&thePoint);</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordflow">if</span>(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> assert(wkbFlatten(writePointFeature->GetGeometryRef()->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="comment">// updateGeometry = writePointFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">// OGRPoint *poPoint = (OGRPoint *) updateGeometry;</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePointFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> }</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> }</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordtype">short</span> value=((readValues[0])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">if</span>(value==class_opt[iclass])</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> windowClassValues[iclass]+=1;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> }</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> assert(j-ulj>=0);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> assert(j-ulj<readValues[iband].size());</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> assert(i-uli>=0);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> assert(i-uli<((readValues[iband])[j-ulj]).size());</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordtype">double</span> value=((readValues[iband])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">// imgReader.readData(value,GDT_Float64,i,j,theBand);</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> std::cout << <span class="stringliteral">": "</span> << value << std::endl;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> windowValues[iband].push_back(value);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> }</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[iband] << <span class="stringliteral">" to "</span> << value << std::endl;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),value);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),type2string<double>(value).c_str());</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> }</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> }</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> exit(1);</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> }</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> }<span class="comment">//else</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> }<span class="comment">//iband</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> }<span class="comment">//else (class_opt.size())</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean or median value (only at centroid)</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">//write feature</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> std::cout << <span class="stringliteral">"creating point feature"</span> << std::endl;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> std::string errorString=<span class="stringliteral">"Failed to create feature in test ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> }</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> }</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> std::string errorString=<span class="stringliteral">"Failed to create feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> }</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">//destroy feature</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> OGRFeature::DestroyFeature( writePointFeature );</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> std::cout << <span class="stringliteral">"ntotalvalid(2): "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> }</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> }</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="comment">//do not create if no points found within polygon</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">if</span>(!nPointWindow){</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> cout << <span class="stringliteral">"no points found in window, continuing"</span> << endl;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> }</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">//add ring to polygon</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="comment">// writePolygon.addRing(&writeRing);//already done</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment">// writePolygon.closeRings();//already done</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment">//write geometry of writePolygon</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment">// writePolygonFeature->SetGeometry(&writePolygon);</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordflow">if</span>(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> writePolygonFeature->SetGeometry(&writePolygon);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> assert(wkbFlatten(writePolygonFeature->GetGeometryRef()->getGeometryType()) == wkbPolygon);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> </div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> std::cout << <span class="stringliteral">"copying new fields write polygon "</span> << std::endl;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePolygonFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment">//write polygon feature</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">else</span>{<span class="comment">//write value of polygon to centroid point</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment">//Geometry of readFeature and writeCentroidFeature are both wkbPoint</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment">//attributes AND geometry are copied with SetFrom</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="comment">// writeCentroidFeature->SetGeometry(&writeCentroidPoint);</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="keywordflow">if</span>(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> assert(wkbFlatten(writeCentroidFeature->GetGeometryRef()->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="comment">// updateGeometry = writeCentroidFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment">// assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> std::cout << <span class="stringliteral">"write feature has "</span> << writeCentroidFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> }</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="keywordflow">if</span>(class_opt.empty()){</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//value at centroid of polygon</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> std::cout << <span class="stringliteral">"number of points in window: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<windowValues.size();++index){</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">if</span>(windowValues[index].size()!=1){</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> cerr << <span class="stringliteral">"Error: windowValues[index].size()="</span> << windowValues[index].size() << endl;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> assert(windowValues[index].size()==1);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> }</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordtype">double</span> theValue=windowValues[index].back();</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> </div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> std::cout << <span class="stringliteral">"number of points in window: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[index] : index;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> }</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> }</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> exit(1);</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> }</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> }</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="keywordflow">else</span>{<span class="comment">//ruleMap[rule_opt[0]] is not rule::point</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="keywordtype">double</span> theValue=0;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<windowValues.size();++index){</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mean)</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> theValue=stat.mean(windowValues[index]);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::stdev)</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> theValue=sqrt(stat.var(windowValues[index]));</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::median)</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> theValue=stat.median(windowValues[index]);</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::percentile)</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> theValue=stat.percentile(windowValues[index],windowValues[index].begin(),windowValues[index].end(),percentile_opt[0]);</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::sum)</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> theValue=stat.sum(windowValues[index]);</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::max)</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> theValue=stat.mymax(windowValues[index]);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::min)</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> theValue=stat.mymin(windowValues[index]);</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::centroid){</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> assert(nPointWindow<=1);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> assert(nPointWindow==windowValues[index].size());</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> theValue=windowValues[index].back();</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> }</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> std::string errorString=<span class="stringliteral">"rule not supported"</span>;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> }</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> exit(1);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">else</span>{<span class="comment">//class_opt is set</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::proportion){</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> stat.normalize_pct(windowClassValues);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<windowClassValues.size();++index){</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="keywordtype">double</span> theValue=windowClassValues[index];</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> ostringstream fs;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> fs << class_opt[index];</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> writePolygonFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> writeCentroidFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> }</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> }</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::custom){</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> assert(polygon_opt[0]);<span class="comment">//not implemented for points</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> stat.normalize_pct(windowClassValues);</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> assert(windowClassValues.size()==2);<span class="comment">//11:broadleaved, 12:coniferous</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">if</span>(windowClassValues[0]>=75)<span class="comment">//broadleaved</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(11));</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(windowClassValues[1]>=75)<span class="comment">//coniferous</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(12));</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(windowClassValues[0]>25&&windowClassValues[1]>25)<span class="comment">//mixed</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(13));</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> std::cout << <span class="stringliteral">"No valid value in windowClassValues..."</span> << std::endl;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<windowClassValues.size();++index){</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="keywordtype">double</span> theValue=windowClassValues[index];</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> std::cout << theValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> std::cout << std::endl;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> }</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(20));</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> }</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> }</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mode){</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">//maximum votes in polygon</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> std::cout << <span class="stringliteral">"number of points in window: "</span> << nPointWindow << std::endl;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="comment">//search for class with maximum votes</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordtype">int</span> maxClass=stat.mymin(class_opt);</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> vector<double>::iterator maxit;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> maxit=stat.mymax(windowClassValues,windowClassValues.begin(),windowClassValues.end());</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordtype">int</span> maxIndex=distance(windowClassValues.begin(),maxit);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> maxClass=class_opt[maxIndex];</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> std::cout << <span class="stringliteral">"maxClass: "</span> << maxClass << std::endl;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> writePolygonFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> writeCentroidFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> }</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> }</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> std::cout << <span class="stringliteral">"creating polygon feature"</span> << std::endl;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> }</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> }</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> OGRFeature::DestroyFeature( writePolygonFeature );</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> std::cout << <span class="stringliteral">"ntotalvalid(1): "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> }</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> std::cout << <span class="stringliteral">"creating point feature in centroid"</span> << std::endl;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> }</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> }</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> assert(validFeature);</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> }</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> }</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> OGRFeature::DestroyFeature( writeCentroidFeature );</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> std::cout << <span class="stringliteral">"ntotalvalid: "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> }</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> }</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> }<span class="comment">//if wkbPoint</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> OGRPolygon readPolygon = *((OGRPolygon *) poGeometry);</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> OGRPolygon writePolygon;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> OGRLinearRing writeRing;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> OGRPoint writeCentroidPoint;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> OGRFeature *writePolygonFeature;</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> OGRFeature *writeCentroidFeature;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> readPolygon.closeRings();</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> </div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> std::cout << <span class="stringliteral">"get point on polygon"</span> << std::endl;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::centroid)</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> readPolygon.Centroid(&writeCentroidPoint);</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> readPolygon.PointOnSurface(&writeCentroidPoint);</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="keywordflow">if</span>((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> ulx=writeCentroidPoint.getX();</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> uly=writeCentroidPoint.getY();</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> lrx=ulx;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> lry=uly;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> }</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">//get envelope</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> std::cout << <span class="stringliteral">"reading envelope for polygon "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> OGREnvelope* psEnvelope=<span class="keyword">new</span> OGREnvelope();</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> readPolygon.getEnvelope(psEnvelope);</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> ulx=psEnvelope->MinX;</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> uly=psEnvelope->MaxY;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> lrx=psEnvelope->MaxX;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> lry=psEnvelope->MinY;</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="keyword">delete</span> psEnvelope;</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> }</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="keywordflow">if</span>(geo_opt[0]){</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> imgReader.geo2image(ulx,uly,uli,ulj);</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> imgReader.geo2image(lrx,lry,lri,lrj);</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> }</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> uli=ulx;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> ulj=uly;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> lri=lrx;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> lrj=lry;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> }</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> ulj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ulj);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> uli=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(uli);</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> lrj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lrj);</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> lri=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lri);</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="comment">//iterate through all pixels</span></div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> std::cout << <span class="stringliteral">"bounding box for polygon feature "</span> << ifeature << <span class="stringliteral">": "</span> << uli << <span class="stringliteral">" "</span> << ulj << <span class="stringliteral">" "</span> << lri << <span class="stringliteral">" "</span> << lrj & [...]
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="keywordflow">if</span>(uli<0)</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> uli=0;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="keywordflow">if</span>(lri<0)</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> lri=0;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="keywordflow">if</span>(uli>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> uli=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="keywordflow">if</span>(lri>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> lri=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="keywordflow">if</span>(ulj<0)</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> ulj=0;</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="keywordflow">if</span>(lrj<0)</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> lrj=0;</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="keywordflow">if</span>(ulj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> ulj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> <span class="keywordflow">if</span>(lrj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> lrj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="comment">// if(uli<0||lri>=imgReader.nrOfCol()||ulj<0||lrj>=imgReader.nrOfRow())</span></div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordtype">int</span> nPointPolygon=0;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> writePolygonFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> writePolygonFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> }</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> writeCentroidFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> writeCentroidFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="comment">// vector<double> polyValues;</span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <a class="code" href="classVector2d.html">Vector2d<double></a> polyValues;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> vector<double> polyClassValues;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> polyClassValues.resize(class_opt.size());</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">//initialize</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> polyClassValues[iclass]=0;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> }</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> polyValues.resize(nband);</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> vector< Vector2d<double> > readValues(nband);</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> assert(uli>=0);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> assert(uli<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> assert(lri>=0);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> assert(lri<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> assert(ulj>=0);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> assert(ulj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> assert(lrj>=0);</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> assert(lrj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> imgReader.readDataBlock(readValues[iband],GDT_Float64,uli,lri,ulj,lrj,theBand);</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> }</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=ulj;j<=lrj;++j){</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=uli;i<=lri;++i){</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">//check if within raster image</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="keywordflow">if</span>(i<0||i>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="keywordflow">if</span>(j<0||j>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment">//check if point is on surface</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="keywordtype">double</span> theX=0;</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> <span class="keywordtype">double</span> theY=0;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> imgReader.image2geo(i,j,theX,theY);</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> thePoint.setX(theX);</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> thePoint.setY(theY);</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> </div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]!=rule::centroid&&!readPolygon.Contains(&thePoint))</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> </div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> vband=0;vband<bndnodata_opt.size();++vband){</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="keywordtype">double</span> value=((readValues[bndnodata_opt[vband]])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordflow">if</span>(value==srcnodata_opt[vband]){</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> }</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> }</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> }</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> </div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="keywordflow">if</span>(!valid)</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> validFeature=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> </div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> writeRing.addPoint(&thePoint);<span class="comment">//todo: check if I need to add all interior points to ring or do I need to check if point is on ring first?</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment">// if(writeRing.isPointOnRingBoundary(&thePoint))</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment">// writeRing.addPoint(&thePoint);</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> std::cout << <span class="stringliteral">"point is on surface:"</span> << thePoint.getX() << <span class="stringliteral">","</span> << thePoint.getY() << std::endl;</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> ++nPointPolygon;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="keywordflow">if</span>(polythreshold_opt.size())</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="keywordflow">if</span>(nPointPolygon>polythreshold_opt[0])</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment">// throw(nPointPolygon);</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> OGRFeature *writePointFeature;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean, stdev, median, sum or centroid (only create point at centroid)</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> writePointFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="keywordflow">if</span>(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> std::cout << <span class="stringliteral">"set geometry as point "</span> << std::endl;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> writePointFeature->SetGeometry(&thePoint);</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> assert(wkbFlatten(writePointFeature->GetGeometryRef()->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="comment">// updateGeometry = writePointFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="comment">// OGRPoint *poPoint = (OGRPoint *) updateGeometry;</span></div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePointFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> }</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> }</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="keywordtype">short</span> value=((readValues[0])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="keywordflow">if</span>(value==class_opt[iclass])</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> polyClassValues[iclass]+=1;</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> }</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> }</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> assert(j-ulj>=0);</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> assert(j-ulj<readValues[iband].size());</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> assert(i-uli>=0);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> assert(i-uli<((readValues[iband])[j-ulj]).size());</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="keywordtype">double</span> value=((readValues[iband])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment">// imgReader.readData(value,GDT_Float64,i,j,theBand);</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> std::cout << <span class="stringliteral">": "</span> << value << std::endl;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point)</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> polyValues[iband].push_back(value);</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[iband] << <span class="stringliteral">" to "</span> << value << std::endl;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),value);</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),type2string<double>(value).c_str());</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> assert(0);</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> }</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> }<span class="comment">//else</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> }<span class="comment">//iband</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> }<span class="comment">//else (class_opt.size())</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean or median value (only at centroid)</span></div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment">//write feature</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> std::cout << <span class="stringliteral">"creating point feature"</span> << std::endl;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> std::string errorString=<span class="stringliteral">"Failed to create feature in test ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> }</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> }</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> std::string errorString=<span class="stringliteral">"Failed to create feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> }</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> }</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">//destroy feature</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> OGRFeature::DestroyFeature( writePointFeature );</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> std::cout << <span class="stringliteral">"ntotalvalid(2): "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> }</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> }</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> }</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> }</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment">//do not create if no points found within polygon</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="keywordflow">if</span>(!nPointPolygon){</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> cout << <span class="stringliteral">"no points found in polygon, continuing"</span> << endl;</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> }</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">//add ring to polygon</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> writePolygon.addRing(&writeRing);</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> writePolygon.closeRings();</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment">//write geometry of writePolygon</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">//writePolygonFeature and readFeature are both of type wkbPolygon</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="comment">// writePolygonFeature->SetGeometry(&writePolygon);</span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="keywordflow">if</span>(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> std::cout << <span class="stringliteral">"copying new fields write polygon "</span> << std::endl;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePolygonFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="comment">//write polygon feature</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> }</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> <span class="keywordflow">else</span>{<span class="comment">//write value of polygon to centroid point</span></div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">//writeCentroidFeature->SetGeometry(&writeCentroidPoint);</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="keywordflow">if</span>(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> writeCentroidFeature->SetGeometry(&writeCentroidPoint);</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> assert(wkbFlatten(writeCentroidFeature->GetGeometryRef()->getGeometryType()) == wkbPoint );</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="comment">// updateGeometry = writeCentroidFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment">// assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> std::cout << <span class="stringliteral">"write feature has "</span> << writeCentroidFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="keywordflow">if</span>(class_opt.empty()){</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//value at centroid of polygon</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyValues.size();++index){</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> assert(polyValues[index].size()==1);</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="keywordtype">double</span> theValue=polyValues[index].back();</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> </div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[index] : index;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> }</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> }</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> exit(1);</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> }</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> }</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> }</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="keywordflow">else</span>{<span class="comment">//ruleMap[rule_opt[0]] is not rule::point</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> <span class="keywordtype">double</span> theValue=0;</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyValues.size();++index){</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mean)</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> theValue=stat.mean(polyValues[index]);</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::stdev)</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> theValue=sqrt(stat.var(polyValues[index]));</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::median)</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> theValue=stat.median(polyValues[index]);</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::percentile)</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> theValue=stat.percentile(polyValues[index],polyValues[index].begin(),polyValues[index].end(),percentile_opt[0]);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::sum)</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> theValue=stat.sum(polyValues[index]);</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::max)</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> theValue=stat.mymax(polyValues[index]);</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::min)</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> theValue=stat.mymin(polyValues[index]);</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::centroid){</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> assert(nPointPolygon<=1);</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> assert(nPointPolygon==polyValues[index].size());</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> theValue=polyValues[index].back();</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> }</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> std::string errorString=<span class="stringliteral">"rule not supported"</span>;</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> }</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> exit(1);</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> }</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> }</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> }</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> }</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="keywordflow">else</span>{<span class="comment">//class_opt is set</span></div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::proportion){</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> stat.normalize_pct(polyClassValues);</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyClassValues.size();++index){</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="keywordtype">double</span> theValue=polyClassValues[index];</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> ostringstream fs;</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> fs << class_opt[index];</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> writePolygonFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> writeCentroidFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> }</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> }</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::custom){</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> assert(polygon_opt[0]);<span class="comment">//not implemented for points</span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> stat.normalize_pct(polyClassValues);</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> assert(polyClassValues.size()==2);<span class="comment">//11:broadleaved, 12:coniferous</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="keywordflow">if</span>(polyClassValues[0]>=75)<span class="comment">//broadleaved</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(11));</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(polyClassValues[1]>=75)<span class="comment">//coniferous</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(12));</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(polyClassValues[0]>25&&polyClassValues[1]>25)<span class="comment">//mixed</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(13));</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> std::cout << <span class="stringliteral">"No valid value in polyClassValues..."</span> << std::endl;</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyClassValues.size();++index){</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="keywordtype">double</span> theValue=polyClassValues[index];</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> std::cout << theValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> }</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> std::cout << std::endl;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> }</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(20));</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> }</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mode){</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="comment">//maximum votes in polygon</span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="comment">//search for class with maximum votes</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> <span class="keywordtype">int</span> maxClass=stat.mymin(class_opt);</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> vector<double>::iterator maxit;</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> maxit=stat.mymax(polyClassValues,polyClassValues.begin(),polyClassValues.end());</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> <span class="keywordtype">int</span> maxIndex=distance(polyClassValues.begin(),maxit);</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> maxClass=class_opt[maxIndex];</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> std::cout << <span class="stringliteral">"maxClass: "</span> << maxClass << std::endl;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> writePolygonFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> writeCentroidFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> }</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> }</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> std::cout << <span class="stringliteral">"creating polygon feature"</span> << std::endl;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> }</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> }</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> }</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> }</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> OGRFeature::DestroyFeature( writePolygonFeature );</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> std::cout << <span class="stringliteral">"ntotalvalid(1): "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> }</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> std::cout << <span class="stringliteral">"creating point feature in centroid"</span> << std::endl;</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> }</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> }</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> assert(validFeature);</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> }</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> }</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> OGRFeature::DestroyFeature( writeCentroidFeature );</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> ++ntotalvalid;</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> std::cout << <span class="stringliteral">"ntotalvalid: "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> }</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> }</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> }</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wkbFlatten(poGeometry->getGeometryType()) == wkbMultiPolygon){<span class="comment">//todo: try to use virtual OGRGeometry instead of OGRMultiPolygon and OGRPolygon</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> OGRMultiPolygon readPolygon = *((OGRMultiPolygon *) poGeometry);</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> OGRPolygon writePolygon;</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> OGRLinearRing writeRing;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> OGRPoint writeCentroidPoint;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> OGRFeature *writePolygonFeature;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> OGRFeature *writeCentroidFeature;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> </div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> readPolygon.closeRings();</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> std::cout << <span class="stringliteral">"get centroid point from polygon"</span> << std::endl;</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> </div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> readPolygon.Centroid(&writeCentroidPoint);</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> </div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="keywordflow">if</span>((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> ulx=writeCentroidPoint.getX();</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> uly=writeCentroidPoint.getY();</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> lrx=ulx;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> lry=uly;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> }</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="comment">//get envelope</span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> std::cout << <span class="stringliteral">"reading envelope for polygon "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> OGREnvelope* psEnvelope=<span class="keyword">new</span> OGREnvelope();</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> readPolygon.getEnvelope(psEnvelope);</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> ulx=psEnvelope->MinX;</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> uly=psEnvelope->MaxY;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> lrx=psEnvelope->MaxX;</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> lry=psEnvelope->MinY;</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="keyword">delete</span> psEnvelope;</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> }</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">// if(geo_opt[0]){</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> imgReader.geo2image(ulx,uly,uli,ulj);</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> imgReader.geo2image(lrx,lry,lri,lrj);</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="comment">// uli=ulx;</span></div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> <span class="comment">// ulj=uly;</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="comment">// lri=lrx;</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="comment">// lrj=lry;</span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="comment">//nearest neighbour</span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> ulj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ulj);</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> uli=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(uli);</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> lrj=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lrj);</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> lri=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(lri);</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="comment">//iterate through all pixels</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> std::cout << <span class="stringliteral">"bounding box for multipologon feature "</span> << ifeature << <span class="stringliteral">": "</span> << uli << <span class="stringliteral">" "</span> << ulj << <span class="stringliteral">" "</span> << lri << <span class="stringliteral">" "</span> << [...]
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> </div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="keywordflow">if</span>(uli<0)</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> uli=0;</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="keywordflow">if</span>(lri<0)</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> lri=0;</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="keywordflow">if</span>(uli>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> uli=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="keywordflow">if</span>(lri>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> lri=imgReader.nrOfCol()-1;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="keywordflow">if</span>(ulj<0)</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> ulj=0;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="keywordflow">if</span>(lrj<0)</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> lrj=0;</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="keywordflow">if</span>(ulj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> ulj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> <span class="keywordflow">if</span>(lrj>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> lrj=imgReader.nrOfRow()-1;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment">// if(uli<0||lri>=imgReader.nrOfCol()||ulj<0||lrj>=imgReader.nrOfRow())</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="keywordtype">int</span> nPointPolygon=0;</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> writePolygonFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> writePolygonFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> }</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> writeCentroidFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> writeCentroidFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> }</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="comment">// vector<double> polyValues;</span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <a class="code" href="classVector2d.html">Vector2d<double></a> polyValues;</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> vector<double> polyClassValues;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> </div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> polyClassValues.resize(class_opt.size());</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="comment">//initialize</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> polyClassValues[iclass]=0;</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> }</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> polyValues.resize(nband);</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> vector< Vector2d<double> > readValues(nband);</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[iband] : iband;</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> assert(uli>=0);</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> assert(uli<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> assert(lri>=0);</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> assert(lri<imgReader.nrOfCol()); </div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> assert(ulj>=0);</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> assert(ulj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> assert(lrj>=0);</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> assert(lrj<imgReader.nrOfRow()); </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> imgReader.readDataBlock(readValues[iband],GDT_Float64,uli,lri,ulj,lrj,theBand);</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> }</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=ulj;j<=lrj;++j){</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=uli;i<=lri;++i){</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="comment">//check if within raster image</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="keywordflow">if</span>(i<0||i>=imgReader.nrOfCol())</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <span class="keywordflow">if</span>(j<0||j>=imgReader.nrOfRow())</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <span class="comment">//check if point is on surface</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> <span class="keywordtype">double</span> theX=0;</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> <span class="keywordtype">double</span> theY=0;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> imgReader.image2geo(i,j,theX,theY);</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> thePoint.setX(theX);</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> thePoint.setY(theY);</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> </div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]!=rule::centroid&&!readPolygon.Contains(&thePoint))</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> </div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> </div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> <span class="keywordflow">if</span>(srcnodata_opt.size()){</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> vband=0;vband<bndnodata_opt.size();++vband){</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <span class="keywordtype">double</span> value=((readValues[bndnodata_opt[vband]])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="keywordflow">if</span>(value==srcnodata_opt[vband]){</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> }</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> }</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> }</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> </div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="keywordflow">if</span>(!valid)</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> validFeature=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> writeRing.addPoint(&thePoint);</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="comment">// if(writeRing.isPointOnRingBoundary(&thePoint))</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> <span class="comment">// writeRing.addPoint(&thePoint);</span></div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> std::cout << <span class="stringliteral">"point is on surface:"</span> << thePoint.getX() << <span class="stringliteral">","</span> << thePoint.getY() << std::endl;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> ++nPointPolygon;</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> </div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="keywordflow">if</span>(polythreshold_opt.size())</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="keywordflow">if</span>(nPointPolygon>polythreshold_opt[0])</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="comment">// throw(nPointPolygon);</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> OGRFeature *writePointFeature;</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean, stdev, median or sum (only create point at centroid)</span></div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> <span class="keywordflow">if</span>(writeTest)</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> writePointFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> writePointFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> <span class="comment">// writePointFeature->SetGeometry(&thePoint);</span></div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> <span class="keywordflow">if</span>(writePointFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> writePointFeature->SetGeometry(&thePoint);</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> assert(wkbFlatten(writePointFeature->GetGeometryRef()->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> <span class="comment">// updateGeometry = writePointFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> <span class="comment">// OGRPoint *poPoint = (OGRPoint *) updateGeometry;</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePointFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> }</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> }</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="keywordtype">short</span> value=((readValues[0])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="keywordflow">if</span>(value==class_opt[iclass])</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> polyClassValues[iclass]+=1;</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> }</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> }</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> assert(j-ulj>=0);</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> assert(j-ulj<readValues[iband].size());</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> assert(i-uli>=0);</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> assert(i-uli<((readValues[iband])[j-ulj]).size());</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> <span class="keywordtype">double</span> value=((readValues[iband])[j-ulj])[i-uli];</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> <span class="comment">// imgReader.readData(value,GDT_Float64,i,j,theBand);</span></div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> std::cout << <span class="stringliteral">": "</span> << value << std::endl;</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point)</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> polyValues[iband].push_back(value);</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[iband] << <span class="stringliteral">" to "</span> << value << std::endl;</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),value);</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> writePointFeature->SetField(fieldname_opt[iband].c_str(),type2string<double>(value).c_str());</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> <span class="comment">// case OFTRealList:{</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> <span class="comment">// int fieldIndex=writePointFeature->GetFieldIndex(fieldname_opt[iband].c_str());</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> <span class="comment">// int nCount;</span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="comment">// const double *theList;</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="comment">// theList=writePointFeature->GetFieldAsDoubleList(fieldIndex,&nCount);</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="comment">// vector<double> vectorList(nCount+1);</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> <span class="comment">// for(int index=0;index<nCount;++index)</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="comment">// vectorList[nCount]=value;</span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="comment">// writePointFeature->SetField(fieldIndex,vectorList.size(),&(vectorList[0]));</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> assert(0);</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> }</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> }<span class="comment">//else</span></div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> }<span class="comment">//iband</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> }<span class="comment">//else (class_opt.size())</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="keywordflow">if</span>(!polygon_opt[0]){</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//do not create in case of mean, stdev or median value (only at centroid)</span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="comment">//write feature</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> std::cout << <span class="stringliteral">"creating point feature"</span> << std::endl;</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> std::string errorString=<span class="stringliteral">"Failed to create feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> }</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> }</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePointFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> std::string errorString=<span class="stringliteral">"Failed to create feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> }</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> }</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="comment">//destroy feature</span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> OGRFeature::DestroyFeature( writePointFeature );</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> }</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> }</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="comment">// ++isample;</span></div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> ++ntotalvalid;</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> std::cout << <span class="stringliteral">"ntotalvalid: "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> }</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> }</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="keywordflow">if</span>(!validFeature)</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="keywordflow">if</span>(polygon_opt[0]||ruleMap[rule_opt[0]]!=rule::point){</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="comment">//do not create if no points found within polygon</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="keywordflow">if</span>(!nPointPolygon)</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> <span class="comment">//add ring to polygon</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> writePolygon.addRing(&writeRing);</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> writePolygon.closeRings();</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> <span class="comment">//write geometry of writePolygon</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="comment">//writePolygon and readFeature are from geometry type wkbMultiPolygon</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> <span class="comment">// writePolygonFeature->SetGeometry(&writePolygon);</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="keywordflow">if</span>(writePolygonFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> assert(writePolygonFeature->GetGeometryRef()->getGeometryType()==wkbMultiPolygon);</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> std::cout << <span class="stringliteral">"copying new fields write polygon "</span> << std::endl;</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> std::cout << <span class="stringliteral">"write feature has "</span> << writePolygonFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment">//write polygon feature</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> }</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="keywordflow">else</span>{<span class="comment">//write band information of polygon to centroid point</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment">//create feature</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> std::cout << <span class="stringliteral">"copying fields from polygons "</span> << std::endl;</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="comment">// writeCentroidFeature->SetGeometry(&writeCentroidPoint);</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="keywordflow">if</span>(writeCentroidFeature->SetFrom(readFeature)!= OGRERR_NONE)</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> cerr << <span class="stringliteral">"writing feature failed"</span> << std::endl;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> writeCentroidFeature->SetGeometry(&writeCentroidPoint);</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> assert(wkbFlatten(writeCentroidFeature->GetGeometryRef()->getGeometryType()) == wkbPoint);</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> <span class="comment">// OGRGeometry *updateGeometry;</span></div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> <span class="comment">// updateGeometry = writeCentroidFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="comment">// assert(wkbFlatten(updateGeometry->getGeometryType()) == wkbPoint );</span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> std::cout << <span class="stringliteral">"write feature has "</span> << writeCentroidFeature->GetFieldCount() << <span class="stringliteral">" fields"</span> << std::endl;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> }</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="keywordflow">if</span>(class_opt.empty()){</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::point){<span class="comment">//value at centroid of polygon</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyValues.size();++index){</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> assert(polyValues[index].size()==1);</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="keywordtype">double</span> theValue=polyValues[index].back();</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="keywordtype">int</span> theBand=(band_opt.size()) ? band_opt[index] : index;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> }</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> }</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> exit(1);</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> }</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> }</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> }</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <span class="keywordflow">else</span>{<span class="comment">//ruleMap[rule_opt[0]] is not rule::point</span></div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="keywordtype">double</span> theValue=0;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyValues.size();++index){</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mean)</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> theValue=stat.mean(polyValues[index]);</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::stdev)</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> theValue=sqrt(stat.var(polyValues[index]));</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::median)</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> theValue=stat.median(polyValues[index]);</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::percentile)</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> theValue=stat.percentile(polyValues[index],polyValues[index].begin(),polyValues[index].end(),percentile_opt[0]);</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::sum)</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> theValue=stat.sum(polyValues[index]);</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::max)</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> theValue=stat.mymax(polyValues[index]);</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::min)</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> theValue=stat.mymin(polyValues[index]);</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::centroid){</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> assert(nPointPolygon<=1);</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> assert(nPointPolygon==polyValues[index].size());</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> theValue=polyValues[index].back();</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> }</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> std::string errorString=<span class="stringliteral">"rule not supported"</span>;</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> std::cout << <span class="stringliteral">"set field "</span> << fieldname_opt[index] << <span class="stringliteral">" to "</span> << theValue << std::endl;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="keywordflow">switch</span>( fieldType ){</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="keywordflow">case</span> OFTInteger:</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="keywordflow">case</span> OFTReal:</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),theValue);</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="keywordflow">case</span> OFTString:</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> writePolygonFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> writeCentroidFeature->SetField(fieldname_opt[index].c_str(),type2string<double>(theValue).c_str());</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="keywordflow">default</span>:<span class="comment">//not supported</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> std::string errorString=<span class="stringliteral">"field type not supported"</span>;</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> }</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> }</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> exit(1);</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> }</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> }</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> }</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="keywordflow">else</span>{<span class="comment">//class_opt is set</span></div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::proportion){</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> stat.normalize_pct(polyClassValues);</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyClassValues.size();++index){</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="keywordtype">double</span> theValue=polyClassValues[index];</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> ostringstream fs;</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> fs << class_opt[index];</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> writePolygonFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> writeCentroidFeature->SetField(fs.str().c_str(),<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(theValue));</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> }</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> }</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::custom){</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> assert(polygon_opt[0]);<span class="comment">//not implemented for points</span></div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> stat.normalize_pct(polyClassValues);</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> assert(polyClassValues.size()==2);<span class="comment">//11:broadleaved, 12:coniferous</span></div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> <span class="keywordflow">if</span>(polyClassValues[0]>=75)<span class="comment">//broadleaved</span></div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(11));</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(polyClassValues[1]>=75)<span class="comment">//coniferous</span></div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(12));</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(polyClassValues[0]>25&&polyClassValues[1]>25)<span class="comment">//mixed</span></div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(13));</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> std::cout << <span class="stringliteral">"No valid value in polyClassValues..."</span> << std::endl;</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<polyClassValues.size();++index){</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="keywordtype">double</span> theValue=polyClassValues[index];</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> std::cout << theValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> }</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> std::cout << std::endl;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> }</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> writePolygonFeature->SetField(label_opt[0].c_str(),static_cast<int>(20));</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> }</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> }</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ruleMap[rule_opt[0]]==rule::mode){</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> <span class="comment">//maximum votes in polygon</span></div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> std::cout << <span class="stringliteral">"number of points in polygon: "</span> << nPointPolygon << std::endl;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> <span class="comment">//search for class with maximum votes</span></div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> <span class="keywordtype">int</span> maxClass=stat.mymin(class_opt);</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> vector<double>::iterator maxit;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> maxit=stat.mymax(polyClassValues,polyClassValues.begin(),polyClassValues.end());</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> <span class="keywordtype">int</span> maxIndex=distance(polyClassValues.begin(),maxit);</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> maxClass=class_opt[maxIndex];</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="keywordflow">if</span>(verbose_opt[0]>0)</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> std::cout << <span class="stringliteral">"maxClass: "</span> << maxClass << std::endl;</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> <span class="keywordflow">if</span>(polygon_opt[0])</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> writePolygonFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> writeCentroidFeature->SetField(label_opt[0].c_str(),maxClass);</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> }</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> }</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> </div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="keywordflow">if</span>(polygon_opt[0]){</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> std::cout << <span class="stringliteral">"creating polygon feature"</span> << std::endl;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> }</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> }</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writePolygonFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> std::string errorString=<span class="stringliteral">"Failed to create polygon feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> }</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> }</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> OGRFeature::DestroyFeature( writePolygonFeature );</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> ++ntotalvalid;</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> std::cout << <span class="stringliteral">"ntotalvalid: "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> }</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> std::cout << <span class="stringliteral">"creating point feature in centroid"</span> << std::endl;</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> <span class="keywordflow">if</span>(writeTest){</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> <span class="keywordflow">if</span>(writeTestLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> }</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> }</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> assert(validFeature);</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="keywordflow">if</span>(writeLayer->CreateFeature( writeCentroidFeature ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> std::string errorString=<span class="stringliteral">"Failed to create point feature in ogr vector dataset"</span>;</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> }</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> }</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> OGRFeature::DestroyFeature( writeCentroidFeature );</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> ++ntotalvalid;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> std::cout << <span class="stringliteral">"ntotalvalid: "</span> << ntotalvalid << std::endl;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> }</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> }</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> }</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> std::string test;</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> test=poGeometry->getGeometryName();</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> ostringstream oss;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> oss << <span class="stringliteral">"geometry "</span> << test << <span class="stringliteral">" not supported"</span>;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> <span class="keywordflow">throw</span>(oss.str());</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> }</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> ++ifeature;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ifeature+1)/nfeature;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> }</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="keywordflow">catch</span>(std::string e){</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> std::cout << e << std::endl;</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> }</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="keywordflow">catch</span>(<span class="keywordtype">int</span> npoint){</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> std::cout << <span class="stringliteral">"number of points read in polygon: "</span> << npoint << std::endl;</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> }</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> }<span class="comment">//end of getNextFeature</span></div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> <span class="comment">// if(rbox_opt[0]>0||cbox_opt[0]>0)</span></div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="comment">// boxWriter.close();</span></div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> progress=1.0;</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> ++ilayerWrite;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> }<span class="comment">//for ilayer</span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> ogrWriter.close();</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> <span class="keywordflow">if</span>(test_opt.size())</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> ogrTestWriter.close();</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> }<span class="comment">//else (vector)</span></div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> progress=1.0;</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> imgReader.close();</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> }</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract_8py_source.html b/doc/html/pkextract_8py_source.html
new file mode 100644
index 0000000..1827b12
--- /dev/null
+++ b/doc/html/pkextract_8py_source.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkextract.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkextract.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterVector</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputVector</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> FORMATS = [</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="stringliteral">'ESRI Shapefile'</span>,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="stringliteral">'GeoJSON'</span>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">'GeoRSS'</span>,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="stringliteral">'SQLite'</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">'GMT'</span>,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="stringliteral">'MapInfo File'</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="stringliteral">'INTERLIS 1'</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="stringliteral">'INTERLIS 2'</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">'GML'</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">'Geoconcept'</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">'DXF'</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">'DGN'</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">'CSV'</span>,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">'BNA'</span>,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">'S57'</span>,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">'KML'</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">'GPX'</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">'PGDump'</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">'GPSTrackMaker'</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">'ODS'</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">'XLSX'</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">'PDF'</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ]</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> EXTS = [</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">'.shp'</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">'.geojson'</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">'.xml'</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral">'.sqlite'</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">'.gmt'</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="stringliteral">'.tab'</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">'.gml'</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">'.txt'</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">'.dxf'</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">'.dgn'</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral">'.csv'</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral">'.bna'</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral">'.000'</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral">'.kml'</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral">'.gpx'</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">'.pgdump'</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'.gtm'</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">'.ods'</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">'.xlsx'</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">'.pdf'</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ]</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classqgis_1_1pkextract_1_1pkextract.html"> 87</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkextract_1_1pkextract.html">pkextract</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> SAMPLE = <span class="stringliteral">"SAMPLE"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ITERATE = <span class="stringliteral">"ITERATE"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> RULE_OPTIONS = [<span class="stringliteral">'centroid'</span>, <span class="stringliteral">'point'</span>, <span class="stringliteral">'mean'</span>, <span class="stringliteral">'proportion'</span>, <span class="stringliteral">'min'</span>, <span class="stringliteral">'max'</span>, <span class="stringliteral">'mode'</span>, <span class="stringliteral"> [...]
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> RULE = <span class="stringliteral">"RULE"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> POLYGON = <span class="stringliteral">"POLYGON"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> BUFFER = <span class="stringliteral">"BUFFER"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> SRCNODATA = <span class="stringliteral">"SRCNODATA"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> BNDNODATA = <span class="stringliteral">"BNDNODATA"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> FORMAT = <span class="stringliteral">"FORMAT"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkextract"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a682fac32a3bbc98fe364fc9d2a46a9ed">name</a> = <span class="stringliteral">"extract vector sample from raster"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ab9995a84ad157685b2d27025cdad22b0">group</a> = <span class="stringliteral">"[pktools] raster/vector"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a95e1c0317ddcaeda681980e70494a638">INPUT</a>, <span class="stringliteral">'Input raster data set'</span>))</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> self.addParameter(ParameterVector(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a152b797f760ae98e27adbad95c3a8729">SAMPLE</a>, <span class="stringliteral">'Sample vector data set'</span>))</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a7a00b2c269b8968376d90b0bf893df9f">ITERATE</a>, <span class="stringliteral">"Iterate over all layers"</span>,<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#af877cda3a19feb1f37d368d54680fd59">RULE</a>,<span class="stringliteral">"extraction rule"</span>,self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a78b93513da9f4173cd4218204a77d20a">RULE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> self.addOutput(OutputVector(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#aebb093e7f23d360f6657f8833f5c73f3">OUTPUT</a>, <span class="stringliteral">'Output vector data set'</span>))</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#aec905ae5cbf25bc9d1a4a592bff30311">FORMAT</a>,</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="stringliteral">'Destination Format'</span>, FORMATS))</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ac120a3debadb9cbd38552fcdefba2fb0">POLYGON</a>, <span class="stringliteral">"Create OGRPolygon as geometry instead of OGRPoint"</span>,<span class="keyword">False</span>))</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a0052109b006ae33bb2014a05ffd9226f">BUFFER</a>, <span class="stringliteral">"Buffer for calculating statistics for point features"</span>,1,25,1))</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ab4431ebf4ce448655fcc25366f15abd3">SRCNODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a1cb12c6b9a06225999395afa50b17987">BNDNODATA</a>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a741cc5d777e44ecde629f16a2499ae6c">EXTRA</a>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">''</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#af5bc2523851ece32499990c6b9bd64f7">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> commands = [cliPath]</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a95e1c0317ddcaeda681980e70494a638">INPUT</a>)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> sample=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a152b797f760ae98e27adbad95c3a8729">SAMPLE</a>)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a7a00b2c269b8968376d90b0bf893df9f">ITERATE</a>):</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span> str(sample).find(<span class="stringliteral">'|'</span>)>0:</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> samplename=str(sample)[:str(sample).find(<span class="stringliteral">'|'</span>)]</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> samplename=str(sample)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> samplename=str(sample).replace(<span class="stringliteral">"|layername"</span>,<span class="stringliteral">" -ln"</span>)</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> commands.append(<span class="stringliteral">'-s'</span>)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> commands.append(samplename)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ac120a3debadb9cbd38552fcdefba2fb0">POLYGON</a>):</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> commands.append(<span class="stringliteral">"-polygon"</span>)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> commands.append(<span class="stringliteral">"-r"</span>)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> commands.append(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a78b93513da9f4173cd4218204a77d20a">RULE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#af877cda3a19feb1f37d368d54680fd59">RULE</a>)])</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> output = self.getOutputFromName(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#aebb093e7f23d360f6657f8833f5c73f3">OUTPUT</a>)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> outFile = output.value</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> formatIdx = self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#aec905ae5cbf25bc9d1a4a592bff30311">FORMAT</a>)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> outFormat = <span class="stringliteral">'"'</span> + FORMATS[formatIdx] + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> commands.append(<span class="stringliteral">'-f'</span>)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> commands.append(outFormat)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> ext = EXTS[formatIdx]</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> <span class="keywordflow">not</span> outFile.endswith(ext):</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> outFile += ext</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> output.value = outFile</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> commands.append(<span class="stringliteral">'-o'</span>)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> commands.append(<span class="stringliteral">'"'</span> + outFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ac120a3debadb9cbd38552fcdefba2fb0">POLYGON</a>):</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> commands.append(<span class="stringliteral">"-polygon"</span>)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> buffer=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a0052109b006ae33bb2014a05ffd9226f">BUFFER</a>)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span> buffer > 1:</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> commands.append(<span class="stringliteral">"-buf"</span>)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> commands.append(str(buffer))</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> srcnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#ab4431ebf4ce448655fcc25366f15abd3">SRCNODATA</a>)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> srcnodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> srcnodataValues = srcnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> srcnodataValue <span class="keywordflow">in</span> srcnodataValues:</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> commands.append(<span class="stringliteral">'-srcnodata'</span>)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> commands.append(srcnodataValue)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> bndnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a1cb12c6b9a06225999395afa50b17987">BNDNODATA</a>)</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> bndnodataValues = bndnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">for</span> bndnodataValue <span class="keywordflow">in</span> bndnodataValues:</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> commands.append(<span class="stringliteral">'-bndnodata'</span>)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> commands.append(bndnodataValue)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract_1_1pkextract.html#a741cc5d777e44ecde629f16a2499ae6c">EXTRA</a>))</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> commands.append(extra)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_ac120a3debadb9cbd38552fcdefba2fb0"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#ac120a3debadb9cbd38552fcdefba2fb0">qgis.pkextract.pkextract.POLYGON</a></div><div class="ttdeci">string POLYGON</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00097">pkextract.py:97</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a95e1c0317ddcaeda681980e70494a638"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a95e1c0317ddcaeda681980e70494a638">qgis.pkextract.pkextract.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00089">pkextract.py:89</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_af5bc2523851ece32499990c6b9bd64f7"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#af5bc2523851ece32499990c6b9bd64f7">qgis.pkextract.pkextract.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00106">pkextract.py:106</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html">qgis.pkextract.pkextract</a></div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00087">pkextract.py:87</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a682fac32a3bbc98fe364fc9d2a46a9ed"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a682fac32a3bbc98fe364fc9d2a46a9ed">qgis.pkextract.pkextract.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00110">pkextract.py:110</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a78b93513da9f4173cd4218204a77d20a"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a78b93513da9f4173cd4218204a77d20a">qgis.pkextract.pkextract.RULE_OPTIONS</a></div><div class="ttdeci">list RULE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00094">pkextract.py:94</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a741cc5d777e44ecde629f16a2499ae6c"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a741cc5d777e44ecde629f16a2499ae6c">qgis.pkextract.pkextract.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00102">pkextract.py:102</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a152b797f760ae98e27adbad95c3a8729"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a152b797f760ae98e27adbad95c3a8729">qgis.pkextract.pkextract.SAMPLE</a></div><div class="ttdeci">string SAMPLE</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00090">pkextract.py:90</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_ab4431ebf4ce448655fcc25366f15abd3"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#ab4431ebf4ce448655fcc25366f15abd3">qgis.pkextract.pkextract.SRCNODATA</a></div><div class="ttdeci">string SRCNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00099">pkextract.py:99</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a1cb12c6b9a06225999395afa50b17987"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a1cb12c6b9a06225999395afa50b17987">qgis.pkextract.pkextract.BNDNODATA</a></div><div class="ttdeci">string BNDNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00100">pkextract.py:100</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a0052109b006ae33bb2014a05ffd9226f"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a0052109b006ae33bb2014a05ffd9226f">qgis.pkextract.pkextract.BUFFER</a></div><div class="ttdeci">string BUFFER</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00098">pkextract.py:98</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_ab9995a84ad157685b2d27025cdad22b0"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#ab9995a84ad157685b2d27025cdad22b0">qgis.pkextract.pkextract.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00111">pkextract.py:111</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_aec905ae5cbf25bc9d1a4a592bff30311"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#aec905ae5cbf25bc9d1a4a592bff30311">qgis.pkextract.pkextract.FORMAT</a></div><div class="ttdeci">string FORMAT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00104">pkextract.py:104</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_a7a00b2c269b8968376d90b0bf893df9f"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#a7a00b2c269b8968376d90b0bf893df9f">qgis.pkextract.pkextract.ITERATE</a></div><div class="ttdeci">string ITERATE</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00091">pkextract.py:91</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_af877cda3a19feb1f37d368d54680fd59"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#af877cda3a19feb1f37d368d54680fd59">qgis.pkextract.pkextract.RULE</a></div><div class="ttdeci">string RULE</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00096">pkextract.py:96</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract_1_1pkextract_html_aebb093e7f23d360f6657f8833f5c73f3"><div class="ttname"><a href="classqgis_1_1pkextract_1_1pkextract.html#aebb093e7f23d360f6657f8833f5c73f3">qgis.pkextract.pkextract.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract_8py_source.html#l00092">pkextract.py:92</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract__grid_8py_source.html b/doc/html/pkextract__grid_8py_source.html
new file mode 100644
index 0000000..1b80f7a
--- /dev/null
+++ b/doc/html/pkextract__grid_8py_source.html
@@ -0,0 +1,262 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkextract_grid.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract_grid.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkextract_grid.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterVector</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputVector</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> FORMATS = [</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="stringliteral">'ESRI Shapefile'</span>,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="stringliteral">'GeoJSON'</span>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">'GeoRSS'</span>,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="stringliteral">'SQLite'</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">'GMT'</span>,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="stringliteral">'MapInfo File'</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="stringliteral">'INTERLIS 1'</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="stringliteral">'INTERLIS 2'</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">'GML'</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">'Geoconcept'</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">'DXF'</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">'DGN'</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">'CSV'</span>,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">'BNA'</span>,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">'S57'</span>,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">'KML'</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">'GPX'</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">'PGDump'</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">'GPSTrackMaker'</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">'ODS'</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">'XLSX'</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">'PDF'</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ]</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> EXTS = [</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">'.shp'</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">'.geojson'</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">'.xml'</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral">'.sqlite'</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">'.gmt'</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="stringliteral">'.tab'</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">'.gml'</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">'.txt'</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">'.dxf'</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">'.dgn'</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral">'.csv'</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral">'.bna'</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral">'.000'</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral">'.kml'</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral">'.gpx'</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">'.pgdump'</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'.gtm'</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">'.ods'</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">'.xlsx'</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">'.pdf'</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ]</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html"> 87</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">pkextract_grid</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> RULE_OPTIONS = [<span class="stringliteral">'centroid'</span>, <span class="stringliteral">'point'</span>, <span class="stringliteral">'mean'</span>, <span class="stringliteral">'proportion'</span>, <span class="stringliteral">'custom'</span>, <span class="stringliteral">'min'</span>, <span class="stringliteral">'max'</span>, <span class="stringliteral [...]
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> RULE = <span class="stringliteral">"RULE"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> POLYGON = <span class="stringliteral">"POLYGON"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> BUFFER = <span class="stringliteral">"BUFFER"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> GRID = <span class="stringliteral">"GRID"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> SRCNODATA = <span class="stringliteral">"SRCNODATA"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> BNDNODATA = <span class="stringliteral">"BNDNODATA"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> FORMAT = <span class="stringliteral">"FORMAT"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkextract"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aa9a3742d6a3703e840c7bc463740fb46">name</a> = <span class="stringliteral">"extract regular grid"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a481d147d56925a1ab75e18b1c8f145fc">group</a> = <span class="stringliteral">"[pktools] raster/vector"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#ad359b649a15e3dbd0795278b984c6b23">INPUT</a>, <span class="stringliteral">'Input raster data set'</span>))</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a8b1c35d0229515eb8a9a4f74fbb27df2">RULE</a>,<span class="stringliteral">"extraction rule"</span>,self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aff9ec53af87f8f28b82ea13707ed31a3">RULE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> self.addOutput(OutputVector(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a59fa1c64049fbed2cc81548cf5d0e3a8">OUTPUT</a>, <span class="stringliteral">'Output vector data set'</span>))</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a4f170fcdea30859ad29048d61e90ce8b">FORMAT</a>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="stringliteral">'Destination Format'</span>, FORMATS))</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#adaea5d0be7bd0435fdd3f6a42dc4c80f">POLYGON</a>, <span class="stringliteral">"Create OGRPolygon as geometry instead of OGRPoint"</span>,<span class="keyword">False</span>))</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a1c07170b9f1999083d925f16c78e5ab1">BUFFER</a>, <span class="stringliteral">"Buffer for calculating statistics for point features"</span>,1,25,1))</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a914f319e7a3734966056b0e396e4b0a1">GRID</a>, <span class="stringliteral">"Cell grid size (in projected units, e.g,. m)"</span>,0,1000000,1))</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a2b5e358b248cb62615584a90d651fea1">SRCNODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a458c8ea888792f63f8000afe8b6a5c6e">BNDNODATA</a>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a058e183281127755bd1d851b3788138c">EXTRA</a>, <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">''</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aa939f27236fbd7a0919bcb66b214b8c9">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> commands = [cliPath]</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#ad359b649a15e3dbd0795278b984c6b23">INPUT</a>)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> commands.append(<span class="stringliteral">"-r"</span>)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> commands.append(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aff9ec53af87f8f28b82ea13707ed31a3">RULE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a8b1c35d0229515eb8a9a4f74fbb27df2">RULE</a>)])</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> output = self.getOutputFromName(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a59fa1c64049fbed2cc81548cf5d0e3a8">OUTPUT</a>)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> outFile = output.value</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> formatIdx = self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a4f170fcdea30859ad29048d61e90ce8b">FORMAT</a>)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> outFormat = <span class="stringliteral">'"'</span> + FORMATS[formatIdx] + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> commands.append(<span class="stringliteral">'-f'</span>)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> commands.append(outFormat)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> ext = EXTS[formatIdx]</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> <span class="keywordflow">not</span> outFile.endswith(ext):</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> outFile += ext</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> output.value = outFile</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> commands.append(<span class="stringliteral">'-o'</span>)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> commands.append(<span class="stringliteral">'"'</span> + outFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#adaea5d0be7bd0435fdd3f6a42dc4c80f">POLYGON</a>):</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> commands.append(<span class="stringliteral">"-polygon"</span>)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> buffer=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a1c07170b9f1999083d925f16c78e5ab1">BUFFER</a>)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span> buffer > 1:</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> commands.append(<span class="stringliteral">"-buf"</span>)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> commands.append(str(buffer))</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a914f319e7a3734966056b0e396e4b0a1">GRID</a>) > 0:</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> commands.append(<span class="stringliteral">"-grid"</span>)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a914f319e7a3734966056b0e396e4b0a1">GRID</a>)))</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> srcnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a2b5e358b248cb62615584a90d651fea1">SRCNODATA</a>)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span> srcnodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> srcnodataValues = srcnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span> srcnodataValue <span class="keywordflow">in</span> srcnodataValues:</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> commands.append(<span class="stringliteral">'-srcnodata'</span>)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> commands.append(srcnodataValue)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> bndnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a458c8ea888792f63f8000afe8b6a5c6e">BNDNODATA</a>)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> bndnodataValues = bndnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">for</span> bndnodataValue <span class="keywordflow">in</span> bndnodataValues:</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> commands.append(<span class="stringliteral">'-bndnodata'</span>)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> commands.append(bndnodataValue)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a058e183281127755bd1d851b3788138c">EXTRA</a>))</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> commands.append(extra)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a458c8ea888792f63f8000afe8b6a5c6e"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a458c8ea888792f63f8000afe8b6a5c6e">qgis.pkextract_grid.pkextract_grid.BNDNODATA</a></div><div class="ttdeci">string BNDNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00099">pkextract_grid.py:99</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a8b1c35d0229515eb8a9a4f74fbb27df2"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a8b1c35d0229515eb8a9a4f74fbb27df2">qgis.pkextract_grid.pkextract_grid.RULE</a></div><div class="ttdeci">string RULE</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00094">pkextract_grid.py:94</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a4f170fcdea30859ad29048d61e90ce8b"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a4f170fcdea30859ad29048d61e90ce8b">qgis.pkextract_grid.pkextract_grid.FORMAT</a></div><div class="ttdeci">string FORMAT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00102">pkextract_grid.py:102</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html">qgis.pkextract_grid.pkextract_grid</a></div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00087">pkextract_grid.py:87</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a058e183281127755bd1d851b3788138c"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a058e183281127755bd1d851b3788138c">qgis.pkextract_grid.pkextract_grid.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00100">pkextract_grid.py:100</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_aff9ec53af87f8f28b82ea13707ed31a3"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aff9ec53af87f8f28b82ea13707ed31a3">qgis.pkextract_grid.pkextract_grid.RULE_OPTIONS</a></div><div class="ttdeci">list RULE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00092">pkextract_grid.py:92</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a59fa1c64049fbed2cc81548cf5d0e3a8"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a59fa1c64049fbed2cc81548cf5d0e3a8">qgis.pkextract_grid.pkextract_grid.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00090">pkextract_grid.py:90</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_aa939f27236fbd7a0919bcb66b214b8c9"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aa939f27236fbd7a0919bcb66b214b8c9">qgis.pkextract_grid.pkextract_grid.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00104">pkextract_grid.py:104</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a2b5e358b248cb62615584a90d651fea1"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a2b5e358b248cb62615584a90d651fea1">qgis.pkextract_grid.pkextract_grid.SRCNODATA</a></div><div class="ttdeci">string SRCNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00098">pkextract_grid.py:98</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a1c07170b9f1999083d925f16c78e5ab1"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a1c07170b9f1999083d925f16c78e5ab1">qgis.pkextract_grid.pkextract_grid.BUFFER</a></div><div class="ttdeci">string BUFFER</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00096">pkextract_grid.py:96</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a914f319e7a3734966056b0e396e4b0a1"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a914f319e7a3734966056b0e396e4b0a1">qgis.pkextract_grid.pkextract_grid.GRID</a></div><div class="ttdeci">string GRID</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00097">pkextract_grid.py:97</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_a481d147d56925a1ab75e18b1c8f145fc"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#a481d147d56925a1ab75e18b1c8f145fc">qgis.pkextract_grid.pkextract_grid.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00109">pkextract_grid.py:109</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_ad359b649a15e3dbd0795278b984c6b23"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#ad359b649a15e3dbd0795278b984c6b23">qgis.pkextract_grid.pkextract_grid.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00089">pkextract_grid.py:89</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_aa9a3742d6a3703e840c7bc463740fb46"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#aa9a3742d6a3703e840c7bc463740fb46">qgis.pkextract_grid.pkextract_grid.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00108">pkextract_grid.py:108</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__grid_1_1pkextract__grid_html_adaea5d0be7bd0435fdd3f6a42dc4c80f"><div class="ttname"><a href="classqgis_1_1pkextract__grid_1_1pkextract__grid.html#adaea5d0be7bd0435fdd3f6a42dc4c80f">qgis.pkextract_grid.pkextract_grid.POLYGON</a></div><div class="ttdeci">string POLYGON</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__grid_8py_source.html#l00095">pkextract_grid.py:95</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract__gui_2main_8cpp_source.html b/doc/html/pkextract__gui_2main_8cpp_source.html
new file mode 100644
index 0000000..f4de8e6
--- /dev/null
+++ b/doc/html/pkextract__gui_2main_8cpp_source.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkextract_gui/main.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html">pkextract_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">main.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include <QApplication></span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> {</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> QApplication a(argc, argv);</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <a class="code" href="classMainWindow.html">MainWindow</a> w;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> w.show();</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keywordflow">return</span> a.exec();</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract__gui_2mainwindow_8cpp_source.html b/doc/html/pkextract__gui_2mainwindow_8cpp_source.html
new file mode 100644
index 0000000..1ac4746
--- /dev/null
+++ b/doc/html/pkextract__gui_2mainwindow_8cpp_source.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkextract_gui/mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html">pkextract_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include "ui_mainwindow.h"</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include <QFileDialog></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <QStandardItemModel></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <QMessageBox></span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> MainWindow::MainWindow(QWidget *parent) :</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> QMainWindow(parent),</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ui(new Ui::<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> ui->setupUi(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> QStringList rulelist;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> rulelist << <span class="stringliteral">"point"</span> << <span class="stringliteral">"pointOnSurface"</span> << <span class="stringliteral">"centroid"</span> << <span class="stringliteral">"mean"</span> << <span class="stringliteral">"stdev"</span> << <span class="stringliteral">"median"</span> << <span cl [...]
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> ui->rule->addItems(rulelist);</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> QStringList formatlist;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> formatlist << <span class="stringliteral">"SQLite"</span> << <span class="stringliteral">"ESRI Shapefile"</span>;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> ui->f->addItems(formatlist);</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> setDefaults();</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> }</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> MainWindow::~MainWindow()</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">delete</span> ui;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">void</span> MainWindow::setDefaults()</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">//tab input/output</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> ui->input->clear();</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> ui->sample->clear();</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> ui->bndnodata->clear();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> ui->srcnodata->clear();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ui->polygon->setChecked(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ui->f->setCurrentIndex(0);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> ui->output->clear();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">//tab extract</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> ui->bname->setText(<span class="stringliteral">"b"</span>);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ui->cname->setText(<span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ui->rule->setCurrentIndex(0);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> ui->nclass->clear();</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> QStringList labels;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> setClassTable(labels);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> ui->threshold->clear();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> MainWindow::on_actionInput_triggered()</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> QString qsinput = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Input"</span>);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> ui->input->setText(qsinput);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> MainWindow::on_actionSample_triggered()</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> QString qssample = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Sample"</span>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ui->sample->setText(qssample);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> MainWindow::on_actionOutput_triggered()</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> QString qsoutput = QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Output image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> ui->output->setText(qsoutput);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_input_clicked()</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_sample_clicked()</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> on_actionSample_triggered();</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_output_clicked()</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> MainWindow::setClassTable(<span class="keyword">const</span> QStringList &labels)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> QStandardItemModel *model = <span class="keyword">new</span> QStandardItemModel(labels.size(),2,<span class="keyword">this</span>); <span class="comment">//2 Rows and 3 Columns</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> model->setHorizontalHeaderItem(0, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"label name"</span>)));</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> model->setHorizontalHeaderItem(1, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"select(%)"</span>)));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilabel=0;ilabel<labels.size();++ilabel){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> QStandardItem *firstCol = <span class="keyword">new</span> QStandardItem(QString(labels[ilabel]));</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> model->setItem(ilabel,0,firstCol);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> QStandardItem *secondCol = <span class="keyword">new</span> QStandardItem(QString::number(100));</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> model->setItem(ilabel,1,secondCol);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ui->tableView_labels->setModel(model);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_run_clicked()</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> {</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> ui->commandLineEdit->clear();</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> ui->consoleEdit->clear();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> QString program = <span class="stringliteral">"pkextract"</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span>(ui->sample->text().isEmpty())</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> MainWindow::on_actionSample_triggered();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(ui->sample->text().isEmpty()){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> QString qsError=<span class="stringliteral">"No sample image file selected"</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(ui->input->text().isEmpty())</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> MainWindow::on_actionInput_triggered();</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span>(ui->input->text().isEmpty()){</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> QString qsError=<span class="stringliteral">"No input image file selected"</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty())</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> MainWindow::on_actionOutput_triggered();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty()){</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> QString qsError=<span class="stringliteral">"No output image file selected"</span>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> program+=<span class="stringliteral">" --f "</span>+ui->f->currentText();</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span>(ui->polygon->isChecked())</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> program+=<span class="stringliteral">" --polygon"</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> program+=<span class="stringliteral">" --rule "</span>+ui->rule->currentText();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// QList<QComboBox*> qcomboBoxList = this->findChildren<QComboBox *>();</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// for(QList<QComboBox*>::ConstIterator qcbit=qcomboBoxList.begin();qcbit!=qcomboBoxList.end();++qcbit){</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// QString qsOption;</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// qsOption+=" --";</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// qsOption+=(*qcbit)->objectName();</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// program+=qsOption;</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// program+=" ";</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// program+=QString::number((*qcbit)->currentIndex());</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span>(!((*qlbit)->text().isEmpty())){</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> QString qsOption;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> qsOption+=(*qlbit)->objectName();</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> qsOption+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> qsOption+=(*qlbit)->text();</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> program+=qsOption;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">//class table</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> QString qsOption;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> qsOption+=<span class="stringliteral">" --class "</span>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,0)).toString();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> qsOption+=<span class="stringliteral">" --threshold "</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,1)).toString();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> program+=qsOption;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> ui->commandLineEdit->insert(program);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// QProcess *myProcess = new QProcess(parent);</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> myProcess->start(program);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> myProcess->setProcessChannelMode(QProcess::MergedChannels);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// QString p_stderr = myProcess->readyReadStandardError();</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// if(!p_stderr.isEmpty()){</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// QMessageBox msgBox;</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// msgBox.setText(p_stderr);</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// msgBox.exec();</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> QString p_stdout = myProcess->readAll();</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> ui->consoleEdit->insertPlainText(p_stdout);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">delete</span> myProcess;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">catch</span>(QString qsError){</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> msgBox.setText(qsError);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> msgBox.exec();</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_createTable_clicked()</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> nclass=ui->nclass->text().toInt();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> QStringList labels;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=1;iclass<=nclass;++iclass){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> QString lstring=<span class="stringliteral">"label"</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> lstring+=QString::number(iclass);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> labels << lstring;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> setClassTable(labels);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_restore_clicked()</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> setDefaults();</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract__gui_2mainwindow_8h_source.html b/doc/html/pkextract__gui_2mainwindow_8h_source.html
new file mode 100644
index 0000000..97f1381
--- /dev/null
+++ b/doc/html/pkextract__gui_2mainwindow_8h_source.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pkextract_gui/mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_2676862852e3d558e3597542a81ecc63.html">pkextract_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"></span><span class="preprocessor">#define MAINWINDOW_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <QMainWindow></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a>;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> }</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> Q_OBJECT</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">explicit</span> <a class="code" href="classMainWindow.html">MainWindow</a>(QWidget *parent = 0);</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> ~<a class="code" href="classMainWindow.html">MainWindow</a>();</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">private</span> slots:</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">void</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keywordtype">void</span> on_actionSample_triggered();</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keywordtype">void</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> on_toolButton_input_clicked();</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">void</span> on_toolButton_output_clicked();</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span> on_toolButton_sample_clicked();</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">void</span> on_pushButton_run_clicked();</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> on_toolButton_createTable_clicked();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">void</span> on_pushButton_restore_clicked();</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> setClassTable(<span class="keyword">const</span> QStringList &labels);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> setDefaults();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="classUi_1_1MainWindow.html">Ui::MainWindow</a> *ui;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif // MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkextract__random_8py_source.html b/doc/html/pkextract__random_8py_source.html
new file mode 100644
index 0000000..9f650c9
--- /dev/null
+++ b/doc/html/pkextract__random_8py_source.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkextract_random.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkextract_random.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkextract_random.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterVector</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputVector</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> FORMATS = [</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="stringliteral">'ESRI Shapefile'</span>,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="stringliteral">'GeoJSON'</span>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">'GeoRSS'</span>,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="stringliteral">'SQLite'</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">'GMT'</span>,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="stringliteral">'MapInfo File'</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="stringliteral">'INTERLIS 1'</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="stringliteral">'INTERLIS 2'</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">'GML'</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">'Geoconcept'</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">'DXF'</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">'DGN'</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">'CSV'</span>,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">'BNA'</span>,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">'S57'</span>,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">'KML'</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">'GPX'</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">'PGDump'</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">'GPSTrackMaker'</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">'ODS'</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">'XLSX'</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">'PDF'</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ]</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> EXTS = [</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">'.shp'</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">'.geojson'</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">'.xml'</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral">'.sqlite'</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">'.gmt'</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="stringliteral">'.tab'</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">'.ili'</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">'.gml'</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">'.txt'</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">'.dxf'</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">'.dgn'</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral">'.csv'</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral">'.bna'</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral">'.000'</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral">'.kml'</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral">'.gpx'</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">'.pgdump'</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'.gtm'</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">'.ods'</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">'.xlsx'</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">'.pdf'</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ]</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classqgis_1_1pkextract__random_1_1pkextract__random.html"> 87</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html">pkextract_random</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> RULE_OPTIONS = [<span class="stringliteral">'centroid'</span>, <span class="stringliteral">'point'</span>, <span class="stringliteral">'mean'</span>, <span class="stringliteral">'proportion'</span>, <span class="stringliteral">'custom'</span>, <span class="stringliteral">'min'</span>, <span class="stringliteral">'max'</span>, <span class="stringliteral [...]
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> RULE = <span class="stringliteral">"RULE"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> POLYGON = <span class="stringliteral">"POLYGON"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> BUFFER = <span class="stringliteral">"BUFFER"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> RANDOM = <span class="stringliteral">"RANDOM"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> SRCNODATA = <span class="stringliteral">"SRCNODATA"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> BNDNODATA = <span class="stringliteral">"BNDNODATA"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> FORMAT = <span class="stringliteral">"FORMAT"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkextract"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a82b3377677efcc9221be352e4048cafd">name</a> = <span class="stringliteral">"extract random points"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aca5c7763815ce8ed031311ba3a789ca1">group</a> = <span class="stringliteral">"[pktools] raster/vector"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa12d40db6d4c1db34cb7c9f577f7c005">INPUT</a>, <span class="stringliteral">'Input raster data set'</span>))</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#afedf8577b67d791e03897075d8aa27ac">RULE</a>,<span class="stringliteral">"extraction rule"</span>,self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a85a1e7cb635dcbd857a527768834e990">RULE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> self.addOutput(OutputVector(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a085ee08ae2a482d8cbaff595892c54a8">OUTPUT</a>, <span class="stringliteral">'Output vector data set'</span>))</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa9917fab3df26d469766bfa0ba603ee4">FORMAT</a>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="stringliteral">'Destination Format'</span>, FORMATS))</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a36283f7921c233717d3f14c8db5c1f0b">POLYGON</a>, <span class="stringliteral">"Create OGRPolygon as geometry instead of OGRPoint"</span>,<span class="keyword">False</span>))</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acd4d3fcc09b1d4e24614be0afaefbf3e">BUFFER</a>, <span class="stringliteral">"Buffer for calculating statistics for point features"</span>,1,25,1))</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#adcaa31fc02c279d8bbdb849104d939e1">RANDOM</a>, <span class="stringliteral">"Number of random points to generate"</span>,0,1000000,100))</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a13dc6553f4a7a228ae4b94e810694889">SRCNODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa443b2341e1b83d1c1cf56f95cdb36a0">BNDNODATA</a>, <span class="stringliteral">"Band(s) in input image to check if pixel is valid (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acfa85cb06c31b3bf3a7b543e3185368e">EXTRA</a>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">''</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a12d5f2e69fb4d44ceaa3446295ae8c99">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> commands = [cliPath]</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa12d40db6d4c1db34cb7c9f577f7c005">INPUT</a>)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> commands.append(<span class="stringliteral">"-r"</span>)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> commands.append(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a85a1e7cb635dcbd857a527768834e990">RULE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#afedf8577b67d791e03897075d8aa27ac">RULE</a>)])</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> output = self.getOutputFromName(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a085ee08ae2a482d8cbaff595892c54a8">OUTPUT</a>)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> outFile = output.value</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> formatIdx = self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa9917fab3df26d469766bfa0ba603ee4">FORMAT</a>)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> outFormat = <span class="stringliteral">'"'</span> + FORMATS[formatIdx] + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> commands.append(<span class="stringliteral">'-f'</span>)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> commands.append(outFormat)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> ext = EXTS[formatIdx]</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> <span class="keywordflow">not</span> outFile.endswith(ext):</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> outFile += ext</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> output.value = outFile</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> commands.append(<span class="stringliteral">'-o'</span>)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> commands.append(<span class="stringliteral">'"'</span> + outFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a36283f7921c233717d3f14c8db5c1f0b">POLYGON</a>):</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> commands.append(<span class="stringliteral">"-polygon"</span>)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> buffer=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acd4d3fcc09b1d4e24614be0afaefbf3e">BUFFER</a>)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> buffer > 1:</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> commands.append(<span class="stringliteral">"-buf"</span>)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> commands.append(str(buffer))</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#adcaa31fc02c279d8bbdb849104d939e1">RANDOM</a>) > 0:</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> commands.append(<span class="stringliteral">"-rand"</span>)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#adcaa31fc02c279d8bbdb849104d939e1">RANDOM</a>)))</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> srcnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a13dc6553f4a7a228ae4b94e810694889">SRCNODATA</a>)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> srcnodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> srcnodataValues = srcnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span> srcnodataValue <span class="keywordflow">in</span> srcnodataValues:</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> commands.append(<span class="stringliteral">'-srcnodata'</span>)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> commands.append(srcnodataValue)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> bndnodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa443b2341e1b83d1c1cf56f95cdb36a0">BNDNODATA</a>)</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> bndnodataValues = bndnodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span> bndnodataValue <span class="keywordflow">in</span> bndnodataValues:</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> commands.append(<span class="stringliteral">'-bndnodata'</span>)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> commands.append(bndnodataValue)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acfa85cb06c31b3bf3a7b543e3185368e">EXTRA</a>))</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> commands.append(extra)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_aca5c7763815ce8ed031311ba3a789ca1"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aca5c7763815ce8ed031311ba3a789ca1">qgis.pkextract_random.pkextract_random.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00109">pkextract_random.py:109</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_adcaa31fc02c279d8bbdb849104d939e1"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#adcaa31fc02c279d8bbdb849104d939e1">qgis.pkextract_random.pkextract_random.RANDOM</a></div><div class="ttdeci">string RANDOM</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00097">pkextract_random.py:97</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_afedf8577b67d791e03897075d8aa27ac"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#afedf8577b67d791e03897075d8aa27ac">qgis.pkextract_random.pkextract_random.RULE</a></div><div class="ttdeci">string RULE</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00094">pkextract_random.py:94</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html">qgis.pkextract_random.pkextract_random</a></div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00087">pkextract_random.py:87</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a82b3377677efcc9221be352e4048cafd"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a82b3377677efcc9221be352e4048cafd">qgis.pkextract_random.pkextract_random.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00108">pkextract_random.py:108</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a36283f7921c233717d3f14c8db5c1f0b"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a36283f7921c233717d3f14c8db5c1f0b">qgis.pkextract_random.pkextract_random.POLYGON</a></div><div class="ttdeci">string POLYGON</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00095">pkextract_random.py:95</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_aa9917fab3df26d469766bfa0ba603ee4"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa9917fab3df26d469766bfa0ba603ee4">qgis.pkextract_random.pkextract_random.FORMAT</a></div><div class="ttdeci">string FORMAT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00102">pkextract_random.py:102</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_aa443b2341e1b83d1c1cf56f95cdb36a0"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa443b2341e1b83d1c1cf56f95cdb36a0">qgis.pkextract_random.pkextract_random.BNDNODATA</a></div><div class="ttdeci">string BNDNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00099">pkextract_random.py:99</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_acd4d3fcc09b1d4e24614be0afaefbf3e"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acd4d3fcc09b1d4e24614be0afaefbf3e">qgis.pkextract_random.pkextract_random.BUFFER</a></div><div class="ttdeci">string BUFFER</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00096">pkextract_random.py:96</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_acfa85cb06c31b3bf3a7b543e3185368e"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#acfa85cb06c31b3bf3a7b543e3185368e">qgis.pkextract_random.pkextract_random.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00100">pkextract_random.py:100</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a13dc6553f4a7a228ae4b94e810694889"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a13dc6553f4a7a228ae4b94e810694889">qgis.pkextract_random.pkextract_random.SRCNODATA</a></div><div class="ttdeci">string SRCNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00098">pkextract_random.py:98</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a12d5f2e69fb4d44ceaa3446295ae8c99"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a12d5f2e69fb4d44ceaa3446295ae8c99">qgis.pkextract_random.pkextract_random.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00104">pkextract_random.py:104</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a085ee08ae2a482d8cbaff595892c54a8"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a085ee08ae2a482d8cbaff595892c54a8">qgis.pkextract_random.pkextract_random.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00090">pkextract_random.py:90</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_aa12d40db6d4c1db34cb7c9f577f7c005"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#aa12d40db6d4c1db34cb7c9f577f7c005">qgis.pkextract_random.pkextract_random.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00089">pkextract_random.py:89</a></div></div>
+<div class="ttc" id="classqgis_1_1pkextract__random_1_1pkextract__random_html_a85a1e7cb635dcbd857a527768834e990"><div class="ttname"><a href="classqgis_1_1pkextract__random_1_1pkextract__random.html#a85a1e7cb635dcbd857a527768834e990">qgis.pkextract_random.pkextract_random.RULE_OPTIONS</a></div><div class="ttdeci">list RULE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkextract__random_8py_source.html#l00092">pkextract_random.py:92</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfillnodata.html b/doc/html/pkfillnodata.html
new file mode 100644
index 0000000..6ffc59c
--- /dev/null
+++ b/doc/html/pkfillnodata.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfillnodata</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfillnodata </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to fill holes in raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfillnodata -i input.txt -m mask -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-b band]*</code></p>
+<p><code> Advanced options: [-d distance] [-it iterations]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkfillnodata_description"></a>
+Description</h1>
+<p>The utility pkfillnodata fills nodata values in a raster dataset. Nodata values are defined as 0 values in the mask raster dataset. You can use the input file as the mask image if 0 values in the input raster have to be filled. Per default, all bands are filled. Use the option -b to fill individual band(s) in a multiband raster input image. </p>
+<h1><a class="anchor" id="pkfillnodata_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input raster dataset </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td></td><td>band(s) to process (Default is -1: process all bands) </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Mask raster dataset indicating pixels to be interpolated (zero valued) </td></tr>
+<tr>
+<td>d </td><td>distance </td><td>double </td><td>0 </td><td>Maximum number of pixels to search in all directions to find values to interpolate from </td></tr>
+<tr>
+<td>it </td><td>iteration </td><td>int </td><td>0 </td><td>Number of 3x3 smoothing filter passes to run (default 0) </td></tr>
+</table>
+Usage: pkfillnodata -i input.txt -m mask -o output </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfillnodata_8cc_source.html b/doc/html/pkfillnodata_8cc_source.html
new file mode 100644
index 0000000..2fd5702
--- /dev/null
+++ b/doc/html/pkfillnodata_8cc_source.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfillnodata.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfillnodata.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfillnodata.cc: program to fill holes in raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "cpl_string.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "gdal_priv.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "gdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "gdal_alg.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> }</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input raster dataset"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band(s) to process (Default is -1: process all bands)"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Mask raster dataset indicating pixels to be interpolated (zero valued) "</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> distance_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"distance"</span>, <span class="stringliteral">"Maximum number of pixels to search in all directions to find values to interpolate from"</span>, 0);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> iteration_opt(<span class="stringliteral">"it"</span>, <span class="stringliteral">"iteration"</span>, <span class="stringliteral">"Number of 3x3 smoothing filter passes to run (default 0)"</span>, 0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0,2);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> distance_opt.setHide(1);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> iteration_opt.setHide(1);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> distance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> iteration_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">catch</span>(std::string predefinedString){</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> exit(0);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> cout << endl;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> cout << <span class="stringliteral">"Usage: pkfillnodata -i input.txt -m mask -o output"</span> << endl;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> cout << endl;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> assert(mask_opt.size());</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> GDALAllRegister();</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> GDALDataset *gds_input;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> std::cout << <span class="stringliteral">"opening input file "</span> << input_opt[0] << std::endl;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> gds_input = (GDALDataset *) GDALOpen(input_opt[0].c_str(), GA_ReadOnly);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(gds_input == NULL){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> GDALDataset *gds_mask;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> std::cout << <span class="stringliteral">"opening mask file "</span> << mask_opt[0] << std::endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> gds_mask = (GDALDataset *) GDALOpen(mask_opt[0].c_str(), GA_ReadOnly );</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(gds_mask == NULL){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> GDALRasterBand *maskBand;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> std::cout << <span class="stringliteral">"get mask raster band"</span> << std::endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> maskBand=gds_mask->GetRasterBand(1);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> GDALDriver *poDriver;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> poDriver = GetGDALDriverManager()->GetDriverByName(gds_input->GetDriver()->GetDescription());</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>( poDriver == NULL ){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> std::string errorString=<span class="stringliteral">"FileOpenError"</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> std::cout << <span class="stringliteral">"copying input file to "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> poDriver->CopyFiles(output_opt[0].c_str(),input_opt[0].c_str());</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> GDALDataset *gds_out;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> gds_out=(GDALDataset *) GDALOpen(output_opt[0].c_str(), GA_Update);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(band_opt.empty()){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> band_opt.clear();</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<gds_input->GetRasterCount();++iband)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> band_opt.push_back(iband);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> GDALRasterBand *targetBand;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> iband=0;iband<band_opt.size();++iband){</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> targetBand=gds_out->GetRasterBand(band_opt[iband]+1);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> std::cout << <span class="stringliteral">"copying input file to "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">double</span> dfComplete=0.0;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(GDALFillNodata(targetBand,maskBand,distance_opt[0],0,iteration_opt[0],NULL,pfnProgress,pProgressArg)!=CE_None){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> std::cerr << CPLGetLastErrorMsg() << std::endl;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> exit(1);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> dfComplete=1.0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// gds_out=poDriver->CreateCopy(output_opt[0].c_str(),gds_input, FALSE,NULL,NULL,NULL);</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// char **papszParmList=NULL;</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// gds_out=poDriver->Create(output_opt[0].c_str(),targetBand->GetXSize(),targetBand->GetYSize(),1,targetBand->GetRasterDataType(),papszParmList);</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// char **papszMetadata;</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// papszMetadata = poDriver->GetMetadata();</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// assert( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ));</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// ostringstream compressList;</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// gds_out->SetMetadataItem("INTERLEAVE",gds_input->GetMetadataItem( "INTERLEAVE", "IMAGE_STRUCTURE"),"IMAGE_STRUCTURE");</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// gds_out->SetMetadataItem("COMPRESSION",gds_input->GetMetadataItem( "COMPRESSION", "IMAGE_STRUCTURE"),"IMAGE_STRUCTURE");</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// if(gds_input->GetProjectionRef()!=NULL){</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// gds_out->SetProjection(gds_input->GetProjectionRef());</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// double adfGeoTransform[6];</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// gds_input->GetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// gds_out->SetGeoTransform(adfGeoTransform);</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> GDALClose(gds_input);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> GDALClose(gds_mask);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> GDALClose(gds_out);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> GDALDumpOpenDatasets(stderr);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> GDALDestroyDriverManager();</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilter.html b/doc/html/pkfilter.html
new file mode 100644
index 0000000..ae2f69f
--- /dev/null
+++ b/doc/html/pkfilter.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfilter</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilter </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to filter raster images </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*] </code></p>
+<p><code> Options: [-dx value [-dy value] | -dz value] [-nodata value]</code></p>
+<p><code> Advanced options: check table </code></p>
+<h1><a class="anchor" id="pkfilter_description"></a>
+Description</h1>
+<p>This utility implements spatial and spectral filtering for raster data. In the spatial domain (X, Y), the filter typically involves a rectangular convolution kernel (moving window). To avoid image shifting, the size of the window should be odd (3, 5, 7, ...). You can set the window sizes in X and Y directions separately with the options -dx and -dy. A circular kernel (disc) is applied if option -circ is set. An overview of the supported filters (option -f|–filter) is given below [...]
+<p><a class="anchor" id="pkfilter_functions"></a>hiero </p>
+<table class="doxtable">
+<tr>
+<th>composite rule </th><th>composite output </th></tr>
+<tr>
+<td>overwrite </td><td>Overwrite overlapping pixels: the latter input image on the command line overrules the previous image </td></tr>
+<tr>
+<td>maxndvi </td><td>Create a maximum NDVI (normalized difference vegetation index) composite from multi-band input images. Use option -cb to set the indexes of the red and near infrared bands respectively (e.g., -cb 0 -cb 1) </td></tr>
+<tr>
+<td>maxband </td><td>Select the pixel with a maximum value in the band specified by option -cb </td></tr>
+<tr>
+<td>minband </td><td>Select the pixel with a minimum value in the band specified by option -cb </td></tr>
+<tr>
+<td>mean </td><td>Calculate the mean (average) of overlapping pixels </td></tr>
+<tr>
+<td>stdev </td><td>Calculate the standard deviation of overlapping pixels </td></tr>
+<tr>
+<td>median </td><td>Calculate the median of overlapping pixels </td></tr>
+<tr>
+<td>mode </td><td>Select the mode of overlapping pixels (maximum voting): use for Byte images only </td></tr>
+<tr>
+<td>sum </td><td>Calculate the arithmetic sum of overlapping pixels </td></tr>
+<tr>
+<td>maxallbands </td><td>For each individual band, assign the maximum value found in all overlapping pixels. Unlike maxband, output band values cannot be attributed to a single (date) pixel in the input time series </td></tr>
+<tr>
+<td>minallbands </td><td>For each individual band, assign the minimum value found in all overlapping pixels. Unlike minband, output band values cannot be attributed to a single (date) pixel in the input time series </td></tr>
+</table>
+<h1><a class="anchor" id="pkfilter_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>f </td><td>filter </td><td>std::string </td><td></td><td>filter function (median, var, min, max, sum, mean, dilate, erode, close, open, homog (central pixel must be identical to all other pixels within window), heterog (central pixel must be different than all other pixels within window), sobelx (horizontal edge detection), sobely (vertical edge detection), sobelxy (diagonal edge detection NE-SW),sobelyx (diagonal edge detection NW-SE), smooth, density, countid, mode (majority voting [...]
+<tr>
+<td>srf </td><td>srf </td><td>std::string </td><td></td><td>list of ASCII files containing spectral response functions (two columns: wavelength response) </td></tr>
+<tr>
+<td>fwhm </td><td>fwhm </td><td>double </td><td></td><td>list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...) </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td>3 </td><td>filter kernel size in x, better use odd value to avoid image shift </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td>3 </td><td>filter kernel size in y, better use odd value to avoid image shift </td></tr>
+<tr>
+<td>dz </td><td>dz </td><td>int </td><td></td><td>filter kernel size in z (spectral/temporal dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>nodata value(s) (used for smoothnodata filter) </td></tr>
+<tr>
+<td>r </td><td>resampling-method </td><td>std::string </td><td>near </td><td>Resampling method for shifting operation (near: nearest neighbour, bilinear: bi-linear interpolation). </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>wt </td><td>wavelet </td><td>std::string </td><td>daubechies </td><td>wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered </td></tr>
+<tr>
+<td>wf </td><td>family </td><td>int </td><td>4 </td><td>wavelet family (vanishing moment, see also <a href="http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html">http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html</a>) </td></tr>
+<tr>
+<td>nl </td><td>nl </td><td>int </td><td>2 </td><td>Number of leftward (past) data points used in Savitzky-Golay filter) </td></tr>
+<tr>
+<td>nr </td><td>nr </td><td>int </td><td>2 </td><td>Number of rightward (future) data points used in Savitzky-Golay filter) </td></tr>
+<tr>
+<td>ld </td><td>ld </td><td>int </td><td>0 </td><td>order of the derivative desired in Savitzky-Golay filter (e.g., ld=0 for smoothed function) </td></tr>
+<tr>
+<td>m </td><td>m </td><td>int </td><td>2 </td><td>order of the smoothing polynomial in Savitzky-Golay filter, also equal to the highest conserved moment; usual values are m = 2 or m = 4) </td></tr>
+<tr>
+<td>class </td><td>class </td><td>short </td><td></td><td>class value(s) to use for density, erosion, dilation, openening and closing, thresholding </td></tr>
+<tr>
+<td>t </td><td>threshold </td><td>double </td><td>0 </td><td>threshold value(s) to use for threshold filter (one for each class), or threshold to cut for dwt_cut (use 0 to keep all) or dwt_cut_from, or sigma for shift </td></tr>
+<tr>
+<td>tap </td><td>tap </td><td>std::string </td><td></td><td>text file containing taps used for spatial filtering (from ul to lr). Use dimX and dimY to specify tap dimensions in x and y. Leave empty for not using taps </td></tr>
+<tr>
+<td>tapz </td><td>tapz </td><td>double </td><td></td><td>taps used for spectral filtering </td></tr>
+<tr>
+<td>pad </td><td>pad </td><td>std::string </td><td>symmetric </td><td>Padding method for filtering (how to handle edge effects). Choose between: symmetric, replicate, circular, zero (pad with 0). </td></tr>
+<tr>
+<td>win </td><td>wavelengthIn </td><td>double </td><td></td><td>list of wavelengths in input spectrum (-win band1 -win band2 ...) </td></tr>
+<tr>
+<td>wout </td><td>wavelengthOut </td><td>double </td><td></td><td>list of wavelengths in output spectrum (-wout band1 -wout band2 ...) </td></tr>
+<tr>
+<td>d </td><td>down </td><td>short </td><td>1 </td><td>down sampling factor. Use value 1 for no downsampling). Use value n>1 for downsampling (aggregation) </td></tr>
+<tr>
+<td>beta </td><td>beta </td><td>std::string </td><td></td><td>ASCII file with beta for each class transition in Markov Random Field </td></tr>
+<tr>
+<td>interp </td><td>interp </td><td>std::string </td><td>akima </td><td>type of interpolation for spectral filtering (see <a href="http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html">http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html</a>) </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table </td></tr>
+<tr>
+<td>circ </td><td>circular </td><td>bool </td><td>false </td><td>circular disc kernel for dilation and erosion </td></tr>
+</table>
+Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkfilter can be found <a class="el" href="md_examples_pkfilter.html#examples_pkfilter">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilter_8cc_source.html b/doc/html/pkfilter_8cc_source.html
new file mode 100644
index 0000000..94b57fc
--- /dev/null
+++ b/doc/html/pkfilter_8cc_source.html
@@ -0,0 +1,1044 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfilter.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilter.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfilter.cc: program to filter raster images: median, min/max, morphological, filtering</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/Filter2d.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "algorithms/Filter.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "fileclasses/FileReaderAscii.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">/*------------------</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> Main procedure</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> ----------------*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// Optionpk<std::string> tmpdir_opt("tmp", "tmp", "Temporary directory","/tmp",2);</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> disc_opt(<span class="stringliteral">"circ"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"circular disc kernel for dilation and erosion"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// Optionpk<double> angle_opt("a", "angle", "angle used for directional filtering in dilation (North=0, East=90, South=180, West=270).");</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> method_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"filter"</span>, <span class="stringliteral">"filter function (median, var, min, max, sum, mean, dilate, erode, close, open, homog (central pixel must be identical to all other pixels within window), heterog (central pixel must be dif [...]
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> resample_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"resampling-method"</span>, <span class="stringliteral">"Resampling method for shifting operation (near: nearest neighbour, bilinear: bi-linear interpolation)."</span>, <span class="stringliteral">"near"</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dimX_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"filter kernel size in x, better use odd value to avoid image shift"</span>, 3);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dimY_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"filter kernel size in y, better use odd value to avoid image shift"</span>, 3);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> dimZ_opt(<span class="stringliteral">"dz"</span>, <span class="stringliteral">"dz"</span>, <span class="stringliteral">"filter kernel size in z (spectral/temporal dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> wavelet_type_opt(<span class="stringliteral">"wt"</span>, <span class="stringliteral">"wavelet"</span>, <span class="stringliteral">"wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered"</span>, <span class="stringliteral">"daubechies"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> family_opt(<span class="stringliteral">"wf"</span>, <span class="stringliteral">"family"</span>, <span class="stringliteral">"wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html)"</span>, 4);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> savgolay_nl_opt(<span class="stringliteral">"nl"</span>, <span class="stringliteral">"nl"</span>, <span class="stringliteral">"Number of leftward (past) data points used in Savitzky-Golay filter)"</span>, 2);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> savgolay_nr_opt(<span class="stringliteral">"nr"</span>, <span class="stringliteral">"nr"</span>, <span class="stringliteral">"Number of rightward (future) data points used in Savitzky-Golay filter)"</span>, 2);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> savgolay_ld_opt(<span class="stringliteral">"ld"</span>, <span class="stringliteral">"ld"</span>, <span class="stringliteral">"order of the derivative desired in Savitzky-Golay filter (e.g., ld=0 for smoothed function)"</span>, 0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> savgolay_m_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"m"</span>, <span class="stringliteral">"order of the smoothing polynomial in Savitzky-Golay filter, also equal to the highest conserved moment; usual values are m = 2 or m = 4)"</span>, 2);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> class_opt(<span class="stringliteral">"class"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"class value(s) to use for density, erosion, dilation, openening and closing, thresholding"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> threshold_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"threshold"</span>, <span class="stringliteral">"threshold value(s) to use for threshold filter (one for each class), or threshold to cut for dwt_cut (use 0 to keep all) or dwt_cut_from, or sigma for shift"</span>, 0);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value(s) (used for smoothnodata filter)"</span>);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> tap_opt(<span class="stringliteral">"tap"</span>, <span class="stringliteral">"tap"</span>, <span class="stringliteral">"text file containing taps used for spatial filtering (from ul to lr). Use dimX and dimY to specify tap dimensions in x and y. Leave empty for not using taps"</span>);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> tapz_opt(<span class="stringliteral">"tapz"</span>, <span class="stringliteral">"tapz"</span>, <span class="stringliteral">"taps used for spectral filtering"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> padding_opt(<span class="stringliteral">"pad"</span>,<span class="stringliteral">"pad"</span>, <span class="stringliteral">"Padding method for filtering (how to handle edge effects). Choose between: symmetric, replicate, circular, zero (pad with 0)."</span>, <span class="stringliteral">"symmetric"</spa [...]
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> fwhm_opt(<span class="stringliteral">"fwhm"</span>, <span class="stringliteral">"fwhm"</span>, <span class="stringliteral">"list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...)"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> srf_opt(<span class="stringliteral">"srf"</span>, <span class="stringliteral">"srf"</span>, <span class="stringliteral">"list of ASCII files containing spectral response functions (two columns: wavelength response)"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> wavelengthIn_opt(<span class="stringliteral">"win"</span>, <span class="stringliteral">"wavelengthIn"</span>, <span class="stringliteral">"list of wavelengths in input spectrum (-win band1 -win band2 ...)"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> wavelengthOut_opt(<span class="stringliteral">"wout"</span>, <span class="stringliteral">"wavelengthOut"</span>, <span class="stringliteral">"list of wavelengths in output spectrum (-wout band1 -wout band2 ...)"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> interpolationType_opt(<span class="stringliteral">"interp"</span>, <span class="stringliteral">"interp"</span>, <span class="stringliteral">"type of interpolation for spectral filtering (see http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html)"</span>,<span class="stringliteral">" [...]
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>,<span class="stringl [...]
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> down_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"down"</span>, <span class="stringliteral">"down sampling factor. Use value 1 for no downsampling). Use value n>1 for downsampling (aggregation)"</span>, 1);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> beta_opt(<span class="stringliteral">"beta"</span>, <span class="stringliteral">"beta"</span>, <span class="stringliteral">"ASCII file with beta for each class transition in Markov Random Field"</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// Optionpk<double> eps_opt("eps","eps", "error marging for linear feature",0);</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// Optionpk<bool> l1_opt("l1","l1", "obtain longest object length for linear feature",false);</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// Optionpk<bool> l2_opt("l2","l2", "obtain shortest object length for linear feature",false,2);</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// Optionpk<bool> a1_opt("a1","a1", "obtain angle found for longest object length for linear feature",false);</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// Optionpk<bool> a2_opt("a2","a2", "obtain angle found for shortest object length for linear feature",false);</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> resample_opt.setHide(1);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> wavelet_type_opt.setHide(1);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> family_opt.setHide(1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> savgolay_nl_opt.setHide(1);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> savgolay_nr_opt.setHide(1);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> savgolay_ld_opt.setHide(1);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> savgolay_m_opt.setHide(1);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> class_opt.setHide(1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> threshold_opt.setHide(1);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> tap_opt.setHide(1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> tapz_opt.setHide(1);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> padding_opt.setHide(1);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> wavelengthIn_opt.setHide(1);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> wavelengthOut_opt.setHide(1);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> down_opt.setHide(1);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> beta_opt.setHide(1);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// eps_opt.setHide(1);</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// l1_opt.setHide(1);</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// l2_opt.setHide(1);</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// a1_opt.setHide(1);</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// a2_opt.setHide(1);</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> interpolationType_opt.setHide(1);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> otype_opt.setHide(1);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> oformat_opt.setHide(1);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> disc_opt.setHide(1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// tmpdir_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// angle_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> method_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> srf_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> fwhm_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> dimX_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> dimY_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> dimZ_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> resample_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> wavelet_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> family_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> savgolay_nl_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> savgolay_nr_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> savgolay_ld_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> savgolay_m_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> class_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> threshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> tap_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> tapz_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> padding_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> wavelengthIn_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> wavelengthOut_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> down_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> beta_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// eps_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// l1_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// l2_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// a1_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// a2_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> interpolationType_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> disc_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> exit(0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> cout << endl;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> cout << <span class="stringliteral">"Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*]"</span> << endl;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> cout << endl;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">//not implemented yet, must debug first...</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> vector<double> angle_opt;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> output;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> cerr << <span class="stringliteral">"Error: no input file selected, use option -i"</span> << endl;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> exit(1);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> cerr << <span class="stringliteral">"Error: no output file selected, use option -o"</span> << endl;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> exit(1);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> input.open(input_opt[0]);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> theType=input.getDataType();</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> std::cout << std::endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">string</span> imageType=input.getImageType();</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span>(oformat_opt.size())</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> theInterleave+=input.getInterleave();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">int</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(fwhm_opt.size())</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> nband=fwhm_opt.size();</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(srf_opt.size())</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> nband=srf_opt.size();</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(tap_opt.size()||tapz_opt.size())</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(method_opt.empty()){</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> cerr << <span class="stringliteral">"Error: no filter selected, use option -f"</span> << endl;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> exit(1);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">switch</span>(filter2d::Filter2d::getFilterType(method_opt[0])){</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">case</span>(filter2d::dilate):</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">case</span>(filter2d::erode):</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">case</span>(filter2d::close):</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">case</span>(filter2d::open):</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">case</span>(filter2d::smooth):</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">//implemented in spectral/temporal domain (dimZ>1) and spatial domain</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span>(dimZ_opt.size())</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> assert(dimZ_opt[0]>1);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">case</span>(filter2d::dwt):</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">case</span>(filter2d::dwti):</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">case</span>(filter2d::dwt_cut):</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">case</span>(filter2d::smoothnodata):</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">//implemented in spectral/temporal/spatial domain and nband always input.nrOfBand()</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">case</span>(filter2d::savgolay):</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span>(dimZ_opt.empty())</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> dimZ_opt.push_back(1);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">case</span>(filter2d::dwt_cut_from):</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">//only implemented in spectral/temporal domain</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> assert(threshold_opt.size());</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> cerr << <span class="stringliteral">"filter not implemented in spectral/temporal domain"</span> << endl;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> exit(1);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">case</span>(filter2d::mrf):<span class="comment">//deliberate fall through</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> assert(class_opt.size()>1);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> std::cout << <span class="stringliteral">"opening output image "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> nband=class_opt.size();</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">case</span>(filter2d::ismin):</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">case</span>(filter2d::ismax):</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">case</span>(filter2d::shift):</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">case</span>(filter2d::scramble):</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">case</span>(filter2d::mode):</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">case</span>(filter2d::sobelx):</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">case</span>(filter2d::sobely):</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">case</span>(filter2d::sobelxy):</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">case</span>(filter2d::countid):</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">case</span>(filter2d::order):</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">case</span>(filter2d::density):</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">case</span>(filter2d::homog):</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">case</span>(filter2d::heterog):</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">//only implemented in spatial domain</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> cerr << <span class="stringliteral">"filter not implemented in spectral/temporal domain"</span> << endl;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> exit(1);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// case(filter2d::percentile):</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// //implemented in spectral/temporal/spatial domain and nband 1 if dimZ>0</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// if(dimZ_opt.size()){</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment">// dimZ_opt[0]=1;</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">// nband=1;</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment">// nband=input.nrOfBand();</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">case</span>(filter2d::sum):</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">case</span>(filter2d::mean):</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">case</span>(filter2d::min):</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">case</span>(filter2d::max):</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">case</span>(filter2d::var):</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">case</span>(filter2d::stdev):</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">case</span>(filter2d::median):</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">case</span>(filter2d::percentile):</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">//implemented in spectral/temporal/spatial domain and nband 1 if dimZ==1</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>(dimZ_opt.size()==1)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">if</span>(dimZ_opt[0]==1)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> nband=1;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> nband=input.nrOfBand();</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> cerr << <span class="stringliteral">"filter not implemented"</span> << endl;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> exit(1);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">// if(dimZ_opt.size())</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">// nband=dimZ_opt[0];</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">// nband=input.nrOfBand();</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> }</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cout << <span class="stringliteral">"opening output image "</span> << output_opt[0] << <span class="stringliteral">" with "</span> << nband << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> output.open(output_opt[0],(input.nrOfCol()+down_opt[0]-1)/down_opt[0],(input.nrOfRow()+down_opt[0]-1)/down_opt[0],nband,theType,imageType,option_opt);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> exit(4);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> output.setProjection(input.getProjection());</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> input.getGeoTransform(gt);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> gt[1]*=down_opt[0];<span class="comment">//dx</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> gt[5]*=down_opt[0];<span class="comment">//dy</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> output.setGeoTransform(gt);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> cout << <span class="stringliteral">"set colortable "</span> << colorTable_opt[0] << endl;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> assert(output.getDataType()==GDT_Byte);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> output.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(input.getColorTable()!=NULL)</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> output.setColorTable(input.getColorTable());</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<output.nrOfBand();++iband)</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> output.GDALSetNoDataValue(nodata_opt[0],iband);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <a class="code" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a> filter2d;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <a class="code" href="classfilter_1_1Filter.html">filter::Filter</a> filter1d;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> cout << <span class="stringliteral">"Set padding to "</span> << padding_opt[0] << endl;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> filter1d.setPadding(padding_opt[0]);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">if</span>(class_opt.size()){</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> std::cout<< <span class="stringliteral">"class values: "</span>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span>(!dimZ_opt.size())</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> filter2d.pushClass(class_opt[iclass]);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> filter1d.pushClass(class_opt[iclass]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> std::cout<< class_opt[iclass] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> }</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> std::cout<< std::endl;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> std::cout<< <span class="stringliteral">"mask values: "</span>;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<nodata_opt.size();++imask){</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> std::cout<< nodata_opt[imask] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> filter1d.pushNoDataValue(nodata_opt[imask]);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> filter2d.pushNoDataValue(nodata_opt[imask]);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> std::cout<< std::endl;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span>(tap_opt.size()){</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> ifstream tapfile(tap_opt[0].c_str());</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> assert(tapfile);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <a class="code" href="classVector2d.html">Vector2d<double></a> taps(dimY_opt[0],dimX_opt[0]);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<dimY_opt[0];++j){</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dimX_opt[0];++i){</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> tapfile >> taps[j][i];</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> std::cout << <span class="stringliteral">"taps: "</span>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<dimY_opt[0];++j){</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<dimX_opt[0];++i){</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> std::cout<< taps[j][i] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> }</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> std::cout<< std::endl;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> filter2d.setTaps(taps);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> filter2d.filter(input,output);</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> tapfile.close();</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(tapz_opt.size()){</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> std::cout << <span class="stringliteral">"taps: "</span>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<tapz_opt.size();++itap)</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> std::cout<< tapz_opt[itap] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> std::cout<< std::endl;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> filter1d.setTaps(tapz_opt);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> filter1d.filter(input,output);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(fwhm_opt.size()){</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> std::cout << <span class="stringliteral">"spectral filtering to "</span> << fwhm_opt.size() << <span class="stringliteral">" bands with provided fwhm "</span> << std::endl;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> assert(wavelengthOut_opt.size()==fwhm_opt.size());</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> assert(wavelengthIn_opt.size());</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(wavelengthOut_opt.size(),input.nrOfCol());</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span>((y+1+down_opt[0]/2)%down_opt[0])</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> filter1d.applyFwhm<<span class="keywordtype">double</span>>(wavelengthIn_opt,lineInput,wavelengthOut_opt,fwhm_opt, interpolationType_opt[0], lineOutput, down_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<output.nrOfBand();++iband){</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> output.writeData(lineOutput[iband],GDT_Float64,y/down_opt[0],iband);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> cerr << errorstring << <span class="stringliteral">"in band "</span> << iband << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> }</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(srf_opt.size()){</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> std::cout << <span class="stringliteral">"spectral filtering to "</span> << srf_opt.size() << <span class="stringliteral">" bands with provided SRF "</span> << std::endl;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> assert(wavelengthIn_opt.size());</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> vector< Vector2d<double> > srf(srf_opt.size());<span class="comment">//[0] srf_nr, [1]: wavelength, [2]: response</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> ifstream srfFile;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isrf=0;isrf<srf_opt.size();++isrf){</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> srf[isrf].resize(2);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> srfFile.open(srf_opt[isrf].c_str());</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="comment">//add 0 to make sure srf is 0 at boundaries after interpolation step</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> srf[isrf][0].push_back(0);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> srf[isrf][0].push_back(1);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">while</span>(srfFile >> v){</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> srf[isrf][0].push_back(v);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> srfFile >> v;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> srf[isrf][1].push_back(v);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> srfFile.close();</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment">//add 0 to make sure srf[isrf] is 0 at boundaries after interpolation step</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> srf[isrf][0].push_back(srf[isrf][0].back()+1);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> srf[isrf][1].push_back(0); </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> srf[isrf][0].push_back(srf[isrf][0].back()+1);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> cout << <span class="stringliteral">"srf file details: "</span> << srf[isrf][0].size() << <span class="stringliteral">" wavelengths defined"</span> << endl; </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> }</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> assert(output.nrOfBand()==srf.size());</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordtype">double</span> centreWavelength=0;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(input.nrOfBand(),input.nrOfCol());</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> y=0;y<input.nrOfRow();++y){</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>((y+1+down_opt[0]/2)%down_opt[0])</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<input.nrOfBand();++iband)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> input.readData(lineInput[iband],GDT_Float64,y,iband);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isrf=0;isrf<srf.size();++isrf){</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> vector<double> lineOutput(output.nrOfCol());</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordtype">double</span> delta=1.0;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordtype">bool</span> normalize=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> centreWavelength=filter1d.applySrf<<span class="keywordtype">double</span>>(wavelengthIn_opt,lineInput,srf[isrf], interpolationType_opt[0], lineOutput, delta, normalize);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> std::cout << <span class="stringliteral">"centre wavelength srf "</span> << isrf << <span class="stringliteral">": "</span> << centreWavelength << std::endl;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> output.writeData(lineOutput,GDT_Float64,y/down_opt[0],isrf);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> cerr << errorstring << <span class="stringliteral">"in srf "</span> << srf_opt[isrf] << <span class="stringliteral">", line "</span> << y << endl;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> }</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> progress=(1.0+y)/output.nrOfRow();</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> }</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">switch</span>(filter2d::Filter2d::getFilterType(method_opt[0])){</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">case</span>(filter2d::dilate):</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> std::cerr << <span class="stringliteral">"Error: down option not supported for morphological operator"</span> << std::endl;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> exit(1);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> std::cout<< <span class="stringliteral">"1-D filtering: dilate"</span> << std::endl;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> filter1d.morphology(input,output,<span class="stringliteral">"dilate"</span>,dimZ_opt[0],verbose_opt[0]);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> filter2d.morphology(input,output,<span class="stringliteral">"dilate"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> }</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">case</span>(filter2d::erode):</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> std::cerr << <span class="stringliteral">"Error: down option not supported for morphological operator"</span> << std::endl;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> exit(1);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(dimZ_opt.size()>0){</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> std::cout<< <span class="stringliteral">"1-D filtering: dilate"</span> << std::endl;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> filter1d.morphology(input,output,<span class="stringliteral">"erode"</span>,dimZ_opt[0]);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> }</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> filter2d.morphology(input,output,<span class="stringliteral">"erode"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> }</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> }</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">case</span>(filter2d::close):{<span class="comment">//closing</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> std::cerr << <span class="stringliteral">"Error: down option not supported for morphological operator"</span> << std::endl;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> exit(1);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> }</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> tmpout;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> tmpout.open(<span class="stringliteral">"/vsimem/dilation.tif"</span>,input.nrOfCol(),input.nrOfRow(),input.nrOfBand(),input.getDataType(),input.getImageType());</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> filter1d.morphology(input,tmpout,<span class="stringliteral">"dilate"</span>,dimZ_opt[0]);</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> filter2d.morphology(input,tmpout,<span class="stringliteral">"dilate"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> }</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> std::cout<< errorString;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> exit(1);</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> tmpout.close();</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> tmpin;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> tmpin.open(<span class="stringliteral">"/vsimem/dilation.tif"</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> filter1d.morphology(tmpin,output,<span class="stringliteral">"erode"</span>,dimZ_opt[0]);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> }</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> filter2d.morphology(tmpin,output,<span class="stringliteral">"erode"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> tmpin.close();</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">case</span>(filter2d::open):{<span class="comment">//opening</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> std::cerr << <span class="stringliteral">"Error: down option not supported for morphological operator"</span> << std::endl;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> exit(1);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> }</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> tmpout;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> tmpout.open(<span class="stringliteral">"/vsimem/erosion.tif"</span>,input.nrOfCol(),input.nrOfRow(),input.nrOfBand(),input.getDataType(),input.getImageType());</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> filter1d.morphology(input,tmpout,<span class="stringliteral">"erode"</span>,dimZ_opt[0]);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> filter2d.morphology(input,tmpout,<span class="stringliteral">"erode"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> }</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> std::cout<< errorString;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> exit(1);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> }</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> tmpout.close();</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> tmpin;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> tmpin.open(<span class="stringliteral">"/vsimem/erosion.tif"</span>);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> filter1d.morphology(tmpin,output,<span class="stringliteral">"dilate"</span>,dimZ_opt[0]);</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> filter2d.morphology(tmpin,output,<span class="stringliteral">"dilate"</span>,dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> tmpin.close();</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> tmpout.close();</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> }</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">case</span>(filter2d::homog):{<span class="comment">//spatially homogeneous</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> filter2d.doit(input,output,<span class="stringliteral">"homog"</span>,dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> }</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">case</span>(filter2d::heterog):{<span class="comment">//spatially heterogeneous</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> filter2d.doit(input,output,<span class="stringliteral">"heterog"</span>,dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> }</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">case</span>(filter2d::shift):{<span class="comment">//shift</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> std::cerr << <span class="stringliteral">"Error: down option not supported for shift operator"</span> << std::endl;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> exit(1);</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> assert(input.nrOfBand());</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> assert(input.nrOfCol());</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> assert(input.nrOfRow());</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> filter2d.shift(input,output,dimX_opt[0],dimY_opt[0],threshold_opt[0],filter2d::Filter2d::getResampleType(resample_opt[0]));</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> }</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> }</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="comment">// case(filter2d::linearfeature):{</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">// if(down_opt[0]!=1){</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment">// std::cerr << "Error: down option not supported for linear feature" << std::endl;</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// assert(input.nrOfBand());</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment">// assert(input.nrOfCol());</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="comment">// assert(input.nrOfRow());</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="comment">// float theAngle=361;</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="comment">// if(angle_opt.size())</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="comment">// theAngle=angle_opt[0];</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="comment">// std::cout << "using angle " << theAngle << std::endl;</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="comment">// //using an angle step of 5 degrees and no maximum distance</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="comment">// filter2d.linearFeature(input,output,theAngle,5,0,eps_opt[0],l1_opt[0],a1_opt[0],l2_opt[0],a2_opt[0],0,verbose_opt[0]);</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment">// catch(string errorstring){</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="comment">// cerr << errorstring << endl;</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keywordflow">case</span>(filter2d::mrf):{<span class="comment">//Markov Random Field</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> std::cout << <span class="stringliteral">"Markov Random Field filtering"</span> << std::endl;</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span>(beta_opt.size()){</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="comment">//in file: classFrom classTo</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="comment">//in variable: beta[classTo][classFrom]</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a> betaReader(beta_opt[0]);</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <a class="code" href="classVector2d.html">Vector2d<double></a> beta(class_opt.size(),class_opt.size());</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> vector<int> cols(class_opt.size());</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass)</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> cols[iclass]=iclass;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> betaReader.readData(beta,cols);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> std::cout << <span class="stringliteral">"using values for beta:"</span> << std::endl;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass1=0;iclass1<class_opt.size();++iclass1)</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> std::cout << <span class="stringliteral">" "</span> << iclass1 << <span class="stringliteral">" ("</span> << class_opt[iclass1] << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass1=0;iclass1<class_opt.size();++iclass1){</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> std::cout << iclass1 << <span class="stringliteral">" ("</span> << class_opt[iclass1] << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass2=0;iclass2<class_opt.size();++iclass2)</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> std::cout << <span class="stringliteral">" "</span> << beta[iclass2][iclass1] << <span class="stringliteral">" ("</span> << class_opt[iclass2] << <span class="stringliteral">")"</span>;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], beta, <span class="keyword">true</span>, down_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> }</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], 1, <span class="keyword">true</span>, down_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> }</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> }</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> }</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">case</span>(filter2d::sobelx):{<span class="comment">//Sobel edge detection in X</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> std::cerr << <span class="stringliteral">"Error: down option not supported for sobel edge detection"</span> << std::endl;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> exit(1);</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <a class="code" href="classVector2d.html">Vector2d<double></a> theTaps(3,3);</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> theTaps[0][0]=-1.0;</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> theTaps[0][1]=0.0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> theTaps[0][2]=1.0;</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> theTaps[1][0]=-2.0;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> theTaps[1][1]=0.0;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> theTaps[1][2]=2.0;</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> theTaps[2][0]=-1.0;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> theTaps[2][1]=0.0;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> theTaps[2][2]=1.0;</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> filter2d.setTaps(theTaps);</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> filter2d.filter(input,output,<span class="keyword">true</span>,<span class="keyword">true</span>);<span class="comment">//absolute and normalize</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> }</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">case</span>(filter2d::sobely):{<span class="comment">//Sobel edge detection in Y</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> std::cerr << <span class="stringliteral">"Error: down option not supported for sobel edge detection"</span> << std::endl;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> exit(1);</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <a class="code" href="classVector2d.html">Vector2d<double></a> theTaps(3,3);</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> theTaps[0][0]=1.0;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> theTaps[0][1]=2.0;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> theTaps[0][2]=1.0;</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> theTaps[1][0]=0.0;</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> theTaps[1][1]=0.0;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> theTaps[1][2]=0.0;</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> theTaps[2][0]=-1.0;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> theTaps[2][1]=-2.0;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> theTaps[2][2]=-1.0;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> filter2d.setTaps(theTaps);</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> filter2d.filter(input,output,<span class="keyword">true</span>,<span class="keyword">true</span>);<span class="comment">//absolute and normalize</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> }</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> }</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">case</span>(filter2d::sobelxy):{<span class="comment">//Sobel edge detection in XY</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> std::cerr << <span class="stringliteral">"Error: down option not supported for sobel edge detection"</span> << std::endl;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> exit(1);</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> }</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <a class="code" href="classVector2d.html">Vector2d<double></a> theTaps(3,3);</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> theTaps[0][0]=0.0;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> theTaps[0][1]=1.0;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> theTaps[0][2]=2.0;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> theTaps[1][0]=-1.0;</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> theTaps[1][1]=0.0;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> theTaps[1][2]=1.0;</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> theTaps[2][0]=-2.0;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> theTaps[2][1]=-1.0;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> theTaps[2][2]=0.0;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> filter2d.setTaps(theTaps);</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> filter2d.filter(input,output,<span class="keyword">true</span>,<span class="keyword">true</span>);<span class="comment">//absolute and normalize</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> }</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">case</span>(filter2d::sobelyx):{<span class="comment">//Sobel edge detection in XY</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> std::cerr << <span class="stringliteral">"Error: down option not supported for sobel edge detection"</span> << std::endl;</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> exit(1);</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <a class="code" href="classVector2d.html">Vector2d<double></a> theTaps(3,3);</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> theTaps[0][0]=2.0;</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> theTaps[0][1]=1.0;</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> theTaps[0][2]=0.0;</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> theTaps[1][0]=1.0;</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> theTaps[1][1]=0.0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> theTaps[1][2]=-1.0;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> theTaps[2][0]=0.0;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> theTaps[2][1]=-1.0;</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> theTaps[2][2]=-2.0;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> filter2d.setTaps(theTaps);</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> filter2d.filter(input,output,<span class="keyword">true</span>,<span class="keyword">true</span>);<span class="comment">//absolute and normalize</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> }</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">case</span>(filter2d::smooth):{<span class="comment">//Smoothing filter</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> exit(1);</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> }</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> std::cout<< <span class="stringliteral">"1-D filtering: smooth"</span> << std::endl;</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> filter1d.smooth(input,output,dimZ_opt[0]);</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> }</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> filter2d.smooth(input,output,dimX_opt[0],dimY_opt[0]);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> }</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordflow">case</span>(filter2d::smoothnodata):{<span class="comment">//Smoothing filter</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> exit(1);</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> }</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> std::cout<< <span class="stringliteral">"1-D filtering: smooth"</span> << std::endl;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> filter1d.smoothNoData(input,interpolationType_opt[0],output);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> }</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> std::cout<< <span class="stringliteral">"2-D filtering: smooth"</span> << std::endl;</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> filter2d.smoothNoData(input,output,dimX_opt[0],dimY_opt[0]);</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> }</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> }</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> }</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> }</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">case</span>(filter2d::dwt):</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> exit(1);</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> }</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> std::cout<< <span class="stringliteral">"DWT in spectral domain"</span> << std::endl;</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> filter1d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> }</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> filter2d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> }</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> }</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">case</span>(filter2d::dwti):</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> exit(1);</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> }</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> std::cout<< <span class="stringliteral">"inverse DWT in spectral domain"</span> << std::endl;</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> filter1d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> }</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> filter2d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> }</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">case</span>(filter2d::dwt_cut):</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> exit(1);</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> std::cout<< <span class="stringliteral">"DWT approximation in spectral domain"</span> << std::endl;</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> filter1d.dwtCut(input, output, wavelet_type_opt[0], family_opt[0], threshold_opt[0]);</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> }</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> filter2d.dwtCut(input, output, wavelet_type_opt[0], family_opt[0], threshold_opt[0]);</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">case</span>(filter2d::dwt_cut_from):</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keywordflow">if</span>(down_opt[0]!=1){</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> std::cerr << <span class="stringliteral">"Error: down option not supported for this filter"</span> << std::endl;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> exit(1);</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> }</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> std::cout<< <span class="stringliteral">"DWT approximation in spectral domain"</span> << std::endl;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> filter1d.dwtCutFrom(input, output, wavelet_type_opt[0], family_opt[0], static_cast<int>(threshold_opt[0]));</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordtype">string</span> errorString=<span class="stringliteral">"Error: this filter is not supported in 2D"</span>;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> }</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> }</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">case</span>(filter2d::savgolay):{</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> assert(savgolay_nl_opt.size());</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> assert(savgolay_nr_opt.size());</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> assert(savgolay_ld_opt.size());</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> assert(savgolay_m_opt.size());</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> std::cout << <span class="stringliteral">"Calculating Savitzky-Golay coefficients: "</span> << endl;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> filter1d.getSavGolayCoefficients(tapz_opt, input.nrOfBand(), savgolay_nl_opt[0], savgolay_nr_opt[0], savgolay_ld_opt[0], savgolay_m_opt[0]);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> std::cout << <span class="stringliteral">"taps (size is "</span> << tapz_opt.size() << <span class="stringliteral">"): "</span>;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> itap=0;itap<tapz_opt.size();++itap)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> std::cout<< tapz_opt[itap] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> std::cout<< std::endl;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> filter1d.setTaps(tapz_opt);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> filter1d.filter(input,output);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> }</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordflow">case</span>(filter2d::percentile):<span class="comment">//deliberate fall through</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordflow">case</span>(filter2d::threshold):<span class="comment">//deliberate fall through</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> assert(threshold_opt.size());</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">if</span>(dimZ_opt.size())</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> filter1d.setThresholds(threshold_opt);</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> filter2d.setThresholds(threshold_opt);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">case</span>(filter2d::density):<span class="comment">//deliberate fall through</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> filter2d.setClasses(class_opt);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> std::cout << <span class="stringliteral">"classes set"</span> << std::endl;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">if</span>(dimZ_opt.size()){</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">if</span>(dimZ_opt[0]==1)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> filter1d.stat(input,output,method_opt[0]);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> assert(down_opt[0]==1);<span class="comment">//not implemented yet...</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> filter1d.filter(input,output,method_opt[0],dimZ_opt[0]);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> filter2d.doit(input,output,method_opt[0],dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> }</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> }</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> input.close();</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> output.close();</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> }</div>
+<div class="ttc" id="classFileReaderAscii_html"><div class="ttname"><a href="classFileReaderAscii.html">FileReaderAscii</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderAscii_8h_source.html#l00030">FileReaderAscii.h:30</a></div></div>
+<div class="ttc" id="classfilter_1_1Filter_html"><div class="ttname"><a href="classfilter_1_1Filter.html">filter::Filter</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter_8h_source.html#l00040">Filter.h:40</a></div></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classfilter2d_1_1Filter2d_html"><div class="ttname"><a href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter2d_8h_source.html#l00065">Filter2d.h:65</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilter__spatial_8py_source.html b/doc/html/pkfilter__spatial_8py_source.html
new file mode 100644
index 0000000..d8b3c71
--- /dev/null
+++ b/doc/html/pkfilter__spatial_8py_source.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkfilter_spatial.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilter_spatial.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkfilter_spatial.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">pkfilter_spatial</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> METHOD_OPTIONS = [<span class="stringliteral">"none"</span>, <span class="stringliteral">"median"</span>, <span class="stringliteral">"var"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"sum"</span>, <span class="stringliteral">"mean"</span>, <span class="stringlite [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> METHOD = <span class="stringliteral">"METHOD"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"># RESAMPLE_OPTIONS = ['near', 'bilinear']</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"># RESAMPLE = "RESAMPLE"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> DIM = <span class="stringliteral">"DIM"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> PADDING_OPTIONS = [<span class="stringliteral">"symmetric"</span>, <span class="stringliteral">"replicate"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"zero"</span>]</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> PADDING = <span class="stringliteral">"PADDING"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkfilter"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#abb1b57dd0e00851665ec24a1df526ab6">name</a> = <span class="stringliteral">"spatial filter"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ab468aa6da0990f5884debd8bfbe27e21">group</a> = <span class="stringliteral">"[pktools] filter"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#aab43173cb62c16cccd2311cc2351ea72">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17c23d864a0778596b436f6fdb864de5">METHOD</a>,<span class="stringliteral">"filter rule"</span>,self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#af2ee51651a6a19a6922db57a4d72d549">METHOD_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17420bcb37a89c2b89f4531ab6180de0">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a556dd033f6fbe62238ea73f26f142752">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac9bc83f6c62747fafd30efecb13c5d62">TYPE</a>, 0))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac31abd8117f135e1e7f43bcbdd8456c9">DIM</a>, <span class="stringliteral">"Filter kernel size (odd value)"</span>,0.0,<span class="keywordtype">None</span>,3.0))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">#for smooth nodata:</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a241b1a8c1933b44e84da25c708a93e61">NODATA</a>, <span class="stringliteral">"invalid value(s) for input raster dataset (e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a359fadbd1e77c36bfa229b1708b364a0">PADDING</a>,<span class="stringliteral">"Padding (edge effects)"</span>,self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a199b3a2d3018c67ea5046c7c38a9e974">PADDING_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"># self.addParameter(ParameterSelection(self.RESAMPLE,"resampling method",self.RESAMPLE_OPTIONS, 0))</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a1a3a4d8cc8523b66376f621feed86909">EXTRA</a>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a8517fc04fd5f13c52e174efc16736f83">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> commands = [cliPath]</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#aab43173cb62c16cccd2311cc2351ea72">INPUT</a>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span> input != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> method=self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#af2ee51651a6a19a6922db57a4d72d549">METHOD_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17c23d864a0778596b436f6fdb864de5">METHOD</a>)]</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> method != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> commands.append(<span class="stringliteral">"-f"</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands.append(method)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> commands.append(<span class="stringliteral">"-pad"</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a199b3a2d3018c67ea5046c7c38a9e974">PADDING_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a359fadbd1e77c36bfa229b1708b364a0">PADDING</a>)])</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac9bc83f6c62747fafd30efecb13c5d62">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a556dd033f6fbe62238ea73f26f142752">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> commands.append(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac9bc83f6c62747fafd30efecb13c5d62">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a556dd033f6fbe62238ea73f26f142752">RTYPE</a>)])</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17420bcb37a89c2b89f4531ab6180de0">OUTPUT</a>)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac31abd8117f135e1e7f43bcbdd8456c9">DIM</a>) != 0:</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> commands.append(<span class="stringliteral">"-dx"</span>)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac31abd8117f135e1e7f43bcbdd8456c9">DIM</a>)))</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">"-dy"</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac31abd8117f135e1e7f43bcbdd8456c9">DIM</a>)))</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a241b1a8c1933b44e84da25c708a93e61">NODATA</a>)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> nodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> nodataValues = nodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">for</span> nodataValue <span class="keywordflow">in</span> nodataValues:</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a1a3a4d8cc8523b66376f621feed86909">EXTRA</a>))</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> commands.append(extra)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_af2ee51651a6a19a6922db57a4d72d549"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#af2ee51651a6a19a6922db57a4d72d549">qgis.pkfilter_spatial.pkfilter_spatial.METHOD_OPTIONS</a></div><div class="ttdeci">list METHOD_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00042">pkfilter_spatial.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_ac31abd8117f135e1e7f43bcbdd8456c9"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac31abd8117f135e1e7f43bcbdd8456c9">qgis.pkfilter_spatial.pkfilter_spatial.DIM</a></div><div class="ttdeci">string DIM</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00046">pkfilter_spatial.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a359fadbd1e77c36bfa229b1708b364a0"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a359fadbd1e77c36bfa229b1708b364a0">qgis.pkfilter_spatial.pkfilter_spatial.PADDING</a></div><div class="ttdeci">string PADDING</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00049">pkfilter_spatial.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a1a3a4d8cc8523b66376f621feed86909"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a1a3a4d8cc8523b66376f621feed86909">qgis.pkfilter_spatial.pkfilter_spatial.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00052">pkfilter_spatial.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_aab43173cb62c16cccd2311cc2351ea72"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#aab43173cb62c16cccd2311cc2351ea72">qgis.pkfilter_spatial.pkfilter_spatial.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00040">pkfilter_spatial.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a199b3a2d3018c67ea5046c7c38a9e974"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a199b3a2d3018c67ea5046c7c38a9e974">qgis.pkfilter_spatial.pkfilter_spatial.PADDING_OPTIONS</a></div><div class="ttdeci">list PADDING_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00048">pkfilter_spatial.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a17c23d864a0778596b436f6fdb864de5"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17c23d864a0778596b436f6fdb864de5">qgis.pkfilter_spatial.pkfilter_spatial.METHOD</a></div><div class="ttdeci">string METHOD</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00043">pkfilter_spatial.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a556dd033f6fbe62238ea73f26f142752"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a556dd033f6fbe62238ea73f26f142752">qgis.pkfilter_spatial.pkfilter_spatial.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00050">pkfilter_spatial.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html">qgis.pkfilter_spatial.pkfilter_spatial</a></div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00038">pkfilter_spatial.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a17420bcb37a89c2b89f4531ab6180de0"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a17420bcb37a89c2b89f4531ab6180de0">qgis.pkfilter_spatial.pkfilter_spatial.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00041">pkfilter_spatial.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a241b1a8c1933b44e84da25c708a93e61"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a241b1a8c1933b44e84da25c708a93e61">qgis.pkfilter_spatial.pkfilter_spatial.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00047">pkfilter_spatial.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_abb1b57dd0e00851665ec24a1df526ab6"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#abb1b57dd0e00851665ec24a1df526ab6">qgis.pkfilter_spatial.pkfilter_spatial.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00058">pkfilter_spatial.py:58</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_a8517fc04fd5f13c52e174efc16736f83"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#a8517fc04fd5f13c52e174efc16736f83">qgis.pkfilter_spatial.pkfilter_spatial.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00054">pkfilter_spatial.py:54</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_ab468aa6da0990f5884debd8bfbe27e21"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ab468aa6da0990f5884debd8bfbe27e21">qgis.pkfilter_spatial.pkfilter_spatial.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00059">pkfilter_spatial.py:59</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial_html_ac9bc83f6c62747fafd30efecb13c5d62"><div class="ttname"><a href="classqgis_1_1pkfilter__spatial_1_1pkfilter__spatial.html#ac9bc83f6c62747fafd30efecb13c5d62">qgis.pkfilter_spatial.pkfilter_spatial.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spatial_8py_source.html#l00051">pkfilter_spatial.py:51</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilter__spectral_8py_source.html b/doc/html/pkfilter__spectral_8py_source.html
new file mode 100644
index 0000000..503a272
--- /dev/null
+++ b/doc/html/pkfilter__spectral_8py_source.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkfilter_spectral.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilter_spectral.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkfilter_spectral.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">pkfilter_spectral</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> METHOD_OPTIONS = [<span class="stringliteral">"none"</span>, <span class="stringliteral">"median"</span>, <span class="stringliteral">"var"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"sum"</span>, <span class="stringliteral">"mean"</span>, <span class="stringlite [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> METHOD = <span class="stringliteral">"METHOD"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> DZ = <span class="stringliteral">"DZ"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> PADDING_OPTIONS = [<span class="stringliteral">"symmetric"</span>, <span class="stringliteral">"replicate"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"zero"</span>]</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> PADDING = <span class="stringliteral">"PADDING"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkfilter"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a85b2c92f62e8260f9f51d8d8f10ff44a">name</a> = <span class="stringliteral">"spectral/temporal filter"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ad21f52f89d4b6cbe06e4bf830a8f5678">group</a> = <span class="stringliteral">"[pktools] filter"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a20a6cee11be7abd9325358a564819d26">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a15c6950b12c57ff838be9ba415e28c8e">METHOD</a>,<span class="stringliteral">"filter rule"</span>,self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a88267ee3b205fbfc5e6823c693eb4e14">METHOD_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a0be5ed45033cae15184219a6485a396b">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ab8240d9589b85c133897e73224e6bcb2">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a43e8b1dc19ef86bee9a3c933f9f83529">TYPE</a>, 0))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#aeff20f41be397170c8e351d0aa74bc79">DZ</a>, <span class="stringliteral">"Filter kernel size"</span>,0.0,<span class="keywordtype">None</span>,1.0))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">#for smooth nodata:</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a68d3c2ee722166fa9d8ddf3151fd8e55">NODATA</a>, <span class="stringliteral">"nodata value to smooth(e.g., 0;255)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ae9fcf789fcc3b4871f5419bbce84511a">PADDING</a>,<span class="stringliteral">"Padding (edge effects)"</span>,self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a706e766bf47d4fab85e95879c6d657a4">PADDING_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a916a5975c9e4fc03fdf55a8a02dcb91e">EXTRA</a>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a67ee5ff2f1cb29dd15291e3ac0e5331c">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> commands = [cliPath]</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a20a6cee11be7abd9325358a564819d26">INPUT</a>)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span> input != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> method=self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a88267ee3b205fbfc5e6823c693eb4e14">METHOD_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a15c6950b12c57ff838be9ba415e28c8e">METHOD</a>)]</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> method != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">"-f"</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> commands.append(method)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> commands.append(<span class="stringliteral">"-pad"</span>)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> commands.append(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a706e766bf47d4fab85e95879c6d657a4">PADDING_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ae9fcf789fcc3b4871f5419bbce84511a">PADDING</a>)])</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a43e8b1dc19ef86bee9a3c933f9f83529">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ab8240d9589b85c133897e73224e6bcb2">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a43e8b1dc19ef86bee9a3c933f9f83529">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ab8240d9589b85c133897e73224e6bcb2">RTYPE</a>)])</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a0be5ed45033cae15184219a6485a396b">OUTPUT</a>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#aeff20f41be397170c8e351d0aa74bc79">DZ</a>) != 0:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">"-dz"</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#aeff20f41be397170c8e351d0aa74bc79">DZ</a>)))</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a68d3c2ee722166fa9d8ddf3151fd8e55">NODATA</a>)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> nodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> nodataValues = nodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span> nodataValue <span class="keywordflow">in</span> nodataValues:</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a916a5975c9e4fc03fdf55a8a02dcb91e">EXTRA</a>))</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(extra)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html">qgis.pkfilter_spectral.pkfilter_spectral</a></div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00038">pkfilter_spectral.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a15c6950b12c57ff838be9ba415e28c8e"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a15c6950b12c57ff838be9ba415e28c8e">qgis.pkfilter_spectral.pkfilter_spectral.METHOD</a></div><div class="ttdeci">string METHOD</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00043">pkfilter_spectral.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_ad21f52f89d4b6cbe06e4bf830a8f5678"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ad21f52f89d4b6cbe06e4bf830a8f5678">qgis.pkfilter_spectral.pkfilter_spectral.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00057">pkfilter_spectral.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a88267ee3b205fbfc5e6823c693eb4e14"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a88267ee3b205fbfc5e6823c693eb4e14">qgis.pkfilter_spectral.pkfilter_spectral.METHOD_OPTIONS</a></div><div class="ttdeci">list METHOD_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00042">pkfilter_spectral.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a0be5ed45033cae15184219a6485a396b"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a0be5ed45033cae15184219a6485a396b">qgis.pkfilter_spectral.pkfilter_spectral.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00041">pkfilter_spectral.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_ab8240d9589b85c133897e73224e6bcb2"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ab8240d9589b85c133897e73224e6bcb2">qgis.pkfilter_spectral.pkfilter_spectral.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00048">pkfilter_spectral.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_ae9fcf789fcc3b4871f5419bbce84511a"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#ae9fcf789fcc3b4871f5419bbce84511a">qgis.pkfilter_spectral.pkfilter_spectral.PADDING</a></div><div class="ttdeci">string PADDING</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00047">pkfilter_spectral.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a67ee5ff2f1cb29dd15291e3ac0e5331c"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a67ee5ff2f1cb29dd15291e3ac0e5331c">qgis.pkfilter_spectral.pkfilter_spectral.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00052">pkfilter_spectral.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a68d3c2ee722166fa9d8ddf3151fd8e55"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a68d3c2ee722166fa9d8ddf3151fd8e55">qgis.pkfilter_spectral.pkfilter_spectral.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00045">pkfilter_spectral.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a706e766bf47d4fab85e95879c6d657a4"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a706e766bf47d4fab85e95879c6d657a4">qgis.pkfilter_spectral.pkfilter_spectral.PADDING_OPTIONS</a></div><div class="ttdeci">list PADDING_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00046">pkfilter_spectral.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a20a6cee11be7abd9325358a564819d26"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a20a6cee11be7abd9325358a564819d26">qgis.pkfilter_spectral.pkfilter_spectral.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00040">pkfilter_spectral.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a916a5975c9e4fc03fdf55a8a02dcb91e"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a916a5975c9e4fc03fdf55a8a02dcb91e">qgis.pkfilter_spectral.pkfilter_spectral.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00050">pkfilter_spectral.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a43e8b1dc19ef86bee9a3c933f9f83529"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a43e8b1dc19ef86bee9a3c933f9f83529">qgis.pkfilter_spectral.pkfilter_spectral.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00049">pkfilter_spectral.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_aeff20f41be397170c8e351d0aa74bc79"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#aeff20f41be397170c8e351d0aa74bc79">qgis.pkfilter_spectral.pkfilter_spectral.DZ</a></div><div class="ttdeci">string DZ</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00044">pkfilter_spectral.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral_html_a85b2c92f62e8260f9f51d8d8f10ff44a"><div class="ttname"><a href="classqgis_1_1pkfilter__spectral_1_1pkfilter__spectral.html#a85b2c92f62e8260f9f51d8d8f10ff44a">qgis.pkfilter_spectral.pkfilter_spectral.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkfilter__spectral_8py_source.html#l00056">pkfilter_spectral.py:56</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilterascii.html b/doc/html/pkfilterascii.html
new file mode 100644
index 0000000..485366a
--- /dev/null
+++ b/doc/html/pkfilterascii.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfilterascii</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilterascii </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to filter data in an ASCII file </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfilterascii -i input.txt [-ic column]* </code></p>
+<p><code></code></p>
+<p><code> Options: [-f filter] [-dz value] [-t]</code></p>
+<p><code> Advanced options: [-tapz value]* [-fwhm value]* [-srf filename]* [-win col] [-wout value]* [-interp type] [-wt type] [-wf family] [-cut threshold]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkfilterascii_description"></a>
+Description</h1>
+<p>The utility pkfilterascii filters the columns defined by the option -ic. A varietey of filters can be selected from with the option -f. The kernel size is defined with the option -dz. Alternatively, you can define your own filter tap values (use the option -tapz for each tap). In case of spectral filtering, define the full width half max values (-fwhm value) or spectral response functions in ASCII files (-srf filename).</p>
+<h1><a class="anchor" id="pkfilterascii_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input ASCII file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output ASCII file </td></tr>
+<tr>
+<td>ic </td><td>inputCols </td><td>int </td><td></td><td>input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2 </td></tr>
+<tr>
+<td>f </td><td>filter </td><td>std::string </td><td></td><td>filter function (to be implemented: dwt, dwti,dwt_cut) </td></tr>
+<tr>
+<td>dz </td><td>dz </td><td>int </td><td></td><td>filter kernel size in z (band or spectral dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain </td></tr>
+<tr>
+<td>tapz </td><td>tapz </td><td>double </td><td></td><td>taps used for spectral filtering </td></tr>
+<tr>
+<td>fwhm </td><td>fwhm </td><td>double </td><td></td><td>list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...) </td></tr>
+<tr>
+<td>srf </td><td>srf </td><td>std::string </td><td></td><td>list of ASCII files containing spectral response functions (two columns: wavelength response) </td></tr>
+<tr>
+<td>win </td><td>wavelengthIn </td><td>int </td><td></td><td>column number of input ASCII file containing wavelengths </td></tr>
+<tr>
+<td>wout </td><td>wavelengthOut </td><td>double </td><td></td><td>list of wavelengths in output spectrum (-wout band1 -wout band2 ...) </td></tr>
+<tr>
+<td>interp </td><td>interp </td><td>std::string </td><td>akima </td><td>type of interpolation for spectral filtering (see <a href="http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html">http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html</a>) </td></tr>
+<tr>
+<td>t </td><td>transpose </td><td>bool </td><td>false </td><td>transpose output with samples in rows and wavelengths in cols </td></tr>
+<tr>
+<td>wt </td><td>wavelet </td><td>std::string </td><td>daubechies </td><td>wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered </td></tr>
+<tr>
+<td>wf </td><td>family </td><td>int </td><td>4 </td><td>wavelet family (vanishing moment, see also <a href="http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html">http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html</a>) </td></tr>
+<tr>
+<td>cut </td><td>cut </td><td>double </td><td>0 </td><td>threshold to cut dwt coefficients. Use 0 to keep all. </td></tr>
+</table>
+Usage: pkfilterascii -i input.txt [-ic column]* </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilterascii_8cc_source.html b/doc/html/pkfilterascii_8cc_source.html
new file mode 100644
index 0000000..1de0c11
--- /dev/null
+++ b/doc/html/pkfilterascii_8cc_source.html
@@ -0,0 +1,385 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfilterascii.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilterascii.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfilterascii.cc: program to filter data in an ASCII file</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/Filter.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "fileclasses/FileReaderAscii.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <gsl/gsl_sort.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/*------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> Main procedure</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> ----------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input ASCII file"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output ASCII file"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> inputCols_opt(<span class="stringliteral">"ic"</span>, <span class="stringliteral">"inputCols"</span>, <span class="stringliteral">"input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2"</span>); </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> method_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"filter"</span>, <span class="stringliteral">"filter function (to be implemented: dwt, dwti,dwt_cut)"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> wavelet_type_opt(<span class="stringliteral">"wt"</span>, <span class="stringliteral">"wavelet"</span>, <span class="stringliteral">"wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered"</span>, <span class="stringliteral">"daubechies"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> family_opt(<span class="stringliteral">"wf"</span>, <span class="stringliteral">"family"</span>, <span class="stringliteral">"wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html)"</span>, 4);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> threshold_opt(<span class="stringliteral">"cut"</span>, <span class="stringliteral">"cut"</span>, <span class="stringliteral">"threshold to cut dwt coefficients. Use 0 to keep all."</span>, 0);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> dimZ_opt(<span class="stringliteral">"dz"</span>, <span class="stringliteral">"dz"</span>, <span class="stringliteral">"filter kernel size in z (band or spectral dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> tapZ_opt(<span class="stringliteral">"tapz"</span>, <span class="stringliteral">"tapz"</span>, <span class="stringliteral">"taps used for spectral filtering"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> fwhm_opt(<span class="stringliteral">"fwhm"</span>, <span class="stringliteral">"fwhm"</span>, <span class="stringliteral">"list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...)"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> srf_opt(<span class="stringliteral">"srf"</span>, <span class="stringliteral">"srf"</span>, <span class="stringliteral">"list of ASCII files containing spectral response functions (two columns: wavelength response)"</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> wavelengthIn_opt(<span class="stringliteral">"win"</span>, <span class="stringliteral">"wavelengthIn"</span>, <span class="stringliteral">"column number of input ASCII file containing wavelengths"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> wavelengthOut_opt(<span class="stringliteral">"wout"</span>, <span class="stringliteral">"wavelengthOut"</span>, <span class="stringliteral">"list of wavelengths in output spectrum (-wout band1 -wout band2 ...)"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> interpolationType_opt(<span class="stringliteral">"interp"</span>, <span class="stringliteral">"interp"</span>, <span class="stringliteral">"type of interpolation for spectral filtering (see http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html)"</span>,<span class="stringliteral">" [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> transpose_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"transpose"</span>, <span class="stringliteral">"transpose output with samples in rows and wavelengths in cols"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> tapZ_opt.setHide(1);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> fwhm_opt.setHide(1);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> srf_opt.setHide(1);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> wavelengthIn_opt.setHide(1);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> wavelengthOut_opt.setHide(1);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> interpolationType_opt.setHide(1);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> transpose_opt.setHide(1);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> wavelet_type_opt.setHide(1);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> family_opt.setHide(1);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> threshold_opt.setHide(1);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> inputCols_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> method_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> dimZ_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> tapZ_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> fwhm_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> srf_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> wavelengthIn_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> wavelengthOut_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> interpolationType_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> transpose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> wavelet_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> family_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> threshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> exit(0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> cout << endl;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> cout << <span class="stringliteral">"Usage: pkfilterascii -i input.txt [-ic column]*"</span> << endl;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> cout << endl;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inputData(inputCols_opt.size());</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classVector2d.html">Vector2d<double></a> filteredData(inputCols_opt.size());</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> std::vector<double> wavelengthIn;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> std::vector<double> wavelengthOut;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a> asciiReader(input_opt[0]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span>(wavelengthIn_opt.size())</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> asciiReader.readData(wavelengthIn,wavelengthIn_opt[0]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> assert(inputCols_opt.size());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> asciiReader.readData(inputData,inputCols_opt);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> std::cout << <span class="stringliteral">"wavelengthIn.size(): "</span> << wavelengthIn.size() << std::endl;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::cout << <span class="stringliteral">"inputData[0].size(): "</span> << inputData[0].size() << std::endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(wavelengthIn.size())</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> assert(wavelengthIn.size()==inputData[0].size());</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> asciiReader.close();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <a class="code" href="classfilter_1_1Filter.html">filter::Filter</a> filter1d;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(fwhm_opt.size()){</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> filteredData.resize(inputCols_opt.size(),wavelengthOut_opt.size());</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> assert(wavelengthIn_opt.size());</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> std::cout << <span class="stringliteral">"spectral filtering to "</span> << fwhm_opt.size() << <span class="stringliteral">" bands with provided fwhm "</span> << std::endl;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> assert(wavelengthOut_opt.size()==fwhm_opt.size());</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> std::vector<double> fwhmData(wavelengthOut_opt.size());</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> filter1d.applyFwhm<<span class="keywordtype">double</span>>(wavelengthIn,inputData[icol], wavelengthOut_opt,fwhm_opt, interpolationType_opt[0], filteredData[icol],verbose_opt[0]);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> std::cout << <span class="stringliteral">"spectra filtered to "</span> << wavelengthOut_opt.size() << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> wavelengthOut=wavelengthOut_opt;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(srf_opt.size()){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> wavelengthOut.resize(srf_opt.size());</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> filteredData.resize(inputCols_opt.size(),srf_opt.size());</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="classVector2d.html">Vector2d<double></a> srfData(srf_opt.size(),inputCols_opt.size());<span class="comment">//transposed output</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> std::cout << <span class="stringliteral">"spectral filtering to "</span> << srf_opt.size() << <span class="stringliteral">" bands with provided SRF "</span> << std::endl;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> std::vector< Vector2d<double> > srf(srf_opt.size());<span class="comment">//[0] srf_nr, [1]: wavelength, [2]: response</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> ifstream srfFile;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isrf=0;isrf<srf_opt.size();++isrf){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> srf[isrf].resize(2);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> srfFile.open(srf_opt[isrf].c_str());</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//add 0 to make sure srf is 0 at boundaries after interpolation step</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> srf[isrf][0].push_back(0);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> srf[isrf][0].push_back(1);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">while</span>(srfFile >> v){</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> srf[isrf][0].push_back(v);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> srfFile >> v;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> srf[isrf][1].push_back(v);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> srfFile.close();</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">//add 0 to make sure srf[isrf] is 0 at boundaries after interpolation step</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> srf[isrf][0].push_back(srf[isrf][0].back()+1);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> srf[isrf][1].push_back(0); </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> srf[isrf][0].push_back(srf[isrf][0].back()+1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> srf[isrf][1].push_back(0);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> cout << <span class="stringliteral">"srf file details: "</span> << srf[isrf][0].size() << <span class="stringliteral">" wavelengths defined"</span> << endl;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iw=0;iw<srf[isrf][0].size();++iw)</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> std::cout << srf[isrf][0][iw] << <span class="stringliteral">" "</span> << srf[isrf][1][iw] << std::endl;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">double</span> centreWavelength=0;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> filteredData[icol].resize(srf.size());</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isrf=0;isrf<srf.size();++isrf){</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">double</span> delta=1.0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">bool</span> normalize=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> centreWavelength=filter1d.applySrf<<span class="keywordtype">double</span>>(wavelengthIn,inputData,srf[isrf], interpolationType_opt[0], srfData[isrf], delta, normalize,1,<span class="keyword">true</span>, verbose_opt[0]);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> std::cout << <span class="stringliteral">"centre wavelength srf "</span> << isrf << <span class="stringliteral">": "</span> << centreWavelength << std::endl;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> wavelengthOut[isrf]=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(centreWavelength+0.5);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> srfData.transpose(filteredData);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> std::cout << <span class="stringliteral">"spectra filtered to "</span> << srf.size() << <span class="stringliteral">" bands"</span> << std::endl;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">else</span>{<span class="comment">//no filtering</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> std::cout << <span class="stringliteral">"no filtering selected"</span> << std::endl;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> filteredData[icol]=inputData[icol];</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span>(method_opt.size()){</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> wavelengthOut=wavelengthIn;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol){</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">switch</span>(filter::Filter::getFilterType(method_opt[0])){</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">case</span>(filter::dwt):</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> filter1d.dwtForward(filteredData[icol],wavelet_type_opt[0],family_opt[0]);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">case</span>(filter::dwti):</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> filter1d.dwtInverse(filteredData[icol],wavelet_type_opt[0],family_opt[0]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">case</span>(filter::dwt_cut):</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> filter1d.dwtCut(filteredData[icol],wavelet_type_opt[0],family_opt[0],threshold_opt[0]);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">case</span>(filter::smooth):</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(tapZ_opt.size()){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> filter1d.setTaps(tapZ_opt);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> filter1d.filter(inputData[icol],filteredData[icol]);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> assert(dimZ_opt.size());</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> filter1d.smooth(inputData[icol],filteredData[icol],dimZ_opt[0]);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> assert(tapZ_opt.size());</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> filter1d.filter(inputData[icol],filteredData[icol]);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// std::cout << "method to be implemented" << std::endl;</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> ofstream outputStream;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> outputStream.open(output_opt[0].c_str(),ios::out);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> std::cout << <span class="stringliteral">"stream to output"</span> << std::endl;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span>(transpose_opt[0]){</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol){</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<filteredData[icol].size();++iband){</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(!output_opt.empty()){</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> outputStream << filteredData[icol][iband];</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>(iband<filteredData[icol].size()-1)</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> outputStream << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> outputStream << std::endl;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> std::cout << filteredData[icol][iband];</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(iband<filteredData[icol].size()-1)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> }</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> } </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// int nband=wavelengthOut.size()? wavelengthOut.size() : filteredData[0].size();</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span>(method_opt.size()){</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">switch</span>(filter::Filter::getFilterType(method_opt[0])){</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">case</span>(filter::dwt):</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> nband=filteredData[0].size();</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">case</span>(filter::dwti):</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> nband=filteredData[0].size();</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">case</span>(filter::dwt_cut):</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> nband=filteredData[0].size();</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> nband=wavelengthOut.size();</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> nband=wavelengthOut.size();</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> std::cout << <span class="stringliteral">"wavelengthOut.size(): "</span> << wavelengthOut.size() << std::endl;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>(!output_opt.empty()){</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span>(wavelengthOut.size())</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> outputStream << wavelengthOut[iband] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wavelengthIn_opt.size())</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> outputStream << iband << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span>(wavelengthOut.size())</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> std::cout << wavelengthOut[iband] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(wavelengthIn_opt.size())</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> std::cout << iband << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<inputCols_opt.size();++icol){</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(!output_opt.empty()){</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> outputStream << filteredData[icol][iband];</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(icol<inputCols_opt.size()-1)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> outputStream << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> outputStream << std::endl;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> std::cout << filteredData[icol][iband];</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">if</span>(icol<inputCols_opt.size()-1)</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> std::cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> } </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> outputStream.close();</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="ttc" id="classFileReaderAscii_html"><div class="ttname"><a href="classFileReaderAscii.html">FileReaderAscii</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderAscii_8h_source.html#l00030">FileReaderAscii.h:30</a></div></div>
+<div class="ttc" id="classfilter_1_1Filter_html"><div class="ttname"><a href="classfilter_1_1Filter.html">filter::Filter</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter_8h_source.html#l00040">Filter.h:40</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilterdem.html b/doc/html/pkfilterdem.html
new file mode 100644
index 0000000..0a8855d
--- /dev/null
+++ b/doc/html/pkfilterdem.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfilterdem</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilterdem </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Filter digital elevation model raster datasets </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfilterdem -i input.txt -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-f filter] [-dim maxsize]</code></p>
+<p><code> Advanced options: [-ot type] [-of format] [-ct colortable] [-nodata value] [-circ] [-st threshold] [-ht threshold] [-minchange value]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkfilterdem_description"></a>
+Description</h1>
+<p>The utility pkfilterdem can be used to filter digital elevation models. It is typically used after the utility <a class="el" href="pklas2img.html">pklas2img</a> to create a digital terrain model. The default filter operation is the <a href="http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1202973&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1202973">progressive morphological filter</a>. </p>
+<h1><a class="anchor" id="pkfilterdem_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>f </td><td>filter </td><td>std::string </td><td></td><td>post processing filter: vito, etew_min, promorph (progressive morphological filter),open,close). </td></tr>
+<tr>
+<td>dim </td><td>dim </td><td>double </td><td>17 </td><td>maximum filter kernel size </td></tr>
+<tr>
+<td>circ </td><td>circular </td><td>bool </td><td>false </td><td>circular disc kernel for dilation and erosion </td></tr>
+<tr>
+<td>st </td><td>st </td><td>double </td><td>0 </td><td>slope threshold used for morphological filtering. Use a low values to remove more height objects in flat terrains </td></tr>
+<tr>
+<td>ht </td><td>ht </td><td>double </td><td>0.2 </td><td>initial height threshold for progressive morphological filtering. Use low values to remove more height objects. Optionally, a maximum height threshold can be set via a second argument (e.g., -ht 0.2 -ht 2.5 sets an initial threshold at 0.2 m and caps the threshold at 2.5 m). </td></tr>
+<tr>
+<td>minchange </td><td>minchange </td><td>short </td><td>0 </td><td>Stop iterations when no more pixels are changed than this threshold. </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>short </td><td></td><td>nodata value </td></tr>
+</table>
+Usage: pkfilterdem -i input.txt -o output </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilterdem_8cc_source.html b/doc/html/pkfilterdem_8cc_source.html
new file mode 100644
index 0000000..b3a992e
--- /dev/null
+++ b/doc/html/pkfilterdem_8cc_source.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfilterdem.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilterdem.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfilterdem.cc: Filter digital elevation model raster datasets</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "algorithms/Filter2d.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/*------------------</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> Main procedure</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> ----------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// Optionpk<std::string> tmpdir_opt("tmp", "tmp", "Temporary directory","/tmp",2);</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> disc_opt(<span class="stringliteral">"circ"</span>, <span class="stringliteral">"circular"</span>, <span class="stringliteral">"circular disc kernel for dilation and erosion"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> postFilter_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"filter"</span>, <span class="stringliteral">"post processing filter: vito, etew_min, promorph (progressive morphological filter),open,close)."</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dim_opt(<span class="stringliteral">"dim"</span>, <span class="stringliteral">"dim"</span>, <span class="stringliteral">"maximum filter kernel size"</span>, 17);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> maxSlope_opt(<span class="stringliteral">"st"</span>, <span class="stringliteral">"st"</span>, <span class="stringliteral">"slope threshold used for morphological filtering. Use a low values to remove more height objects in flat terrains"</span>, 0.0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> hThreshold_opt(<span class="stringliteral">"ht"</span>, <span class="stringliteral">"ht"</span>, <span class="stringliteral">"initial height threshold for progressive morphological filtering. Use low values to remove more height objects. Optionally, a maximum height threshold can be set via a second argument (e.g., - [...]
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> minChange_opt(<span class="stringliteral">"minchange"</span>, <span class="stringliteral">"minchange"</span>, <span class="stringliteral">"Stop iterations when no more pixels are changed than this threshold."</span>, 0);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>,<span class="stringl [...]
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> disc_opt.setHide(1);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> maxSlope_opt.setHide(1);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> hThreshold_opt.setHide(1);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> minChange_opt.setHide(1);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> otype_opt.setHide(1);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> oformat_opt.setHide(1);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> nodata_opt.setHide(1);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// tmpdir_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> postFilter_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> dim_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> disc_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> maxSlope_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> hThreshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> minChange_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> exit(0);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> cout << <span class="stringliteral">"Usage: pkfilterdem -i input.txt -o output"</span> << endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> cout << endl;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> input;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> cerr << <span class="stringliteral">"Error: no input file selected, use option -i"</span> << endl;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> exit(1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> cerr << <span class="stringliteral">"Error: no outputWriter file selected, use option -o"</span> << endl;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> exit(1);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(postFilter_opt.empty()){</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> cerr << <span class="stringliteral">"Error: no filter selected, use option -f"</span> << endl;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> exit(1);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> input.open(input_opt[0]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> theType=input.getDataType();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> std::cout << std::endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">string</span> imageType=input.getImageType();</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(oformat_opt.size())</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> theInterleave+=input.getInterleave();</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> cout << <span class="stringliteral">"opening output file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> outputWriter.open(output_opt[0],input.nrOfCol(),input.nrOfRow(),1,theType,imageType,option_opt);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">//set projection</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> outputWriter.setProjection(input.getProjection());</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> outputWriter.copyGeoTransform(input);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> outputWriter.setColorTable(colorTable_opt[0]); </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">//set nodata value</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<outputWriter.nrOfBand();++iband)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> outputWriter.GDALSetNoDataValue(nodata_opt[0],iband);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="classVector2d.html">Vector2d<double></a> inputData(input.nrOfRow(),input.nrOfCol());</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <a class="code" href="classVector2d.html">Vector2d<double></a> outputData(outputWriter.nrOfRow(),outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tmpData(outputWriter.nrOfRow(),outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> input.readDataBlock(inputData,GDT_Float64,0,inputData.nCols()-1,0,inputData.nRows()-1);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//apply post filter</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> std::cout << <span class="stringliteral">"Applying post processing filter: "</span> << postFilter_opt[0] << std::endl;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">//make sure dim_opt contains initial [0] and maximum [1] kernel sizes in this order</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(dim_opt.size()<2)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> dim_opt.insert(dim_opt.begin(),3);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(dim_opt[0]>dim_opt[1]){</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> dim_opt.insert(dim_opt.begin(),dim_opt[1]);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> dim_opt.erase(dim_opt.begin()+2);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <a class="code" href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a> theFilter;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(nodata_opt.size()){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> theFilter.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nchange=1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(postFilter_opt[0]==<span class="stringliteral">"vito"</span>){</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">//todo: fill empty pixels</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// hThreshold_opt.resize(4);</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// hThreshold_opt[0]=0.7;</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// hThreshold_opt[1]=0.3;</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// hThreshold_opt[2]=0.1;</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// hThreshold_opt[2]=-0.2;</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> vector<int> nlimit(4);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> nlimit[0]=2;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> nlimit[1]=3;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> nlimit[2]=4;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> nlimit[2]=2;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//init finalMask</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<tmpData.nRows();++irow)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<tmpData.nCols();++icol)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> tmpData[irow][icol]=1;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iheight=0;iheight<hThreshold_opt.size();++iheight){</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> cout << <span class="stringliteral">"height: "</span> << hThreshold_opt[iheight] << endl;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">//todo:replace with binary mask (or short) -> adapt template with T1,T2 in Filter2d</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <a class="code" href="classVector2d.html">Vector2d<double></a> tmpMask(input.nrOfRow(),input.nrOfCol());</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<tmpMask.nRows();++irow)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<tmpMask.nCols();++icol)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> tmpMask[irow][icol]=1;<span class="comment">//1=surface, 0=terrain</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> cout << <span class="stringliteral">"filtering NWSE"</span> << endl;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment">//from here</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// Vector2d<double> tmpDSM(inputData);</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// int dimX=dim_opt[0];</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// int dimY=dim_opt[0];</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// assert(dimX);</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// assert(dimY);</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// statfactory::StatFactory stat;</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// Vector2d<double> inBuffer(dimY,inputData.nCols());</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">// if(tmpData.size()!=inputData.nRows())</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">// tmpData.resize(inputData.nRows());</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// int indexI=0;</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// int indexJ=inputData.nRows()-1;</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">// // int indexJ=0;</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// //initialize last half of inBuffer</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// for(int j=-(dimY-1)/2;j<=dimY/2;++j){</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// for(int i=0;i<inputData.nCols();++i)</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// inBuffer[indexJ][i]=tmpDSM[abs(j)][i];</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// --indexJ;</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// // ++indexJ;</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">// for(int y=tmpDSM.nRows()-1;y>=0;--y){</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">// if(y){//inBuffer already initialized for y=0</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// //erase first line from inBuffer</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// inBuffer.erase(inBuffer.end()-1);</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// // inBuffer.erase(inBuffer.begin());</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">// //read extra line and push back to inBuffer if not out of bounds</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// if(y+dimY/2<tmpDSM.nRows()){</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// //allocate buffer</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// // inBuffer.push_back(inBuffer.back());</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// inBuffer.insert(inBuffer.begin(),*(inBuffer.begin()));</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// for(int i=0;i<tmpDSM.nCols();++i) </span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// inBuffer[0][i]=tmpDSM[y-dimY/2][i];</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// // inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i];</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// int over=y+dimY/2-tmpDSM.nRows();</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// int index=(inBuffer.size()-1)-over;</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// assert(index>=0);</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// assert(index<inBuffer.size());</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// inBuffer.push_back(inBuffer[index]);</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// for(int x=tmpDSM.nCols()-1;x>=0;--x){</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">// double centerValue=inBuffer[(dimY-1)/2][x];</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">// cout << "pixel (" << x << "," << y << "): " << centerValue << endl;</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// short nmasked=0;</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// std::vector<double> neighbors;</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// for(int j=-(dimY-1)/2;j<=dimY/2;++j){</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// for(int i=-(dimX-1)/2;i<=dimX/2;++i){</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// indexI=x+i;</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// //check if out of bounds</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// if(indexI<0)</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// indexI=-indexI;</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// else if(indexI>=tmpDSM.nCols())</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">// indexI=tmpDSM.nCols()-i;</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">// if(y+j<0)</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">// indexJ=-j;</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// else if(y+j>=tmpDSM.nRows())</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// indexJ=(dimY>2) ? (dimY-1)/2-j : 0;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">// indexJ=(dimY-1)/2+j;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// double difference=(centerValue-inBuffer[indexJ][indexI]);</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// cout << "centerValue-inBuffer[" << indexJ << "][" << indexI << "]=" << centerValue << " - " << inBuffer[indexJ][indexI] << " = " << difference << endl;</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// if(i||j)//skip centerValue</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// neighbors.push_back(inBuffer[indexJ][indexI]);</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// if(difference>hThreshold_opt[iheight])</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// ++nmasked;</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment">// cout << "pixel " << x << ", " << y << ": nmasked is " << nmasked << endl;</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">// if(nmasked<=nlimit[iheight]){</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">// ++nchange;</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">// //reset pixel in outputMask</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">// tmpData[y][x]=0;</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">// cout << "pixel " << x << ", " << y << " is ground" << endl;</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">// //reset pixel height in tmpDSM</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">// sort(neighbors.begin(),neighbors.end());</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">// assert(neighbors.size()>1);</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">// inBuffer[(dimY-1)/2][x]=neighbors[1];</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">// cout << "pixel " << x << ", " << y << " is surface, reset DSM to " << neighbors[1] << endl;</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">// /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">//to here</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> theFilter.dsm2dtm_nwse(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> cout << <span class="stringliteral">"filtering NESW"</span> << endl;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> theFilter.dsm2dtm_nesw(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> cout << <span class="stringliteral">"filtering SENW"</span> << endl;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> theFilter.dsm2dtm_senw(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> cout << <span class="stringliteral">"filtering SWNE"</span> << endl;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> theFilter.dsm2dtm_swne(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> outputData=tmpData;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">//todo: interpolate</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">//outputData.setMask(tmpData,1,0);</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> } </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(postFilter_opt[0]==<span class="stringliteral">"etew_min"</span>){</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment">//Elevation Threshold with Expand Window (ETEW) Filter (p.73 from Airborne LIDAR Data Processing and Analysis Tools ALDPAT 1.0)</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment">//first iteration is performed assuming only minima are selected using options -fir all -comp min</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">//increase cells and thresholds until no points from the previous iteration are discarded.</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordtype">int</span> dim=dim_opt[0];</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// theFilter.setNoValue(0);</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">int</span> iteration=1;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">while</span>(nchange>minChange_opt[0]&&dim<=dim_opt[1]){</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordtype">double</span> hThreshold=maxSlope_opt[0]*dim;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> nchange=theFilter.morphology(inputData,outputData,<span class="stringliteral">"erode"</span>,dim,dim,disc_opt[0],hThreshold);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> inputData=outputData;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> dim+=2;<span class="comment">//change from theory: originally double cellCize</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> std::cout << <span class="stringliteral">"iteration "</span> << iteration << <span class="stringliteral">": "</span> << nchange << <span class="stringliteral">" pixels changed"</span> << std::endl;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> ++iteration;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> } </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(postFilter_opt[0]==<span class="stringliteral">"promorph"</span>){</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">//Progressive morphological filter tgrs2003_zhang vol41 pp 872-882</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment">//first iteration is performed assuming only minima are selected using options -fir all -comp min</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment">//increase cells and thresholds until no points from the previous iteration are discarded.</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordtype">int</span> dim=dim_opt[0];</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordtype">double</span> hThreshold=hThreshold_opt[0];</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordtype">int</span> iteration=1;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">while</span>(nchange>minChange_opt[0]&&dim<=dim_opt[1]){</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> std::cout << <span class="stringliteral">"iteration "</span> << iteration << <span class="stringliteral">" with window size "</span> << dim << <span class="stringliteral">" and dh_max: "</span> << hThreshold << std::endl;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> nchange=theFilter.morphology(inputData,outputData,<span class="stringliteral">"erode"</span>,dim,dim,disc_opt[0],hThreshold);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> theFilter.morphology(outputData,inputData,<span class="stringliteral">"dilate"</span>,dim,dim,disc_opt[0],hThreshold);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> theFilter.doit(inputData,outputData,<span class="stringliteral">"median"</span>,dim,dim,1,disc_opt[0]);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> inputData=outputData;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> exit(1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">int</span> newdim=(dim==1)? 3: 2*(dim-1)+1;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> hThreshold=hThreshold_opt[0]+maxSlope_opt[0]*(newdim-dim)*input.getDeltaX();</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> dim=newdim;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">if</span>(hThreshold_opt.size()>1){</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(hThreshold>hThreshold_opt[1]){</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> hThreshold=hThreshold_opt[1];</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> std::cout << <span class="stringliteral">"iteration "</span> << iteration << <span class="stringliteral">": "</span> << nchange << <span class="stringliteral">" pixels changed"</span> << std::endl;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> ++iteration;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> } </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(postFilter_opt[0]==<span class="stringliteral">"open"</span>){</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> theFilter.morphology(inputData,tmpData,<span class="stringliteral">"erode"</span>,dim_opt[0],dim_opt[0],disc_opt[0],hThreshold_opt[0]);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> theFilter.morphology(tmpData,outputData,<span class="stringliteral">"dilate"</span>,dim_opt[0],dim_opt[0],disc_opt[0],hThreshold_opt[0]);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> outputData=inputData;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> exit(1);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(postFilter_opt[0]==<span class="stringliteral">"close"</span>){</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> theFilter.morphology(inputData,tmpData,<span class="stringliteral">"dilate"</span>,dim_opt[0],dim_opt[0],disc_opt[0],hThreshold_opt[0]);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> theFilter.morphology(tmpData,outputData,<span class="stringliteral">"erode"</span>,dim_opt[0],dim_opt[0],disc_opt[0],hThreshold_opt[0]);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> exit(1);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment">//write outputData to outputWriter</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> outputWriter.writeDataBlock(outputData,GDT_Float64,0,outputData.nCols()-1,0,outputData.nRows()-1);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">// progress=1;</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> input.close();</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> outputWriter.close();</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classfilter2d_1_1Filter2d_html"><div class="ttname"><a href="classfilter2d_1_1Filter2d.html">filter2d::Filter2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Filter2d_8h_source.html#l00065">Filter2d.h:65</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfilterdem_8py_source.html b/doc/html/pkfilterdem_8py_source.html
new file mode 100644
index 0000000..7f835cc
--- /dev/null
+++ b/doc/html/pkfilterdem_8py_source.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkfilterdem.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfilterdem.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkfilterdem.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterFile</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">pkfilterdem</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> DIM = <span class="stringliteral">"DIM"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> TYPE = [<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float64'</span>,<span class="stringliteral">'CInt16& [...]
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> FILTER_OPTIONS = [<span class="stringliteral">"promorph"</span>]</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> FILTER = <span class="stringliteral">"FILTER"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkfilterdem"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a6cda59e12b5d35384148d3a9e50a380c">name</a> = <span class="stringliteral">"Create DTM from DEM raster dataset)"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a362a12d7bac87e1ef6bd3b0921893e4b">group</a> = <span class="stringliteral">"[pktools] LiDAR"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#ac63e9625819c3df9a3f210a44577de8d">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a231a73cc70938e1e8c0fbfe2ad354666">FILTER</a>,<span class="stringliteral">"filter"</span>,self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#aa684f5dff3236fff634fd644507ead3f">FILTER_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a36f24e3cf45c53076e40bf050690c9e4">DIM</a>, <span class="stringliteral">"maximum filter kernel size"</span>,3,<span class="keywordtype">None</span>,17))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#af1b0b8b6543976e0436e35269673d135">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a93d222282debe7b1e835fe457e42668e">RTYPE</a>, <span class="stringliteral">'Output raster type'</span>, self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a609a8357c611c1b7291714359d293205">TYPE</a>, 0))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a8d539783f415aef729ad8eec26d1befc">EXTRA</a>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a0f4ab9a21d0270b9215bdeadd24be172">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> commands = [cliPath]</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#ac63e9625819c3df9a3f210a44577de8d">INPUT</a>)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> input != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> filter=self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#aa684f5dff3236fff634fd644507ead3f">FILTER_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a231a73cc70938e1e8c0fbfe2ad354666">FILTER</a>)]</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> filter != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> commands.append(<span class="stringliteral">"-f"</span>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> commands.append(filter)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a36f24e3cf45c53076e40bf050690c9e4">DIM</a>) != 0:</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">"-dim"</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a36f24e3cf45c53076e40bf050690c9e4">DIM</a>)))</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a609a8357c611c1b7291714359d293205">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a93d222282debe7b1e835fe457e42668e">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands.append(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a609a8357c611c1b7291714359d293205">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a93d222282debe7b1e835fe457e42668e">RTYPE</a>)])</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#af1b0b8b6543976e0436e35269673d135">OUTPUT</a>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a8d539783f415aef729ad8eec26d1befc">EXTRA</a>))</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> commands.append(extra)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_af1b0b8b6543976e0436e35269673d135"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#af1b0b8b6543976e0436e35269673d135">qgis.pkfilterdem.pkfilterdem.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00042">pkfilterdem.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a609a8357c611c1b7291714359d293205"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a609a8357c611c1b7291714359d293205">qgis.pkfilterdem.pkfilterdem.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00045">pkfilterdem.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a93d222282debe7b1e835fe457e42668e"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a93d222282debe7b1e835fe457e42668e">qgis.pkfilterdem.pkfilterdem.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00044">pkfilterdem.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a231a73cc70938e1e8c0fbfe2ad354666"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a231a73cc70938e1e8c0fbfe2ad354666">qgis.pkfilterdem.pkfilterdem.FILTER</a></div><div class="ttdeci">string FILTER</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00047">pkfilterdem.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_aa684f5dff3236fff634fd644507ead3f"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#aa684f5dff3236fff634fd644507ead3f">qgis.pkfilterdem.pkfilterdem.FILTER_OPTIONS</a></div><div class="ttdeci">list FILTER_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00046">pkfilterdem.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a8d539783f415aef729ad8eec26d1befc"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a8d539783f415aef729ad8eec26d1befc">qgis.pkfilterdem.pkfilterdem.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00048">pkfilterdem.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_ac63e9625819c3df9a3f210a44577de8d"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#ac63e9625819c3df9a3f210a44577de8d">qgis.pkfilterdem.pkfilterdem.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00041">pkfilterdem.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html">qgis.pkfilterdem.pkfilterdem</a></div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00039">pkfilterdem.py:39</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a6cda59e12b5d35384148d3a9e50a380c"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a6cda59e12b5d35384148d3a9e50a380c">qgis.pkfilterdem.pkfilterdem.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00054">pkfilterdem.py:54</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a362a12d7bac87e1ef6bd3b0921893e4b"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a362a12d7bac87e1ef6bd3b0921893e4b">qgis.pkfilterdem.pkfilterdem.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00055">pkfilterdem.py:55</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a36f24e3cf45c53076e40bf050690c9e4"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a36f24e3cf45c53076e40bf050690c9e4">qgis.pkfilterdem.pkfilterdem.DIM</a></div><div class="ttdeci">string DIM</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00043">pkfilterdem.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkfilterdem_1_1pkfilterdem_html_a0f4ab9a21d0270b9215bdeadd24be172"><div class="ttname"><a href="classqgis_1_1pkfilterdem_1_1pkfilterdem.html#a0f4ab9a21d0270b9215bdeadd24be172">qgis.pkfilterdem.pkfilterdem.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkfilterdem_8py_source.html#l00050">pkfilterdem.py:50</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfsann.html b/doc/html/pkfsann.html
new file mode 100644
index 0000000..7eb0172
--- /dev/null
+++ b/doc/html/pkfsann.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfsann</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfsann </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>feature selection for artificial neural network classifier pkann </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfsann -t training -n number </code></p>
+<p><code></code></p>
+<p><code> Options:</code></p>
+<p><code> Advanced options: </code></p>
+<h1><a class="anchor" id="pkfsann_description"></a>
+Description</h1>
+<p>Classification problems dealing with high dimensional input data can be challenging due to the Hughes phenomenon. Hyperspectral data, for instance, can have hundreds of spectral bands and require special attention when being classified. In particular when limited training data are available, the classification of such data can be problematic without reducing the dimension.</p>
+<p>The utility pkfsann implements a number of feature selection techniques, among which a sequential floating forward search (SFFS). Also consider the SVM classifier implemented in pksvm, which has been shown to be more robust to this type of problem than others. </p>
+<h1><a class="anchor" id="pkfsann_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input test set (leave empty to perform a cross validation based on training only) </td></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) </td></tr>
+<tr>
+<td>n </td><td>nf </td><td>unsigned short </td><td>0 </td><td>number of features to select (0 to select optimal number, see also ecost option) </td></tr>
+<tr>
+<td>tln </td><td>tln </td><td>std::string </td><td></td><td>training layer name(s) </td></tr>
+<tr>
+<td>label </td><td>label </td><td>std::string </td><td>label </td><td>identifier for class label in training vector file. </td></tr>
+<tr>
+<td></td><td>balance </td><td>unsigned int </td><td>0 </td><td>balance the input data to this number of samples for each class </td></tr>
+<tr>
+<td>random </td><td>random </td><td>bool </td><td>true </td><td>in case of balance, randomize input data </td></tr>
+<tr>
+<td>min </td><td>min </td><td>int </td><td>0 </td><td>if number of training pixels is less then min, do not take this class into account </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td></td><td>band index (starting from 0, either use band option or use start to end) </td></tr>
+<tr>
+<td>s </td><td>start </td><td>double </td><td>0 </td><td>start band sequence number </td></tr>
+<tr>
+<td>e </td><td>end </td><td>double </td><td>0 </td><td>end band sequence number (set to 0 to include all bands) </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td>a </td><td>aggreg </td><td>unsigned short </td><td>0 </td><td>how to combine aggregated classifiers, see also rc option (0: no aggregation, 1: sum rule, 2: max rule). </td></tr>
+<tr>
+<td>sm </td><td>sm </td><td>std::string </td><td>sffs </td><td>feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search) </td></tr>
+<tr>
+<td>ecost </td><td>ecost </td><td>float </td><td>0.001 </td><td>epsilon for stopping criterion in cost function to determine optimal number of features </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>2 </td><td>n-fold cross validation mode </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>list of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>list of class values (use same order as in classname opt. </td></tr>
+<tr>
+<td>n </td><td>nneuron </td><td>unsigned int </td><td>5 </td><td>number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) </td></tr>
+<tr>
+<td></td><td>connection </td><td>float </td><td>1 </td><td>connection reate (default: 1.0 for a fully connected network) </td></tr>
+<tr>
+<td>w </td><td>weights </td><td>float </td><td>0 </td><td>weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer) </td></tr>
+<tr>
+<td>l </td><td>learning </td><td>float </td><td>0.7 </td><td>learning rate (default: 0.7) </td></tr>
+<tr>
+<td></td><td>maxit </td><td>unsigned int </td><td>500 </td><td>number of maximum iterations (epoch) (default: 500) </td></tr>
+</table>
+Usage: pkfsann -t training -n number </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfsann_8cc_source.html b/doc/html/pkfsann_8cc_source.html
new file mode 100644
index 0000000..5f3dc62
--- /dev/null
+++ b/doc/html/pkfsann_8cc_source.html
@@ -0,0 +1,724 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfsann.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfsann.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfsann.cc: feature selection for artificial neural network classifier pkann</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "algorithms/CostFactory.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/FeatureSelector.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "floatfann.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "algorithms/myfann_cpp.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "pkfsann.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#define Malloc(type,n) (type *)malloc((n)*sizeof(type))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> CostFactoryANN::CostFactoryANN(<span class="keyword">const</span> vector<unsigned int>& nneuron, <span class="keywordtype">float</span> connection, <span class="keyword">const</span> std::vector<float> weights, <span class="keywordtype">float</span> learning, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxit, <span class="keywordtype">unsigned</span> <span clas [...]
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> : <a class="code" href="classCostFactory.html">CostFactory</a>(cv,verbose), m_nneuron(nneuron), m_connection(connection), m_weights(weights), m_learning(learning), m_maxit(maxit){};</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> CostFactoryANN::~CostFactoryANN(){</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">double</span> CostFactoryANN::getCost(<span class="keyword">const</span> vector<<a class="code" href="classVector2d.html">Vector2d<float></a> > &trainingFeatures)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nclass=trainingFeatures.size();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntest=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> ntraining+=m_nctraining[iclass];</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> ntest+=m_nctest[iclass];</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(ntest)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> assert(!m_cv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(!m_cv)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> assert(ntest);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classFANN_1_1neural__net.html">FANN::neural_net</a> net;<span class="comment">//the neural network</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers = m_nneuron.size()+2;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">const</span> <span class="keywordtype">float</span> desired_error = 0.0003;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations_between_reports = (m_verbose) ? m_maxit+1:0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(m_verbose>1){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << <span class="stringliteral">"creating artificial neural network with "</span> << m_nneuron.size() << <span class="stringliteral">" hidden layer, having "</span> << endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<m_nneuron.size();++ilayer)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> cout << m_nneuron[ilayer] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> cout << <span class="stringliteral">"neurons"</span> << endl;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">switch</span>(num_layers){</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">case</span>(3):{</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[3];</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> layers[0]=nFeatures;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> layers[1]=m_nneuron[0];</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> layers[2]=nclass;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> net.create_sparse_array(m_connection,num_layers,layers);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">case</span>(4):{</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[4];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> layers[0]=nFeatures;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> layers[1]=m_nneuron[0];</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> layers[2]=m_nneuron[1];</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> layers[3]=nclass;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> net.create_sparse_array(m_connection,num_layers,layers);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> cerr << <span class="stringliteral">"Only 1 or 2 hidden layers are supported!"</span> << endl;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> exit(1);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> net.set_learning_rate(m_learning);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> net.set_activation_function_hidden(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> net.set_activation_function_output(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> vector<unsigned short> referenceVector;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> vector<unsigned short> outputVector;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">float</span> rmse=0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> vector<Vector2d<float> > tmpFeatures(nclass);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> tmpFeatures[iclass].resize(trainingFeatures[iclass].size(),nFeatures);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;isample<m_nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature){</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> tmpFeatures[iclass][isample][ifeature]=trainingFeatures[iclass][isample][ifeature];</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> m_cm.clearResults();</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(m_cv>0){</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> rmse=net.cross_validation(tmpFeatures,</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> ntraining,</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> m_cv,</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> m_maxit,</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> desired_error,</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> referenceVector,</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> outputVector,</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> m_verbose);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<referenceVector.size();++isample){</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">string</span> refClassName=m_nameVector[referenceVector[isample]];</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">string</span> className=m_nameVector[outputVector[isample]];</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(m_classValueMap.size())</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> m_cm.incrementResult(m_cm.getClass(referenceVector[isample]),m_cm.getClass(outputVector[isample]),1.0);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">else</span>{<span class="comment">//not working yet. please repair...</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> assert(m_cv>0);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">bool</span> initWeights=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> net.train_on_data(tmpFeatures,ntraining,initWeights, m_maxit,</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> iterations_between_reports, desired_error);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> vector<Vector2d<float> > testFeatures(nclass);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> vector<float> result(nclass);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">int</span> maxClass=-1;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> testFeatures.resize(m_nctest[iclass],nFeatures);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;isample<m_nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature){</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> testFeatures[iclass][isample][ifeature]=trainingFeatures[iclass][m_nctraining[iclass]+isample][ifeature];</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> result=net.run(testFeatures[iclass][isample]);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordtype">string</span> refClassName=m_nameVector[iclass];</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">float</span> maxP=-1;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ic=0;ic<nclass;++ic){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">float</span> pv=(result[ic]+1.0)/2.0;<span class="comment">//bring back to scale [0,1]</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(pv>maxP){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> maxP=pv;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> maxClass=ic;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">string</span> className=m_nameVector[maxClass];</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(m_classValueMap.size())</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> m_cm.incrementResult(m_cm.getClass(referenceVector[isample]),m_cm.getClass(outputVector[isample]),1.0);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> assert(m_cm.nReference());</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span>(m_cm.kappa());</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// vector<double> priors;</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//--------------------------- command line options ------------------------------------</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input test set (leave empty to perform a cross validation based on training only)"</span>); </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training [...]
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> tlayer_opt(<span class="stringliteral">"tln"</span>, <span class="stringliteral">"tln"</span>, <span class="stringliteral">"training layer name(s)"</span>);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"label"</span>, <span class="stringliteral">"label"</span>, <span class="stringliteral">"identifier for class label in training vector file."</span>,<span class="stringliteral">"label"</span>); </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> maxFeatures_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"nf"</span>, <span class="stringliteral">"number of features to select (0 to select optimal number, see also ecost option)"</span>, 0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> balance_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"balance"</span>, <span class="stringliteral">"balance the input data to this number of samples for each class"</span>, 0);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> random_opt(<span class="stringliteral">"random"</span>,<span class="stringliteral">"random"</span>, <span class="stringliteral">"in case of balance, randomize input data"</span>, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minSize_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"if number of training pixels is less then min, do not take this class into account"</span>, 0);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index (starting from 0, either use band option or use start to end)"</span>);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bstart_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"start"</span>, <span class="stringliteral">"start band sequence number"</span>,0); </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bend_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"end"</span>, <span class="stringliteral">"end band sequence number (set to 0 to include all bands)"</span>, 0); </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> aggreg_opt(<span class="stringliteral">"a"</span>, <span class="stringliteral">"aggreg"</span>, <span class="stringliteral">"how to combine aggregated classifiers, see also rc option (0: no aggregation, 1: sum rule, 2: max rule)."</span>,0);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// Optionpk<double> priors_opt("p", "prior", "prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 )", 0.0);</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> selector_opt(<span class="stringliteral">"sm"</span>, <span class="stringliteral">"sm"</span>, <span class="stringliteral">"feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search)"</span>,<span class="stringliteral" [...]
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_cost_opt(<span class="stringliteral">"ecost"</span>, <span class="stringliteral">"ecost"</span>, <span class="stringliteral">"epsilon for stopping criterion in cost function to determine optimal number of features"</span>,0.001);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"n-fold cross validation mode"</span>,2);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"list of class names."</span>); </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"list of class values (use same order as in classname opt."</span>); </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nneuron_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"nneuron"</span>, <span class="stringliteral">"number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons)" [...]
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> connection_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"connection"</span>, <span class="stringliteral">"connection reate (default: 1.0 for a fully connected network)"</span>, 1.0); </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> weights_opt(<span class="stringliteral">"w"</span>, <span class="stringliteral">"weights"</span>, <span class="stringliteral">"weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer)" [...]
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> learning_opt(<span class="stringliteral">"l"</span>, <span class="stringliteral">"learning"</span>, <span class="stringliteral">"learning rate (default: 0.7)"</span>, 0.7); </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> maxit_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"maxit"</span>, <span class="stringliteral">"number of maximum iterations (epoch) (default: 500)"</span>, 500); </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"set to: 0 (results only), 1 (confusion matrix), 2 (debug)"</span>,0,2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> tlayer_opt.setHide(1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> label_opt.setHide(1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> balance_opt.setHide(1);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> random_opt.setHide(1);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> bstart_opt.setHide(1);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> bend_opt.setHide(1);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> aggreg_opt.setHide(1);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">// priors_opt.setHide(1);</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> selector_opt.setHide(1);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> epsilon_cost_opt.setHide(1);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> cv_opt.setHide(1);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> classname_opt.setHide(1);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> classvalue_opt.setHide(1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> nneuron_opt.setHide(1);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> connection_opt.setHide(1);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> weights_opt.setHide(1);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> learning_opt.setHide(1);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> maxit_opt.setHide(1);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> maxFeatures_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> tlayer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> balance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> minSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> bstart_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> bend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> aggreg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// priors_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> selector_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> epsilon_cost_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> nneuron_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> connection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> weights_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> learning_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> maxit_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> exit(0);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> cout << endl;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> cout << <span class="stringliteral">"Usage: pkfsann -t training -n number"</span> << endl;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> cout << endl;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <a class="code" href="classCostFactoryANN.html">CostFactoryANN</a> costfactory(nneuron_opt, connection_opt[0], weights_opt, learning_opt[0], maxit_opt[0], cv_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> assert(training_opt.size());</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> costfactory.setCv(0);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> std::cout << <span class="stringliteral">"input filename: "</span> << input_opt[0] << std::endl;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> std::cout << <span class="stringliteral">"training vector file: "</span> << std::endl;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<training_opt.size();++ifile)</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> std::cout << training_opt[ifile] << std::endl;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> std::cout << <span class="stringliteral">"verbose: "</span> << verbose_opt[0] << std::endl;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">static</span> std::map<std::string, SelectorValue> selMap;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment">//initialize selMap</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> selMap[<span class="stringliteral">"sffs"</span>]=SFFS;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> selMap[<span class="stringliteral">"sfs"</span>]=SFS;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> selMap[<span class="stringliteral">"sbs"</span>]=SBS;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> selMap[<span class="stringliteral">"bfs"</span>]=BFS;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> assert(training_opt.size());</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> cv_opt[0]=0;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> std::cout << <span class="stringliteral">"training vector file: "</span> << training_opt[0] << std::endl;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalSamples=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalTestSamples=0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nclass=0;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">int</span> startBand=2;<span class="comment">//first two bands represent X and Y pos</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// if(priors_opt.size()>1){//priors from argument list</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// priors.resize(priors_opt.size());</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// double normPrior=0;</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass){</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">// priors[iclass]=priors_opt[iclass];</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">// normPrior+=priors[iclass];</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment">// //normalize</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass)</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">// priors[iclass]/=normPrior;</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//sort bands</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> std::sort(band_opt.begin(),band_opt.end());</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">// map<string,short> classValueMap;//global variable for now (due to getCost)</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> costfactory.setClassValueMap(classname_opt[iclass],classvalue_opt[iclass]);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">//----------------------------------- Training -------------------------------</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> vector<double> offset;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> vector<double> scale;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> vector< Vector2d<float> > trainingPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> vector< Vector2d<float> > testPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> map<string,Vector2d<float> > trainingMap;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> map<string,Vector2d<float> > testMap;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> vector<string> fields;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//organize training data</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> trainingPixels.clear();</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cout << <span class="stringliteral">"reading imageVector file "</span> << training_opt[0] << std::endl;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReader(training_opt[0]);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> inputReader.close();</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> inputReader.close();</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>(trainingMap.size()<2){</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from training file"</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">if</span>(input_opt.size()&&testMap.size()<2){</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from test input file"</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> trainingReader.close();</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> exit(1);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">catch</span>(std::exception& e){</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> std::cerr << <span class="stringliteral">"Error: "</span>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> std::cerr << e.what() << std::endl;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> std::cerr << CPLGetLastErrorMsg() << std::endl; </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> exit(1);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> exit(1);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">//delete class 0 ?</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">// if(verbose_opt[0]>=1)</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// std::cout << "erasing class 0 from training set (" << trainingMap[0].size() << " from " << totalSamples << ") samples" << std::endl;</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// totalSamples-=trainingMap[0].size();</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// trainingMap.erase(0);</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//convert map to vector</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> std::cout << <span class="stringliteral">"training pixels: "</span> << std::endl;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// if(classValueMap.size()){</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// //check if name in training is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// if(classValueMap[mapit->first]>0){</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// std::cout << mapit->first << " -> " << classValueMap[mapit->first] << std::endl;</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// std::cerr << "Error: names in classname option are not complete, please check names in training vector and make sure classvalue is > 0" << std::endl;</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment">// } </span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="comment">//delete small classes</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>((mapit->second).size()<minSize_opt[0]){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> trainingMap.erase(mapit);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> trainingPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> ++mapit;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> nclass=trainingPixels.size();</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span>(classname_opt.size())</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> assert(nclass==classname_opt.size());</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> nband=trainingPixels[0][0].size()-2;<span class="comment">//X and Y//trainingPixels[0][0].size();</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> mapit=testMap.begin();</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">while</span>(mapit!=testMap.end()){</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">//no need to delete small classes for test sample</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> testPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> ++mapit;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> assert(nclass==testPixels.size());</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> assert(nband=testPixels[0][0].size()-2);<span class="comment">//X and Y//testPixels[0][0].size();</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> assert(!cv_opt[0]);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> }</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">//do not remove outliers here: could easily be obtained through ogr2ogr -where 'B2<110' output.shp input.shp</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">//balance training data</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(balance_opt[0]>0){</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> srand(time(NULL));</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> totalSamples=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">while</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">int</span> index=rand()%trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> trainingPixels[iclass].erase(trainingPixels[iclass].begin()+index);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordtype">int</span> oldsize=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=trainingPixels[iclass].size();isample<balance_opt[0];++isample){</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">int</span> index = rand()%oldsize;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> trainingPixels[iclass].push_back(trainingPixels[iclass][index]);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> totalSamples+=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> assert(totalSamples==nclass*balance_opt[0]);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> }</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> offset.resize(nband);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> scale.resize(nband);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> assert(offset_opt.size()==nband);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> assert(scale_opt.size()==nband);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> std::cout << <span class="stringliteral">"scaling for band"</span> << iband << std::endl;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> offset[iband]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iband];</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> scale[iband]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iband];</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(scale[iband]<=0){</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordtype">float</span> theMin=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordtype">float</span> theMax=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingPixels[iclass].size();++isample){</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">if</span>(theMin>trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> theMin=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">if</span>(theMax<trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> theMax=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> offset[iband]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> scale[iband]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> std::cout << <span class="stringliteral">"Extreme image values for band "</span> << iband << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset[iband] << <span class="stringliteral">", "</span> << scale[iband] << std::endl;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> std::cout << <span class="stringliteral">"scaled values for band "</span> << iband << <span class="stringliteral">": ["</span> << (theMin-offset[iband])/scale[iband] << <span class="stringliteral">","</span> << (theMax-offset[iband])/scale[iband] << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// if(priors_opt.size()==1){//default: equal priors for each class</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// priors.resize(nclass);</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// priors[iclass]=1.0/nclass;</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment">// assert(priors_opt.size()==1||priors_opt.size()==nclass);</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> std::cout << <span class="stringliteral">"number of classes: "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// std::cout << "priors:";</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// std::cout << " " << priors[iclass];</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// std::cout << std::endl;</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">//set names in confusion matrix using nameVector</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> vector<string> nameVector=costfactory.getNameVector();</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iname=0;iname<nameVector.size();++iname){</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">if</span>(costfactory.getClassValueMap().empty())</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> costfactory.pushBackClassName(nameVector[iname]);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">// cm.pushBackClassName(nameVector[iname]);</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(costfactory.getClassIndex(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]))<0)</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> costfactory.pushBackClassName(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]));</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment">// if(classname_opt.empty()){</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass){</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">// std::cout << iclass << " " << cm.getClass(iclass) << " -> " << string2type<short>(cm.getClass(iclass)) << std::endl;</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// classValueMap[cm.getClass(iclass)]=string2type<short>(cm.getClass(iclass));</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">//Calculate features of trainig set</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> vector<unsigned int> nctraining;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> vector<unsigned int> nctest;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> nctraining.resize(nclass);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> nctest.resize(nclass);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> vector< Vector2d<float> > trainingFeatures(nclass);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> std::cout << <span class="stringliteral">"calculating features for class "</span> << iclass << std::endl;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> nctraining[iclass]=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> std::cout << <span class="stringliteral">"nctraining["</span> << iclass << <span class="stringliteral">"]: "</span> << nctraining[iclass] << std::endl;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">if</span>(testPixels.size()>iclass){</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> nctest[iclass]=testPixels[iclass].size();</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> std::cout << <span class="stringliteral">"nctest["</span> << iclass << <span class="stringliteral">"]: "</span> << nctest[iclass] << std::endl;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> }</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> nctest[iclass]=0;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> trainingFeatures[iclass].resize(nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> assert(trainingPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> assert(trainingPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordtype">float</span> value=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> trainingFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> }</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctest[iclass];++isample){</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> assert(testPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> assert(testPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">float</span> value=testPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">// testFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> trainingFeatures[iclass][nctraining[iclass]+isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> }</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> assert(trainingFeatures[iclass].size()==nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> }</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> costfactory.setNcTraining(nctraining);</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> costfactory.setNcTest(nctest);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordtype">int</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">int</span> maxFeatures=(maxFeatures_opt[0])? maxFeatures_opt[0] : 1;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordtype">double</span> previousCost=-1;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">double</span> cost=0;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> list<int> subset;<span class="comment">//set of selected features (levels) for each class combination</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <a class="code" href="classFeatureSelector.html">FeatureSelector</a> selector;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">if</span>(maxFeatures>=nFeatures){</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> subset.clear();</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature)</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> subset.push_back(ifeature);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> cost=costfactory.getCost(trainingFeatures);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">while</span>(fabs(cost-previousCost)>=epsilon_cost_opt[0]){</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> previousCost=cost;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">switch</span>(selMap[selector_opt[0]]){</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">case</span>(SFFS):</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> subset.clear();<span class="comment">//needed to clear in case of floating and brute force search</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> cost=selector.floating(trainingFeatures,costfactory,subset,maxFeatures,epsilon_cost_opt[0],verbose_opt[0]);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">case</span>(SFS):</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> cost=selector.forward(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">case</span>(SBS):</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> cost=selector.backward(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">case</span>(BFS):</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> subset.clear();<span class="comment">//needed to clear in case of floating and brute force search</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> cost=selector.bruteForce(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> std::cout << <span class="stringliteral">"Error: selector not supported, please use sffs, sfs, sbs or bfs"</span> << std::endl;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> exit(1);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> }</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> std::cout << <span class="stringliteral">"cost: "</span> << cost << std::endl;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> std::cout << <span class="stringliteral">"previousCost: "</span> << previousCost << std::endl;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> std::cout << std::setprecision(12) << <span class="stringliteral">"cost-previousCost: "</span> << cost - previousCost << <span class="stringliteral">" ( "</span> << epsilon_cost_opt[0] << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> }</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span>(!maxFeatures_opt[0])</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> ++maxFeatures;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> }</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> }</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> std::cout << <span class="stringliteral">"catched feature selection"</span> << std::endl;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> exit(1);</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> }</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> cout <<<span class="stringliteral">"cost: "</span> << cost << endl;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> subset.sort();</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">for</span>(list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> std::cout << <span class="stringliteral">" -b "</span> << *lit;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">// if((*(lit))!=subset.back())</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">// cout << endl;</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">// *NOTE* Because svm_model contains pointers to svm_problem, you can</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment">// not free the memory used by svm_problem if you are still using the</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment">// svm_model produced by svm_train(). </span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// free(prob.y);</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment">// free(prob.x);</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment">// free(x_space);</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="comment">// svm_destroy_param(¶m);</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classCostFactoryANN_html"><div class="ttname"><a href="classCostFactoryANN.html">CostFactoryANN</a></div><div class="ttdef"><b>Definition:</b> <a href="pkfsann_8h_source.html#l00029">pkfsann.h:29</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classFeatureSelector_html"><div class="ttname"><a href="classFeatureSelector.html">FeatureSelector</a></div><div class="ttdef"><b>Definition:</b> <a href="FeatureSelector_8h_source.html#l00035">FeatureSelector.h:35</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+<div class="ttc" id="classFANN_1_1neural__net_html"><div class="ttname"><a href="classFANN_1_1neural__net.html">FANN::neural_net</a></div><div class="ttdef"><b>Definition:</b> <a href="myfann__cpp_8h_source.html#l00978">myfann_cpp.h:978</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfsann_8h_source.html b/doc/html/pkfsann_8h_source.html
new file mode 100644
index 0000000..03baae8
--- /dev/null
+++ b/doc/html/pkfsann_8h_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfsann.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfsann.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfsann.h: feature selection for ann classifier</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef _PKFSANNH_H_</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#define _PKFSANNH_H_</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">enum</span> SelectorValue { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4};</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classCostFactoryANN.html"> 29</a></span> <span class="keyword">class </span><a class="code" href="classCostFactoryANN.html">CostFactoryANN</a> : <span class="keyword">public</span> <a class="code" href="classCostFactory.html">CostFactory</a></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classCostFactoryANN.html">CostFactoryANN</a>();</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classCostFactoryANN.html">CostFactoryANN</a>(<span class="keyword">const</span> std::vector<unsigned int>& nneuron, <span class="keywordtype">float</span> connection, <span class="keyword">const</span> std::vector<float> weights, <span class="keywordtype">float</span> learning, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxit, <span cla [...]
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> ~<a class="code" href="classCostFactoryANN.html">CostFactoryANN</a>();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">double</span> getCost(<span class="keyword">const</span> std::vector<<a class="code" href="classVector2d.html">Vector2d<float></a> > &trainingFeatures);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> std::vector<unsigned int> m_nneuron;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">float</span> m_connection;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> std::vector<float> m_weights;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">float</span> m_learning;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_maxit;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classCostFactoryANN_html"><div class="ttname"><a href="classCostFactoryANN.html">CostFactoryANN</a></div><div class="ttdef"><b>Definition:</b> <a href="pkfsann_8h_source.html#l00029">pkfsann.h:29</a></div></div>
+<div class="ttc" id="classCostFactory_html"><div class="ttname"><a href="classCostFactory.html">CostFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactory_8h_source.html#l00030">CostFactory.h:30</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfssvm.html b/doc/html/pkfssvm.html
new file mode 100644
index 0000000..45a3115
--- /dev/null
+++ b/doc/html/pkfssvm.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkfssvm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfssvm </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>feature selection for support vector machine classifier pksvm </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkfssvm -t training -n number </code></p>
+<p><code></code></p>
+<p><code> Options:</code></p>
+<p><code> Advanced options: </code></p>
+<h1><a class="anchor" id="pkfssvm_description"></a>
+Description</h1>
+<p>Classification problems dealing with high dimensional input data can be challenging due to the Hughes phenomenon. Hyperspectral data, for instance, can have hundreds of spectral bands and require special attention when being classified. In particular when limited training data are available, the classification of such data can be problematic without reducing the dimension.</p>
+<p>The SVM classifier has been shown to be more robust to this type of problem than others. Nevertheless, classification accuracy can often be improved with feature selection methods. The utility pkfssvm implements a number of feature selection techniques, among which a sequential floating forward search (SFFS). </p>
+<h1><a class="anchor" id="pkfssvm_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input test set (leave empty to perform a cross validation based on training only) </td></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). </td></tr>
+<tr>
+<td>n </td><td>nf </td><td>unsigned short </td><td>0 </td><td>number of features to select (0 to select optimal number, see also ecost option) </td></tr>
+<tr>
+<td>tln </td><td>tln </td><td>std::string </td><td></td><td>training layer name(s) </td></tr>
+<tr>
+<td>label </td><td>label </td><td>std::string </td><td>label </td><td>identifier for class label in training vector file. </td></tr>
+<tr>
+<td>bal </td><td>balance </td><td>unsigned int </td><td>0 </td><td>balance the input data to this number of samples for each class </td></tr>
+<tr>
+<td>random </td><td>random </td><td>bool </td><td>true </td><td>in case of balance, randomize input data </td></tr>
+<tr>
+<td>min </td><td>min </td><td>int </td><td>0 </td><td>if number of training pixels is less then min, do not take this class into account </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td></td><td>band index (starting from 0, either use band option or use start to end) </td></tr>
+<tr>
+<td>s </td><td>start </td><td>double </td><td>0 </td><td>start band sequence number </td></tr>
+<tr>
+<td>e </td><td>end </td><td>double </td><td>0 </td><td>end band sequence number (set to 0 to include all bands) </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td>svmt </td><td>svmtype </td><td>std::string </td><td>C_SVC </td><td>type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) </td></tr>
+<tr>
+<td>kt </td><td>kerneltype </td><td>std::string </td><td>radial </td><td>type of kernel function (linear,polynomial,radial,sigmoid) </td></tr>
+<tr>
+<td>kd </td><td>kd </td><td>unsigned short </td><td>3 </td><td>degree in kernel function </td></tr>
+<tr>
+<td>g </td><td>gamma </td><td>float </td><td>1 </td><td>gamma in kernel function </td></tr>
+<tr>
+<td>c0 </td><td>coef0 </td><td>float </td><td>0 </td><td>coef0 in kernel function </td></tr>
+<tr>
+<td>cc </td><td>ccost </td><td>float </td><td>1000 </td><td>the parameter C of C-SVC, epsilon-SVR, and nu-SVR </td></tr>
+<tr>
+<td>nu </td><td>nu </td><td>float </td><td>0.5 </td><td>the parameter nu of nu-SVC, one-class SVM, and nu-SVR </td></tr>
+<tr>
+<td>eloss </td><td>eloss </td><td>float </td><td>0.1 </td><td>the epsilon in loss function of epsilon-SVR </td></tr>
+<tr>
+<td>cache </td><td>cache </td><td>int </td><td>100 </td><td>cache memory size in MB </td></tr>
+<tr>
+<td>etol </td><td>etol </td><td>float </td><td>0.001 </td><td>the tolerance of termination criterion </td></tr>
+<tr>
+<td>shrink </td><td>shrink </td><td>bool </td><td>false </td><td>whether to use the shrinking heuristics </td></tr>
+<tr>
+<td>pe </td><td>probest </td><td>bool </td><td>true </td><td>whether to train a SVC or SVR model for probability estimates </td></tr>
+<tr>
+<td>sm </td><td>sm </td><td>std::string </td><td>sffs </td><td>feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search) </td></tr>
+<tr>
+<td>ecost </td><td>ecost </td><td>float </td><td>0.001 </td><td>epsilon for stopping criterion in cost function to determine optimal number of features </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>2 </td><td>n-fold cross validation mode </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>list of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>list of class values (use same order as in classname opt. </td></tr>
+</table>
+Usage: pkfssvm -t training -n number </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkfssvm_8cc_source.html b/doc/html/pkfssvm_8cc_source.html
new file mode 100644
index 0000000..6f79cc8
--- /dev/null
+++ b/doc/html/pkfssvm_8cc_source.html
@@ -0,0 +1,754 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkfssvm.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkfssvm.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkfssvm.cc: feature selection for support vector machine classifier pksvm</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "algorithms/CostFactorySVM.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "algorithms/FeatureSelector.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/svm.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">enum</span> SelectorValue { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4};</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// CostFactorySVM::CostFactorySVM()</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// : CostFactory(2,0), m_svm_type("C_SVC"), m_kernel_type("radial"), m_kernel_degree(3), m_gamma(1.0), m_coef0(0), m_ccost(1000), m_nu(0.5), m_epsilon_loss(100), m_cache(100), m_epsilon_tol(0.001), m_shrinking(false), m_prob_est(true){</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// CostFactorySVM::~CostFactorySVM(){</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// CostFactorySVM::CostFactorySVM(std::string svm_type, std::string kernel_type, unsigned short kernel_degree, float gamma, float coef0, float ccost, float nu, float epsilon_loss, int cache, float epsilon_tol, bool shrinking, bool prob_est, unsigned short cv, bool verbose)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// : CostFactory(cv,verbose), m_svm_type(svm_type), m_kernel_type(kernel_type), m_kernel_degree(kernel_degree), m_gamma(gamma), m_coef0(coef0), m_ccost(ccost), m_nu(nu), m_epsilon_loss(epsilon_loss), m_cache(cache), m_epsilon_tol(epsilon_tol), m_shrinking(shrinking), m_prob_est(prob_est){};</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// double CostFactorySVM::getCost(const vector<Vector2d<float> > &trainingFeatures){</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// std::map<std::string, svm::SVM_TYPE> svmMap;</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// svmMap["C_SVC"]=svm::C_SVC;</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// svmMap["nu_SVC"]=svm::nu_SVC;</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// svmMap["one_class"]=svm::one_class;</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">// svmMap["epsilon_SVR"]=svm::epsilon_SVR;</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// svmMap["nu_SVR"]=svm::nu_SVR;</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// std::map<std::string, svm::KERNEL_TYPE> kernelMap;</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// kernelMap["linear"]=svm::linear;</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// kernelMap["polynomial"]=svm::polynomial;</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// kernelMap["radial"]=svm::radial;</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// kernelMap["sigmoid;"]=svm::sigmoid;</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// unsigned short nclass=trainingFeatures.size();</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// unsigned int ntraining=0;</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// unsigned int ntest=0;</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass){</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// ntraining+=m_nctraining[iclass];</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// ntest+=m_nctest[iclass];</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// if(ntest)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// assert(!m_cv);</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// if(!m_cv)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// assert(ntest);</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// unsigned short nFeatures=trainingFeatures[0][0].size();</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// struct svm_parameter param;</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// param.svm_type = svmMap[m_svm_type];</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// param.kernel_type = kernelMap[m_kernel_type];</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment">// param.degree = m_kernel_degree;</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// param.gamma = (m_gamma>0)? m_gamma : 1.0/nFeatures;</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// param.coef0 = m_coef0;</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// param.nu = m_nu;</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// param.cache_size = m_cache;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// param.C = m_ccost;</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// param.eps = m_epsilon_tol;</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// param.p = m_epsilon_loss;</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// param.shrinking = (m_shrinking)? 1 : 0;</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">// param.probability = (m_prob_est)? 1 : 0;</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// param.nr_weight = 0;//not used: I use priors and balancing</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// param.weight_label = NULL;</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// param.weight = NULL;</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// param.verbose=(m_verbose>1)? true:false;</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// struct svm_model* svm;</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// struct svm_problem prob;</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// struct svm_node* x_space;</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// prob.l=ntraining;</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// prob.y = Malloc(double,prob.l);</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// prob.x = Malloc(struct svm_node *,prob.l);</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// x_space = Malloc(struct svm_node,(nFeatures+1)*ntraining);</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// unsigned long int spaceIndex=0;</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// int lIndex=0;</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass){</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// // for(int isample=0;isample<trainingFeatures[iclass].size();++isample){</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// for(int isample=0;isample<m_nctraining[iclass];++isample){</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// prob.x[lIndex]=&(x_space[spaceIndex]);</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// for(int ifeature=0;ifeature<nFeatures;++ifeature){</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// x_space[spaceIndex].index=ifeature+1;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// x_space[spaceIndex].value=trainingFeatures[iclass][isample][ifeature];</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// ++spaceIndex;</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// x_space[spaceIndex++].index=-1;</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// prob.y[lIndex]=iclass;</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// ++lIndex;</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// assert(lIndex==prob.l);</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// if(m_verbose>2)</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// std::cout << "checking parameters" << std::endl;</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">// svm_check_parameter(&prob,¶m);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">// if(m_verbose>2)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">// std::cout << "parameters ok, training" << std::endl;</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// svm=svm_train(&prob,¶m);</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// if(m_verbose>2)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">// std::cout << "SVM is now trained" << std::endl;</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">// m_cm.clearResults();</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// if(m_cv>1){</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// double *target = Malloc(double,prob.l);</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">// svm_cross_validation(&prob,¶m,m_cv,target);</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">// assert(param.svm_type != EPSILON_SVR&¶m.svm_type != NU_SVR);//only for regression</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// for(int i=0;i<prob.l;i++){</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// string refClassName=m_nameVector[prob.y[i]];</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// string className=m_nameVector[target[i]];</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">// if(m_classValueMap.size())</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// m_cm.incrementResult(m_cm.getClass(prob.y[i]),m_cm.getClass(target[i]),1.0);</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// free(target);</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// struct svm_node *x_test;</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// vector<double> result(nclass);</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// x_test = Malloc(struct svm_node,(nFeatures+1));</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass){</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">// for(int isample=0;isample<m_nctest[iclass];++isample){</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// for(int ifeature=0;ifeature<nFeatures;++ifeature){</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// x_test[ifeature].index=ifeature+1;</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment">// x_test[ifeature].value=trainingFeatures[iclass][m_nctraining[iclass]+isample][ifeature];</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// x_test[nFeatures].index=-1;</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// double predict_label=0;</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// assert(svm_check_probability_model(svm));</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// predict_label = svm_predict_probability(svm,x_test,&(result[0]));</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// // predict_label = svm_predict(svm,x_test);</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// string refClassName=m_nameVector[iclass];</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// string className=m_nameVector[static_cast<short>(predict_label)];</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// if(m_classValueMap.size())</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// m_cm.incrementResult(type2string<short>(m_classValueMap[refClassName]),type2string<short>(m_classValueMap[className]),1.0);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// m_cm.incrementResult(refClassName,className,1.0);</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// free(x_test);</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// if(m_verbose>1)</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// std::cout << m_cm << std::endl;</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// assert(m_cm.nReference());</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// // if(m_verbose)</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// // std::cout << m_cm << std::endl;</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// // std::cout << "Kappa: " << m_cm.kappa() << std::endl;</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// // double se95_oa=0;</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// // double doa=0;</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// // doa=m_cm.oa_pct(&se95_oa);</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// // std::cout << "Overall Accuracy: " << doa << " (" << se95_oa << ")" << std::endl;</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// // *NOTE* Because svm_model contains pointers to svm_problem, you can</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// // not free the memory used by svm_problem if you are still using the</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// // svm_model produced by svm_train(). </span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// // however, we will re-train the svm later on after the feature selection</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// free(prob.y);</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// free(prob.x);</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">// free(x_space);</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">// svm_free_and_destroy_model(&(svm));</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// return(m_cm.kappa());</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> {</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// vector<double> priors;</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">//--------------------------- command line options ------------------------------------</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input test set (leave empty to perform a cross validation based on training only)"</span>); </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option)."</span>); </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> tlayer_opt(<span class="stringliteral">"tln"</span>, <span class="stringliteral">"tln"</span>, <span class="stringliteral">"training layer name(s)"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"label"</span>, <span class="stringliteral">"label"</span>, <span class="stringliteral">"identifier for class label in training vector file."</span>,<span class="stringliteral">"label"</span>); </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> maxFeatures_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"nf"</span>, <span class="stringliteral">"number of features to select (0 to select optimal number, see also ecost option)"</span>, 0);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> balance_opt(<span class="stringliteral">"bal"</span>, <span class="stringliteral">"balance"</span>, <span class="stringliteral">"balance the input data to this number of samples for each class"</span>, 0);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> random_opt(<span class="stringliteral">"random"</span>,<span class="stringliteral">"random"</span>, <span class="stringliteral">"in case of balance, randomize input data"</span>, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minSize_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"if number of training pixels is less then min, do not take this class into account"</span>, 0);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index (starting from 0, either use band option or use start to end)"</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bstart_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"start"</span>, <span class="stringliteral">"start band sequence number"</span>,0); </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bend_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"end"</span>, <span class="stringliteral">"end band sequence number (set to 0 to include all bands)"</span>, 0); </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> selector_opt(<span class="stringliteral">"sm"</span>, <span class="stringliteral">"sm"</span>, <span class="stringliteral">"feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search)"</span>,<span class="stringliteral" [...]
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_cost_opt(<span class="stringliteral">"ecost"</span>, <span class="stringliteral">"ecost"</span>, <span class="stringliteral">"epsilon for stopping criterion in cost function to determine optimal number of features"</span>,0.001);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> svm_type_opt(<span class="stringliteral">"svmt"</span>, <span class="stringliteral">"svmtype"</span>, <span class="stringliteral">"type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR)"</span>,<span class="stringliteral">"C_SVC"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> kernel_type_opt(<span class="stringliteral">"kt"</span>, <span class="stringliteral">"kerneltype"</span>, <span class="stringliteral">"type of kernel function (linear,polynomial,radial,sigmoid) "</span>,<span class="stringliteral">"radial"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> kernel_degree_opt(<span class="stringliteral">"kd"</span>, <span class="stringliteral">"kd"</span>, <span class="stringliteral">"degree in kernel function"</span>,3);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> gamma_opt(<span class="stringliteral">"g"</span>, <span class="stringliteral">"gamma"</span>, <span class="stringliteral">"gamma in kernel function"</span>,1.0);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> coef0_opt(<span class="stringliteral">"c0"</span>, <span class="stringliteral">"coef0"</span>, <span class="stringliteral">"coef0 in kernel function"</span>,0);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> ccost_opt(<span class="stringliteral">"cc"</span>, <span class="stringliteral">"ccost"</span>, <span class="stringliteral">"the parameter C of C-SVC, epsilon-SVR, and nu-SVR"</span>,1000);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> nu_opt(<span class="stringliteral">"nu"</span>, <span class="stringliteral">"nu"</span>, <span class="stringliteral">"the parameter nu of nu-SVC, one-class SVM, and nu-SVR"</span>,0.5);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_loss_opt(<span class="stringliteral">"eloss"</span>, <span class="stringliteral">"eloss"</span>, <span class="stringliteral">"the epsilon in loss function of epsilon-SVR"</span>,0.1);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> cache_opt(<span class="stringliteral">"cache"</span>, <span class="stringliteral">"cache"</span>, <span class="stringliteral">"cache memory size in MB"</span>,100);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_tol_opt(<span class="stringliteral">"etol"</span>, <span class="stringliteral">"etol"</span>, <span class="stringliteral">"the tolerance of termination criterion"</span>,0.001);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> shrinking_opt(<span class="stringliteral">"shrink"</span>, <span class="stringliteral">"shrink"</span>, <span class="stringliteral">"whether to use the shrinking heuristics"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> prob_est_opt(<span class="stringliteral">"pe"</span>, <span class="stringliteral">"probest"</span>, <span class="stringliteral">"whether to train a SVC or SVR model for probability estimates"</span>,<span class="keyword">true</span>,2);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"n-fold cross validation mode"</span>,2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"list of class names."</span>); </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"list of class values (use same order as in classname opt."</span>); </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"set to: 0 (results only), 1 (confusion matrix), 2 (debug)"</span>,0,2);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> tlayer_opt.setHide(1);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> label_opt.setHide(1);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> balance_opt.setHide(1);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> random_opt.setHide(1);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> bstart_opt.setHide(1);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> bend_opt.setHide(1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> svm_type_opt.setHide(1);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> kernel_type_opt.setHide(1);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> kernel_degree_opt.setHide(1);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> gamma_opt.setHide(1);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> coef0_opt.setHide(1);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> ccost_opt.setHide(1);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> nu_opt.setHide(1);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> epsilon_loss_opt.setHide(1);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> cache_opt.setHide(1);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> epsilon_tol_opt.setHide(1);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> shrinking_opt.setHide(1);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> prob_est_opt.setHide(1);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> selector_opt.setHide(1);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> epsilon_cost_opt.setHide(1);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> cv_opt.setHide(1);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> classname_opt.setHide(1);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> classvalue_opt.setHide(1);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> maxFeatures_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> tlayer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> balance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> minSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> bstart_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> bend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> svm_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> kernel_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> kernel_degree_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> gamma_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> coef0_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> ccost_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> nu_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> epsilon_loss_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> cache_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> epsilon_tol_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> shrinking_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> prob_est_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> selector_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> epsilon_cost_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> exit(0);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> cout << endl;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> cout << <span class="stringliteral">"Usage: pkfssvm -t training -n number"</span> << endl;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> cout << endl;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <a class="code" href="classCostFactorySVM.html">CostFactorySVM</a> costfactory(svm_type_opt[0], kernel_type_opt[0], kernel_degree_opt[0], gamma_opt[0], coef0_opt[0], ccost_opt[0], nu_opt[0], epsilon_loss_opt[0], cache_opt[0], epsilon_tol_opt[0], shrinking_opt[0], prob_est_opt[0], cv_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> assert(training_opt.size());</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> costfactory.setCv(0);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> std::cout << <span class="stringliteral">"input filename: "</span> << input_opt[0] << std::endl;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> std::cout << <span class="stringliteral">"training vector file: "</span> << std::endl;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<training_opt.size();++ifile)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> std::cout << training_opt[ifile] << std::endl;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> std::cout << <span class="stringliteral">"verbose: "</span> << verbose_opt[0] << std::endl;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">static</span> std::map<std::string, SelectorValue> selMap;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment">//initialize selMap</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> selMap[<span class="stringliteral">"sffs"</span>]=SFFS;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> selMap[<span class="stringliteral">"sfs"</span>]=SFS;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> selMap[<span class="stringliteral">"sbs"</span>]=SBS;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> selMap[<span class="stringliteral">"bfs"</span>]=BFS;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalSamples=0;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalTestSamples=0;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nclass=0;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">int</span> startBand=2;<span class="comment">//first two bands represent X and Y pos</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// if(priors_opt.size()>1){//priors from argument list</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// priors.resize(priors_opt.size());</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// double normPrior=0;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass){</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// priors[iclass]=priors_opt[iclass];</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment">// normPrior+=priors[iclass];</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">// //normalize</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass)</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment">// priors[iclass]/=normPrior;</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">//sort bands</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> std::sort(band_opt.begin(),band_opt.end());</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> costfactory.setClassValueMap(classname_opt[iclass],classvalue_opt[iclass]);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment">//----------------------------------- Training -------------------------------</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> vector<double> offset;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> vector<double> scale;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> vector< Vector2d<float> > trainingPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> vector< Vector2d<float> > testPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> map<string,Vector2d<float> > trainingMap;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> map<string,Vector2d<float> > testMap;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> vector<string> fields;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keyword">struct </span><a class="code" href="structsvm__problem.html">svm_problem</a> prob;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment">//organize training data</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> trainingPixels.clear();</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> testPixels.clear();</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> std::cout << <span class="stringliteral">"reading training file "</span> << training_opt[0] << std::endl;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReader(training_opt[0]);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> inputReader.close();</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> }</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> totalTestSamples=inputReader.readDataImageOgr(testMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> inputReader.close();</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">if</span>(trainingMap.size()<2){</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from training input file"</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">if</span>(input_opt.size()&&testMap.size()<2){</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from test input file"</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> trainingReader.close();</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> exit(1);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> }</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">catch</span>(std::exception& e){</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> std::cerr << <span class="stringliteral">"Error: "</span>;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> std::cerr << e.what() << std::endl;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> std::cerr << CPLGetLastErrorMsg() << std::endl; </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> exit(1);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> }</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> exit(1);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">//todo: delete class 0 ?</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment">// if(verbose_opt[0]>=1)</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment">// std::cout << "erasing class 0 from training set (" << trainingMap[0].size() << " from " << totalSamples << ") samples" << std::endl;</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment">// totalSamples-=trainingMap[0].size();</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment">// trainingMap.erase(0);</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> std::cout << <span class="stringliteral">"training pixels: "</span> << std::endl;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment">//delete small classes</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span>((mapit->second).size()<minSize_opt[0]){</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> trainingMap.erase(mapit);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> costfactory.pushBackName(mapit->first);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> trainingPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> ++mapit;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> nclass=trainingPixels.size();</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">if</span>(classname_opt.size())</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> assert(nclass==classname_opt.size());</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> nband=trainingPixels[0][0].size()-2;<span class="comment">//X and Y//trainingPixels[0][0].size();</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> mapit=testMap.begin();</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">while</span>(mapit!=testMap.end()){</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">if</span>(costfactory.getClassValueMap().size()){</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment">// if(classValueMap.size()){</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="comment">//check if name in test is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">if</span>((costfactory.getClassValueMap())[mapit->first]>0){</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> ;<span class="comment">//ok, no need to print to std::cout </span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> std::cerr << <span class="stringliteral">"Error: names in classname option are not complete, please check names in test vector and make sure classvalue is > 0"</span> << std::endl;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> exit(1);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> } </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">//no need to delete small classes for test sample</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> testPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> ++mapit;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> assert(nclass==testPixels.size());</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> assert(nband=testPixels[0][0].size()-2);<span class="comment">//X and Y//testPixels[0][0].size();</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> assert(!cv_opt[0]);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="comment">//do not remove outliers here: could easily be obtained through ogr2ogr -where 'B2<110' output.shp input.shp</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment">//balance training data</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">//todo: do I mean to use random_opt?</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span>(balance_opt[0]>0){</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> srand(time(NULL));</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> totalSamples=0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">while</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordtype">int</span> index=rand()%trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> trainingPixels[iclass].erase(trainingPixels[iclass].begin()+index);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordtype">int</span> oldsize=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=trainingPixels[iclass].size();isample<balance_opt[0];++isample){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">int</span> index = rand()%oldsize;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> trainingPixels[iclass].push_back(trainingPixels[iclass][index]);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> }</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> totalSamples+=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> }</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> assert(totalSamples==nclass*balance_opt[0]);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> offset.resize(nband);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> scale.resize(nband);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> assert(offset_opt.size()==nband);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> assert(scale_opt.size()==nband);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> std::cout << <span class="stringliteral">"scaling for band"</span> << iband << std::endl;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> offset[iband]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iband];</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> scale[iband]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iband];</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">if</span>(scale[iband]<=0){</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">float</span> theMin=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordtype">float</span> theMax=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingPixels[iclass].size();++isample){</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">if</span>(theMin>trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> theMin=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span>(theMax<trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> theMax=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> }</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> offset[iband]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> scale[iband]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> std::cout << <span class="stringliteral">"Extreme image values for band "</span> << iband << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset[iband] << <span class="stringliteral">", "</span> << scale[iband] << std::endl;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> std::cout << <span class="stringliteral">"scaled values for band "</span> << iband << <span class="stringliteral">": ["</span> << (theMin-offset[iband])/scale[iband] << <span class="stringliteral">","</span> << (theMax-offset[iband])/scale[iband] << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> }</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="comment">// if(priors_opt.size()==1){//default: equal priors for each class</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="comment">// priors.resize(nclass);</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">// priors[iclass]=1.0/nclass;</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="comment">// assert(priors_opt.size()==1||priors_opt.size()==nclass);</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> std::cout << <span class="stringliteral">"number of classes: "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment">// std::cout << "priors:";</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="comment">// std::cout << " " << priors[iclass];</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment">// std::cout << std::endl;</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> }</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment">//set names in confusion matrix using nameVector</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> vector<string> nameVector=costfactory.getNameVector();</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iname=0;iname<nameVector.size();++iname){</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">if</span>(costfactory.getClassValueMap().empty())</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> costfactory.pushBackClassName(nameVector[iname]);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment">// cm.pushBackClassName(nameVector[iname]);</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(costfactory.getClassIndex(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]))<0)</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> costfactory.pushBackClassName(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]));</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment">//Calculate features of training (and test) set</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> vector<unsigned int> nctraining;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> vector<unsigned int> nctest;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> nctraining.resize(nclass);</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> nctest.resize(nclass);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> vector< Vector2d<float> > trainingFeatures(nclass);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> std::cout << <span class="stringliteral">"calculating features for class "</span> << iclass << std::endl;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> nctraining[iclass]=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> std::cout << <span class="stringliteral">"nctraining["</span> << iclass << <span class="stringliteral">"]: "</span> << nctraining[iclass] << std::endl;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span>(testPixels.size()>iclass){</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> nctest[iclass]=testPixels[iclass].size();</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> std::cout << <span class="stringliteral">"nctest["</span> << iclass << <span class="stringliteral">"]: "</span> << nctest[iclass] << std::endl;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> }</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> nctest[iclass]=0;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> trainingFeatures[iclass].resize(nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> assert(trainingPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> assert(trainingPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">float</span> value=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> trainingFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> }</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctest[iclass];++isample){</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> assert(testPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> assert(testPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">float</span> value=testPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment">// testFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> trainingFeatures[iclass][nctraining[iclass]+isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> assert(trainingFeatures[iclass].size()==nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> costfactory.setNcTraining(nctraining);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> costfactory.setNcTest(nctest);</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordtype">int</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordtype">int</span> maxFeatures=(maxFeatures_opt[0])? maxFeatures_opt[0] : 1;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordtype">double</span> previousCost=-1;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordtype">double</span> cost=0;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> list<int> subset;<span class="comment">//set of selected features (levels) for each class combination</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <a class="code" href="classFeatureSelector.html">FeatureSelector</a> selector;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">if</span>(maxFeatures>=nFeatures){</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> subset.clear();</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature)</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> subset.push_back(ifeature);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> cost=costfactory.getCost(trainingFeatures);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">while</span>(fabs(cost-previousCost)>=epsilon_cost_opt[0]){</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> previousCost=cost;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">switch</span>(selMap[selector_opt[0]]){</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">case</span>(SFFS):</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> subset.clear();<span class="comment">//needed to clear in case of floating and brute force search</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> cost=selector.floating(trainingFeatures,costfactory,subset,maxFeatures,epsilon_cost_opt[0],verbose_opt[0]);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">case</span>(SFS):</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> cost=selector.forward(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">case</span>(SBS):</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> cost=selector.backward(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">case</span>(BFS):</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> subset.clear();<span class="comment">//needed to clear in case of floating and brute force search</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> cost=selector.bruteForce(trainingFeatures,costfactory,subset,maxFeatures,verbose_opt[0]);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> std::cout << <span class="stringliteral">"Error: selector not supported, please use sffs, sfs, sbs or bfs"</span> << std::endl;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> exit(1);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> }</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> std::cout << <span class="stringliteral">"cost: "</span> << cost << std::endl;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> std::cout << <span class="stringliteral">"previousCost: "</span> << previousCost << std::endl;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> std::cout << std::setprecision(12) << <span class="stringliteral">"cost-previousCost: "</span> << cost - previousCost << <span class="stringliteral">" ( "</span> << epsilon_cost_opt[0] << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">if</span>(!maxFeatures_opt[0])</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> ++maxFeatures;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> }</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> }</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> std::cout << <span class="stringliteral">"catched feature selection"</span> << std::endl;</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> exit(1);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> cout <<<span class="stringliteral">"cost: "</span> << cost << endl;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> subset.sort();</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">for</span>(list<int>::const_iterator lit=subset.begin();lit!=subset.end();++lit)</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> std::cout << <span class="stringliteral">" -b "</span> << *lit;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="comment">// if((*(lit))!=subset.back())</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="comment">// cout << endl;</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="comment">// *NOTE* Because svm_model contains pointers to svm_problem, you can</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="comment">// not free the memory used by svm_problem if you are still using the</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">// svm_model produced by svm_train(). </span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="comment">// free(prob.y);</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="comment">// free(prob.x);</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// free(x_space);</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment">// svm_destroy_param(¶m);</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classFeatureSelector_html"><div class="ttname"><a href="classFeatureSelector.html">FeatureSelector</a></div><div class="ttdef"><b>Definition:</b> <a href="FeatureSelector_8h_source.html#l00035">FeatureSelector.h:35</a></div></div>
+<div class="ttc" id="classCostFactorySVM_html"><div class="ttname"><a href="classCostFactorySVM.html">CostFactorySVM</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactorySVM_8h_source.html#l00034">CostFactorySVM.h:34</a></div></div>
+<div class="ttc" id="structsvm__problem_html"><div class="ttname"><a href="structsvm__problem.html">svm_problem</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00018">svm.h:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkgetmask.html b/doc/html/pkgetmask.html
new file mode 100644
index 0000000..5d7edf5
--- /dev/null
+++ b/doc/html/pkgetmask.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkgetmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkgetmask </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to create mask image based on values in input raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkgetmask -i input -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-min value]* [-max value]* [-data value]* [-nodata value]*</code></p>
+<p><code> Advanced options: [-b band]* [–operator AND|OR] [-ot type] [-of format] [-co option]* [-ct table]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkgetmask_description"></a>
+Description</h1>
+<p>The utility pkgetmask creates a mask raster dataset from an input raster dataset. Values smaller than the minimum value (-min) or larger than the maximum value (-max) will result in a -nodata value in the mask.</p>
+<h1><a class="anchor" id="pkgetmask_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output mask file </td></tr>
+<tr>
+<td>min </td><td>min </td><td>double </td><td></td><td>Values smaller than min threshold(s) are masked as invalid. Use one threshold for each band </td></tr>
+<tr>
+<td>max </td><td>max </td><td>double </td><td></td><td>Values greater than max threshold(s) are masked as invalid. Use one threshold for each band </td></tr>
+<tr>
+<td>data </td><td>data </td><td>unsigned short </td><td>1 </td><td>value(s) for valid pixels: between min and max </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>unsigned short </td><td>0 </td><td>value(s) for invalid pixels: not between min and max </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td>0 </td><td>band(s) used for mask </td></tr>
+<tr>
+<td>p </td><td>operator </td><td>std::string </td><td>OR </td><td>Operator: [AND,OR]. </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td>Byte </td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+</table>
+Usage: pkgetmask -i input -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkgetmask can be found <a class="el" href="md_examples_pkgetmask.html#examples_pkgetmask">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkgetmask_8cc_source.html b/doc/html/pkgetmask_8cc_source.html
new file mode 100644
index 0000000..0ea4402
--- /dev/null
+++ b/doc/html/pkgetmask_8cc_source.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkgetmask.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkgetmask.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkgetmask.cc: program to create mask image based on values in input raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band(s) used for mask"</span>, 0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> min_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"Values smaller than min threshold(s) are masked as invalid. Use one threshold for each band"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> max_opt(<span class="stringliteral">"max"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"Values greater than max threshold(s) are masked as invalid. Use one threshold for each band"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> operator_opt(<span class="stringliteral">"p"</span>, <span class="stringliteral">"operator"</span>, <span class="stringliteral">"Operator: [AND,OR]."</span>, <span class="stringliteral">"OR"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> data_opt(<span class="stringliteral">"data"</span>, <span class="stringliteral">"data"</span>, <span class="stringliteral">"value(s) for valid pixels: between min and max"</span>, 1);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"value(s) for invalid pixels: not between min and max"</span>, 0);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output mask file"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringlitera [...]
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0,2);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> operator_opt.setHide(1);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> otype_opt.setHide(1);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> oformat_opt.setHide(1);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> data_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> operator_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> exit(0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> cout << endl;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> cout << <span class="stringliteral">"Usage: pkgetmask -i input -o output"</span> << endl;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> cout << endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> cout << endl;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> cout << <span class="stringliteral">"Unknown output pixel type: "</span> << otype_opt[0] << endl;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> cout << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader(input_opt[0]);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> assert(band_opt.size()>=0);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> assert(band_opt.size()<=imgReader.nrOfBand());</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(min_opt.size()&&max_opt.size()){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span>(min_opt.size()!=max_opt.size())</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> cerr << <span class="stringliteral">"Error: number of min and max options must correspond if both min and max options are provide"</span> << endl;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> assert(min_opt.size()==max_opt.size());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(min_opt.size()){</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">while</span>(band_opt.size()>min_opt.size())</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> min_opt.push_back(min_opt[0]);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">while</span>(min_opt.size()>data_opt.size())</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> data_opt.push_back(data_opt[0]);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(max_opt.size()){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">while</span>(band_opt.size()>max_opt.size())</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> max_opt.push_back(max_opt[0]);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">while</span>(max_opt.size()>data_opt.size())</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> data_opt.push_back(data_opt[0]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// assert(min_opt.size()==max_opt.size());</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// if(verbose_opt[0]){</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// cout << "min,max values: ";</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// for(int imin=0;imin<min_opt.size();++imin){</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// cout << min_opt[imin] << "," << max_opt[imin];</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// if(imin<min_opt.size()-1)</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// cout << " ";</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// cout << endl;</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> vector< vector<float> > lineBuffer(band_opt.size());</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> lineBuffer.resize(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriter;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">//if output type not set, get type from input image</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(theType==GDT_Unknown){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> theType=imgReader.getDataType();</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> cout << <span class="stringliteral">"Using data type from input image: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">string</span> imageType=imgReader.getImageType();</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> theInterleave+=imgReader.getInterleave();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> imgWriter.open(output_opt[0],imgReader.nrOfCol(),imgReader.nrOfRow(),1,theType,imageType,option_opt);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> imgWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (imgReader.getColorTable()!=NULL)<span class="comment">//copy colorTable from input image</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> imgWriter.setColorTable(imgReader.getColorTable());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> imgWriter.setProjection(imgReader.getProjection());</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> imgReader.getGeoTransform(gt);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> imgWriter.setGeoTransform(gt);<span class="comment">//ulx,uly,imgReader.getDeltaX(),imgReader.getDeltaY(),0,0);</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(nodata_opt.size())</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> imgWriter.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> vector<char> writeBuffer(imgWriter.nrOfCol());</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> imgReader.readData(lineBuffer[iband],GDT_Float32,irow,band_opt[iband]);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">bool</span> valid=(operator_opt[0]==<span class="stringliteral">"OR"</span>)?<span class="keyword">false</span>:<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> validValue=data_opt[0];</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(min_opt.size()&&max_opt.size()){</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> assert(max_opt.size()==min_opt.size());</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalid=0;ivalid<min_opt.size();++ivalid){</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">bool</span> validBand=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// for(int iband=0;iband<band_opt.size();++iband){</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> theBand=(band_opt.size()==min_opt.size())? ivalid:0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span>(lineBuffer[theBand][icol]>=min_opt[ivalid]&&lineBuffer[theBand][icol]<=max_opt[ivalid]){</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> validValue=data_opt[ivalid];</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> validBand=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> valid=(operator_opt[0]==<span class="stringliteral">"OR"</span>)?valid||validBand : valid&&validBand;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(min_opt.size()){</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalid=0;ivalid<min_opt.size();++ivalid){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">bool</span> validBand=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// for(int iband=0;iband<band_opt.size();++iband){</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> theBand=(band_opt.size()==min_opt.size())? ivalid:0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>(lineBuffer[theBand][icol]>=min_opt[ivalid]){</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> validValue=data_opt[ivalid];</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> validBand=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> valid=(operator_opt[0]==<span class="stringliteral">"OR"</span>)?valid||validBand : valid&&validBand;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(max_opt.size()){</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalid=0;ivalid<max_opt.size();++ivalid){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">bool</span> validBand=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// for(int iband=0;iband<band_opt.size();++iband){</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> theBand=(band_opt.size()==max_opt.size())? ivalid:0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(lineBuffer[theBand][icol]<=max_opt[ivalid]){</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> validValue=data_opt[ivalid];</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> validBand=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> valid=(operator_opt[0]==<span class="stringliteral">"OR"</span>)?valid||validBand : valid&&validBand;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>(valid)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> writeBuffer[icol]=validValue;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> writeBuffer[icol]=nodata_opt[0];</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> imgWriter.writeData(writeBuffer,GDT_Byte,irow);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> progress=(1.0+irow)/imgWriter.nrOfRow();</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> imgReader.close();</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> imgWriter.close();</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkgetmask_8py_source.html b/doc/html/pkgetmask_8py_source.html
new file mode 100644
index 0000000..1a6b48a
--- /dev/null
+++ b/doc/html/pkgetmask_8py_source.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkgetmask.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkgetmask.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkgetmask.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkgetmask_1_1pkgetmask.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html">pkgetmask</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> BAND = <span class="stringliteral">"BAND"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> MIN = <span class="stringliteral">"MIN"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> MAX = <span class="stringliteral">"MAX"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> OPERATOR_OPTIONS = [<span class="stringliteral">"OR"</span>, <span class="stringliteral">"AND"</span>]</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> OPERATOR = <span class="stringliteral">"OPERATOR"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> DATA = <span class="stringliteral">"DATA"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkgetmask"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ab9a736f64545f8ac36bbf1eae8576cd5">name</a> = <span class="stringliteral">"create mask from raster dataset"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#aa0e0d197447b16bee323b2e9fdaa876b">group</a> = <span class="stringliteral">"[pktools] raster"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a1990e1aab12f8a84394b7c44c9c78efd">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ad45ff2519baa645c8bf75e063fc2939d">BAND</a>, <span class="stringliteral">"Band(s) used for mask (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a86f16ca18fe18083446f0a2fdab1c989">MIN</a>, <span class="stringliteral">"Minimum valid value (one value per band)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a74d4d91d62405ae1cb788e0fc52b64c6">MAX</a>, <span class="stringliteral">"Maximum valid value (one value per band)"</span>,<span class="stringliteral">"none"</span>))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a2a1d0302fefa56238c42d3ea6f747941">OPERATOR</a>,<span class="stringliteral">"getmask rule"</span>,self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a418e9d844d597fb600d16afc0b7e70cd">OPERATOR_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a579e059d072a57554c9a61180a9fd08c">DATA</a>, <span class="stringliteral">"write value(s) for valid pixels (e.g., 0;255)"</span>,<span class="stringliteral">"1"</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ab851d0b2d6acf47df89a9d89373f804b">NODATA</a>, <span class="stringliteral">"write value(s) for invalid pixels"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a5eedd82f4dda4923e8560ff43b657f73">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a091f5ee5165bde746ed9841909d06d5c">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7f1272eeb8cf07f429440cdf387c2d17">TYPE</a>, 0))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7c46da38f871a5211efe90216afff4ef">EXTRA</a>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ae9c628f2f53021c654f6cf1a597b3c54">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> commands = [cliPath]</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a1990e1aab12f8a84394b7c44c9c78efd">INPUT</a>)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> band=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ad45ff2519baa645c8bf75e063fc2939d">BAND</a>)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> bandValues = band.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">for</span> bandValue <span class="keywordflow">in</span> bandValues:</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> commands.append(<span class="stringliteral">'-band'</span>)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> commands.append(bandValue)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> min=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a86f16ca18fe18083446f0a2fdab1c989">MIN</a>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> min != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> minValues = min.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span> minValue <span class="keywordflow">in</span> minValues:</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> commands.append(<span class="stringliteral">'-min'</span>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> commands.append(minValue)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> max=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a74d4d91d62405ae1cb788e0fc52b64c6">MAX</a>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> max != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> maxValues = max.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span> maxValue <span class="keywordflow">in</span> maxValues:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">'-max'</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(maxValue)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> commands.append(<span class="stringliteral">"-p"</span>)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> commands.append(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a418e9d844d597fb600d16afc0b7e70cd">OPERATOR_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a2a1d0302fefa56238c42d3ea6f747941">OPERATOR</a>)])</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> data != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> dataValues = data.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span> dataValue <span class="keywordflow">in</span> dataValues:</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(<span class="stringliteral">'-data'</span>)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> commands.append(dataValue)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ab851d0b2d6acf47df89a9d89373f804b">NODATA</a>)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span> nodata != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> nodataValues = nodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">for</span> nodataValue <span class="keywordflow">in</span> nodataValues:</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7f1272eeb8cf07f429440cdf387c2d17">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a091f5ee5165bde746ed9841909d06d5c">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> commands.append(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7f1272eeb8cf07f429440cdf387c2d17">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a091f5ee5165bde746ed9841909d06d5c">RTYPE</a>)])</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a5eedd82f4dda4923e8560ff43b657f73">OUTPUT</a>)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> data=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a579e059d072a57554c9a61180a9fd08c">DATA</a>)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7c46da38f871a5211efe90216afff4ef">EXTRA</a>))</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> commands.append(extra)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a418e9d844d597fb600d16afc0b7e70cd"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a418e9d844d597fb600d16afc0b7e70cd">qgis.pkgetmask.pkgetmask.OPERATOR_OPTIONS</a></div><div class="ttdeci">list OPERATOR_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00044">pkgetmask.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a091f5ee5165bde746ed9841909d06d5c"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a091f5ee5165bde746ed9841909d06d5c">qgis.pkgetmask.pkgetmask.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00049">pkgetmask.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a7f1272eeb8cf07f429440cdf387c2d17"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7f1272eeb8cf07f429440cdf387c2d17">qgis.pkgetmask.pkgetmask.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00050">pkgetmask.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_ae9c628f2f53021c654f6cf1a597b3c54"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ae9c628f2f53021c654f6cf1a597b3c54">qgis.pkgetmask.pkgetmask.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00053">pkgetmask.py:53</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_ad45ff2519baa645c8bf75e063fc2939d"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ad45ff2519baa645c8bf75e063fc2939d">qgis.pkgetmask.pkgetmask.BAND</a></div><div class="ttdeci">string BAND</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00041">pkgetmask.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_ab9a736f64545f8ac36bbf1eae8576cd5"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ab9a736f64545f8ac36bbf1eae8576cd5">qgis.pkgetmask.pkgetmask.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00057">pkgetmask.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a74d4d91d62405ae1cb788e0fc52b64c6"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a74d4d91d62405ae1cb788e0fc52b64c6">qgis.pkgetmask.pkgetmask.MAX</a></div><div class="ttdeci">string MAX</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00043">pkgetmask.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a5eedd82f4dda4923e8560ff43b657f73"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a5eedd82f4dda4923e8560ff43b657f73">qgis.pkgetmask.pkgetmask.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00048">pkgetmask.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a2a1d0302fefa56238c42d3ea6f747941"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a2a1d0302fefa56238c42d3ea6f747941">qgis.pkgetmask.pkgetmask.OPERATOR</a></div><div class="ttdeci">string OPERATOR</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00045">pkgetmask.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_ab851d0b2d6acf47df89a9d89373f804b"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#ab851d0b2d6acf47df89a9d89373f804b">qgis.pkgetmask.pkgetmask.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00047">pkgetmask.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_aa0e0d197447b16bee323b2e9fdaa876b"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#aa0e0d197447b16bee323b2e9fdaa876b">qgis.pkgetmask.pkgetmask.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00058">pkgetmask.py:58</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a7c46da38f871a5211efe90216afff4ef"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a7c46da38f871a5211efe90216afff4ef">qgis.pkgetmask.pkgetmask.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00051">pkgetmask.py:51</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html">qgis.pkgetmask.pkgetmask</a></div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00038">pkgetmask.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a1990e1aab12f8a84394b7c44c9c78efd"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a1990e1aab12f8a84394b7c44c9c78efd">qgis.pkgetmask.pkgetmask.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00040">pkgetmask.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a579e059d072a57554c9a61180a9fd08c"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a579e059d072a57554c9a61180a9fd08c">qgis.pkgetmask.pkgetmask.DATA</a></div><div class="ttdeci">string DATA</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00046">pkgetmask.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkgetmask_1_1pkgetmask_html_a86f16ca18fe18083446f0a2fdab1c989"><div class="ttname"><a href="classqgis_1_1pkgetmask_1_1pkgetmask.html#a86f16ca18fe18083446f0a2fdab1c989">qgis.pkgetmask.pkgetmask.MIN</a></div><div class="ttdeci">string MIN</div><div class="ttdef"><b>Definition:</b> <a href="pkgetmask_8py_source.html#l00042">pkgetmask.py:42</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkinfo.html b/doc/html/pkinfo.html
new file mode 100644
index 0000000..0211df7
--- /dev/null
+++ b/doc/html/pkinfo.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkinfo</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkinfo </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Report basic information from raster datasets (similar to gdalinfo) </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkinfo -i input [options] </code></p>
+<p><code></code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkinfo_description"></a>
+Description</h1>
+<p>The utility pkinfo retrieves basic information about a raster data set. An important difference with gdalinfo is that pkinfo only reports the information that is requested via the corresponding command line option, whereas gdalinfo provides all basic information at once. The reported information is in a format that can be used as input for other pktools utilities. This mechanism facilitates command substitution in the bash scripting language. Some examples are given in later in this s [...]
+<h1><a class="anchor" id="pkinfo_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file </td></tr>
+<tr>
+<td>bb </td><td>bbox </td><td>bool </td><td>false </td><td>Shows bounding box </td></tr>
+<tr>
+<td>te </td><td>te </td><td>bool </td><td>false </td><td>Shows bounding box in GDAL format: xmin ymin xmax ymax </td></tr>
+<tr>
+<td>c </td><td>center </td><td>bool </td><td>false </td><td>Image center in projected X,Y coordinates </td></tr>
+<tr>
+<td>ct </td><td>colortable </td><td>bool </td><td>false </td><td>Shows colour table </td></tr>
+<tr>
+<td>ns </td><td>nsample </td><td>bool </td><td>false </td><td>Number of samples in image </td></tr>
+<tr>
+<td>nl </td><td>nline </td><td>bool </td><td>false </td><td>Number of lines in image </td></tr>
+<tr>
+<td>nb </td><td>nband </td><td>bool </td><td>false </td><td>Show number of bands in image </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td>0 </td><td>Band specific information </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>bool </td><td>false </td><td>Gets resolution in x (in m) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>bool </td><td>false </td><td>Gets resolution in y (in m) </td></tr>
+<tr>
+<td>mm </td><td>minmax </td><td>bool </td><td>false </td><td>Shows min and max value of the image </td></tr>
+<tr>
+<td>min </td><td>minimum </td><td>bool </td><td>false </td><td>Shows min value of the image </td></tr>
+<tr>
+<td>max </td><td>maximum </td><td>bool </td><td>false </td><td>Shows max value of the image </td></tr>
+<tr>
+<td>stats </td><td>statistics </td><td>bool </td><td>false </td><td>Shows statistics (min,max, mean and stdDev of the image) </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>bool </td><td>false </td><td>Shows projection of the image </td></tr>
+<tr>
+<td>geo </td><td>geo </td><td>bool </td><td>false </td><td>Gets geotransform </td></tr>
+<tr>
+<td>il </td><td>interleave </td><td>bool </td><td>false </td><td>Shows interleave </td></tr>
+<tr>
+<td>f </td><td>filename </td><td>bool </td><td>false </td><td>Shows image filename </td></tr>
+<tr>
+<td>cover </td><td>cover </td><td>bool </td><td>false </td><td>Print filename to stdout if current image covers the provided coordinates via bounding box, (x y) coordinates or extent of vector file </td></tr>
+<tr>
+<td>x </td><td>xpos </td><td>double </td><td></td><td>x pos </td></tr>
+<tr>
+<td>y </td><td>ypos </td><td>double </td><td></td><td>y pos </td></tr>
+<tr>
+<td>r </td><td>read </td><td>bool </td><td>false </td><td>Reads row y (in projected coordinates if geo option is set, otherwise in image coordinates, 0 based) </td></tr>
+<tr>
+<td>ref </td><td>reference </td><td>bool </td><td>false </td><td>Gets reference pixel (lower left corner of center of gravity pixel) </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>bool </td><td>false </td><td>Gets driver description </td></tr>
+<tr>
+<td>e </td><td>extent </td><td>std::string </td><td></td><td>Gets boundary from vector file </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td></td><td>Upper left x value bounding box </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td></td><td>Upper left y value bounding box </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td></td><td>Lower right x value bounding box </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td></td><td>Lower right y value bounding box </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>bool </td><td>false </td><td>Returns data type </td></tr>
+<tr>
+<td>d </td><td>description </td><td>bool </td><td>false </td><td>Returns image description </td></tr>
+<tr>
+<td>meta </td><td>meta </td><td>bool </td><td>false </td><td>Shows meta data </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>Sets no data value(s) for calculations (nodata values in input image) </td></tr>
+</table>
+Usage: pkinfo -i input [options]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkinfo can be found <a class="el" href="md_examples_pkinfo.html#examples_pkinfo">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkinfo_8cc_source.html b/doc/html/pkinfo_8cc_source.html
new file mode 100644
index 0000000..bb7ca54
--- /dev/null
+++ b/doc/html/pkinfo_8cc_source.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkinfo.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkinfo.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkinfo.cc: Report basic information from raster datasets (similar to gdalinfo)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <list></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "algorithms/Egcs.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"Input image file"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> bbox_opt(<span class="stringliteral">"bb"</span>, <span class="stringliteral">"bbox"</span>, <span class="stringliteral">"Shows bounding box "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> bbox_te_opt(<span class="stringliteral">"te"</span>, <span class="stringliteral">"te"</span>, <span class="stringliteral">"Shows bounding box in GDAL format: xmin ymin xmax ymax "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> center_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"center"</span>, <span class="stringliteral">"Image center in projected X,Y coordinates "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"colortable"</span>, <span class="stringliteral">"Shows colour table "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> samples_opt(<span class="stringliteral">"ns"</span>, <span class="stringliteral">"nsample"</span>, <span class="stringliteral">"Number of samples in image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> lines_opt(<span class="stringliteral">"nl"</span>, <span class="stringliteral">"nline"</span>, <span class="stringliteral">"Number of lines in image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> nband_opt(<span class="stringliteral">"nb"</span>, <span class="stringliteral">"nband"</span>, <span class="stringliteral">"Show number of bands in image"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Band specific information"</span>, 0,0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Gets resolution in x (in m)"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Gets resolution in y (in m)"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> minmax_opt(<span class="stringliteral">"mm"</span>, <span class="stringliteral">"minmax"</span>, <span class="stringliteral">"Shows min and max value of the image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> min_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"minimum"</span>, <span class="stringliteral">"Shows min value of the image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> max_opt(<span class="stringliteral">"max"</span>, <span class="stringliteral">"maximum"</span>, <span class="stringliteral">"Shows max value of the image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stat_opt(<span class="stringliteral">"stats"</span>, <span class="stringliteral">"statistics"</span>, <span class="stringliteral">"Shows statistics (min,max, mean and stdDev of the image)"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Shows projection of the image "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> geo_opt(<span class="stringliteral">"geo"</span>, <span class="stringliteral">"geo"</span>, <span class="stringliteral">"Gets geotransform "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> interleave_opt(<span class="stringliteral">"il"</span>, <span class="stringliteral">"interleave"</span>, <span class="stringliteral">"Shows interleave "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> filename_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"filename"</span>, <span class="stringliteral">"Shows image filename "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> cover_opt(<span class="stringliteral">"cover"</span>, <span class="stringliteral">"cover"</span>, <span class="stringliteral">"Print filename to stdout if current image covers the provided coordinates via bounding box, (x y) coordinates or extent of vector file"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> x_opt(<span class="stringliteral">"x"</span>, <span class="stringliteral">"xpos"</span>, <span class="stringliteral">"x pos"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> y_opt(<span class="stringliteral">"y"</span>, <span class="stringliteral">"ypos"</span>, <span class="stringliteral">"y pos"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> read_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"read"</span>, <span class="stringliteral">"Reads row y (in projected coordinates if geo option is set, otherwise in image coordinates, 0 based)"</span>,<span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> refpixel_opt(<span class="stringliteral">"ref"</span>, <span class="stringliteral">"reference"</span>, <span class="stringliteral">"Gets reference pixel (lower left corner of center of gravity pixel)"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> driver_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Gets driver description "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> extent_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"extent"</span>, <span class="stringliteral">"Gets boundary from vector file"</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower right x value bounding box"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower right y value bounding box"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> type_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Returns data type"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Returns image description"</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> metadata_opt(<span class="stringliteral">"meta"</span>, <span class="stringliteral">"meta"</span>, <span class="stringliteral">"Shows meta data "</span>, <span class="keyword">false</span>,0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Sets no data value(s) for calculations (nodata values in input image)"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> bbox_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> bbox_te_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> center_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> samples_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> lines_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> nband_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> minmax_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> stat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> geo_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> interleave_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> filename_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> cover_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> x_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> y_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> read_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> refpixel_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> driver_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> extent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> metadata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">catch</span>(std::string predefinedString){</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> exit(0);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> cout << endl;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> cout << <span class="stringliteral">"Usage: pkinfo -i input [options]"</span> << endl;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> cout << endl;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//for union</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">double</span> maxLRX=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">double</span> maxULY=0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">double</span> minULX=0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">double</span> minLRY=0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">//for intersect</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">double</span> minLRX=0;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">double</span> minULY=0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">double</span> maxULX=0;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">double</span> maxLRY=0;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordtype">double</span> theULX, theULY, theLRX, theLRY;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">//get bounding box from extentReader if defined</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> extentReader;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> extentReader.open(extent_opt[0]);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">if</span>(!(extentReader.getExtent(theULX,theULY, theLRX, theLRY))){</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> std::cerr << <span class="stringliteral">"Error: could not get extent from "</span> << extent_opt[0] << std::endl;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> exit(1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> ulx_opt.push_back(theULX);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> uly_opt.push_back(theULY);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> lrx_opt.push_back(theLRX);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> lry_opt.push_back(theLRY);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(input_opt.empty()){<span class="comment">//report bounding box from extent file instead</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(bbox_te_opt[0])</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> std::cout << std::setprecision(12) << <span class="stringliteral">"-te "</span> << theULX << <span class="stringliteral">" "</span> << theLRY << <span class="stringliteral">" "</span> << theLRX << <span class="stringliteral">" "</span> << theULY;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> std::cout << std::setprecision(12) << <span class="stringliteral">"--ulx="</span> << theULX << <span class="stringliteral">" --uly="</span> << theULY << <span class="stringliteral">" --lrx="</span> << theLRX << <span class="stringliteral">" --lry="</span> << theLRY << <span class="stringliteral">" " [...]
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<input_opt.size();++ifile){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> imgReader.open(input_opt[ifile]);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(!inodata)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> imgReader.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> imgReader.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(filename_opt[0])</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> std::cout << <span class="stringliteral">" --input "</span> << input_opt[ifile] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(center_opt[0]){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">double</span> theX, theY;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> imgReader.getCenterPos(theX,theY);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> std::cout << std::setprecision(12) << <span class="stringliteral">" -x "</span> << theX << <span class="stringliteral">" -y "</span> << theY << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>(refpixel_opt[0]){</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> assert(band_opt[0]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="classEgcs.html">Egcs</a> egcs;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">double</span> refX,refY;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//get center of reference (center of gravity) pixel in image</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> imgReader.getRefPix(refX,refY,band_opt[0]);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> std::cout << std::setprecision(12) << <span class="stringliteral">"-x "</span> << refX << <span class="stringliteral">" -y "</span> << refY << std::endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> egcs.setLevel(egcs.res2level(imgReader.getDeltaX()));</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// unsigned short theLevel=egcs.getLevel(imgReader.getDeltaX());</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// egcs.setLevel(theLevel);</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">//cout << "cell code at level " << egcs.getLevel() << " (resolution is " << egcs.getResolution() << "): " << egcs.geo2cell(refX,refY) << endl;</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span>(bbox_opt[0]||bbox_te_opt[0]){</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> imgReader.getBoundingBox(theULX,theULY,theLRX,theLRY);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(bbox_te_opt[0])</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> std::cout << std::setprecision(12) << <span class="stringliteral">"-te "</span> << theULX << <span class="stringliteral">" "</span> << theLRY << <span class="stringliteral">" "</span> << theLRX << <span class="stringliteral">" "</span> << theULY;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> std::cout << std::setprecision(12) << <span class="stringliteral">"--ulx="</span> << theULX << <span class="stringliteral">" --uly="</span> << theULY << <span class="stringliteral">" --lrx="</span> << theLRX << <span class="stringliteral">" --lry="</span> << theLRY << <span class="stringliteral">" &q [...]
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span>(!ifile){</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> maxLRX=theLRX;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> maxULY=theULY;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> minULX=theULX;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> minLRY=theLRY;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> minLRX=theLRX;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> minULY=theULY;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> maxULX=theULX;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> maxLRY=theLRY;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> maxLRX=(theLRX>maxLRX)?theLRX:maxLRX;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> maxULY=(theULY>maxULY)?theULY:maxULY;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> minULX=(theULX<minULX)?theULX:minULX;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> minLRY=(theLRY<minLRY)?theLRY:minLRY;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> minLRX=(theLRX<minLRX)?theLRX:minLRX;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> minULY=(theULY<minULY)?theULY:minULY;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> maxULX=(theULX>maxULX)?theULX:maxULX;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> maxLRY=(theLRY>maxLRY)?theLRY:maxLRY;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>(dx_opt[0])</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> std::cout << <span class="stringliteral">"--dx "</span> << imgReader.getDeltaX() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(dy_opt[0])</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> std::cout << <span class="stringliteral">"--dy "</span> << imgReader.getDeltaY() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>(cover_opt[0]){</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(ulx_opt.size()&&uly_opt.size()&&lrx_opt.size()&&lry_opt.size()){</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">if</span>(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> std::cout << <span class="stringliteral">" -i "</span> << input_opt[ifile] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x_opt.size()&&y_opt.size()){</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span>(imgReader.covers(x_opt[0],y_opt[0]))</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> std::cout << <span class="stringliteral">" -i "</span> << input_opt[ifile] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> std::cerr << <span class="stringliteral">"Error: failing extent (-e), bounding box or x and y position to define coverage"</span> << std::endl;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> exit(1);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size()){</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> imgReader.getBoundingBox(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(ulx_opt.size())</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> std::cout << <span class="stringliteral">" --ulx="</span> << std::fixed << ulx << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span>(uly_opt.size())</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> std::cout << <span class="stringliteral">" --uly="</span> << std::fixed << uly << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(lrx_opt.size())</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> std::cout << <span class="stringliteral">" --lrx="</span> << std::fixed << lrx << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span>(lry_opt.size())</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> std::cout << <span class="stringliteral">" --lry="</span> << std::fixed << lry << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span>(colorTable_opt[0]){</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> GDALColorTable* colorTable=imgReader.getColorTable();</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span>(colorTable!=NULL){</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> index=0;index<colorTable->GetColorEntryCount();++index){</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> GDALColorEntry sEntry=*(colorTable->GetColorEntry(index));</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> std::cout << index << <span class="stringliteral">" "</span> << sEntry.c1 << <span class="stringliteral">" "</span> << sEntry.c2 << <span class="stringliteral">" "</span> << sEntry.c3 << <span class="stringliteral">" "</span> << sEntry.c4 << std::endl;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> std::cout << <span class="stringliteral">"-ct none "</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span>(samples_opt[0])</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> std::cout << <span class="stringliteral">"--nsample "</span> << imgReader.nrOfCol() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(lines_opt[0])</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::cout << <span class="stringliteral">"--nline "</span> << imgReader.nrOfRow() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span>(nband_opt[0])</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> std::cout << <span class="stringliteral">"--nband "</span> << imgReader.nrOfBand() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">double</span> meanValue=0;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">double</span> stdDev=0;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">int</span> nband=band_opt.size();</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span>(band_opt[0]<0)</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> nband=imgReader.nrOfBand();</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> theBand=(band_opt[0]<0)? iband : band_opt[iband];</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(stat_opt[0]){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> assert(theBand<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> GDALProgressFunc pfnProgress;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> rasterBand=imgReader.getRasterBand(theBand);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> std::cout << <span class="stringliteral">"-min "</span> << minValue << <span class="stringliteral">" -max "</span> << maxValue << <span class="stringliteral">" --mean "</span> << meanValue << <span class="stringliteral">" --stdDev "</span> << stdDev << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span>(minmax_opt[0]||min_opt[0]||max_opt[0]){</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> assert(theBand<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">if</span>((ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size())&&(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> imgReader.geo2image(ulx_opt[0],uly_opt[0],uli,ulj);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> imgReader.geo2image(lrx_opt[0],lry_opt[0],lri,lrj);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> imgReader.getMinMax(static_cast<int>(uli),static_cast<int>(lri),static_cast<int>(ulj),static_cast<int>(lrj),theBand,minValue,maxValue);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> imgReader.getMinMax(minValue,maxValue,theBand,<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">if</span>(minmax_opt[0])</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> std::cout << <span class="stringliteral">"-min "</span> << minValue << <span class="stringliteral">" -max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(min_opt[0])</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> std::cout << <span class="stringliteral">"-min "</span> << minValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(max_opt[0])</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> std::cout << <span class="stringliteral">"-max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(projection_opt[0]){</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>(imgReader.isGeoRef())</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> std::cout << <span class="stringliteral">" -a_srs "</span> << imgReader.getProjection() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> std::cout << <span class="stringliteral">" -a_srs none"</span> << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> }</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span>(geo_opt[0]&&!read_opt[0]){</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> std::cout << <span class="stringliteral">" -geo "</span> << std::setprecision(12) << imgReader.getGeoTransform();</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(interleave_opt[0]){</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> std::cout << <span class="stringliteral">" --interleave "</span> << imgReader.getInterleave() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span>(type_opt[0]){</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> std::cout << <span class="stringliteral">"--otype "</span> << GDALGetDataTypeName(imgReader.getDataType(band_opt[0])) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// std::cout << " -ot " << GDALGetDataTypeName(imgReader.getDataType(band_opt[0])) << " (" << static_cast<short>(imgReader.getDataType(band_opt[0])) << ")" << std::endl;</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span>(description_opt[0]){</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment">// std::cout << "image description: " << imgReader.getImageDescription() << std::endl;</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">// catch(...){</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">// std::cout << "catched" << std::endl;</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> std::list<std::string> metaData;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> imgReader.getMetadata(metaData);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> std::list<std::string>::const_iterator lit=metaData.begin();</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> std::cout << <span class="stringliteral">" --description "</span>;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">while</span>(lit!=metaData.end())</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> std::cout << *(lit++) << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">if</span>(metadata_opt[0]){</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> std::cout << <span class="stringliteral">"Metadata: "</span> << std::endl;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> std::list<std::string> lmeta;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> imgReader.getMetadata(lmeta);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> std::list<std::string>::const_iterator lit=lmeta.begin();</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">while</span>(lit!=lmeta.end()){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> std::cout << *lit << std::endl;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> ++lit;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// char** cmetadata=imgReader.getMetadata();</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// while(*cmetadata!=NULL){</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">// std::cout << *(cmetadata) << std::endl;</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// ++cmetadata;</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>(read_opt[0]){</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// int nband=band_opt.size();</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// if(band_opt[0]<0)</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// nband=imgReader.nrOfBand();</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> std::cout.precision(12);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> theBand=(band_opt[0]<0)? iband : band_opt[iband];</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> std::vector<float> rowBuffer;<span class="comment">//buffer will be resized in readdata</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iy=0;iy<y_opt.size();++iy){</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">double</span> theRow=y_opt[iy];</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">int</span> ncol=(x_opt.size())? x_opt.size() : imgReader.nrOfCol();</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ix=0;ix<ncol;++ix){</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">double</span> theCol=ix;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(x_opt.size()){</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">if</span>(geo_opt[0])</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> imgReader.geo2image(x_opt[ix],y_opt[iy],theCol,theRow);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> theCol=x_opt[ix];</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> assert(theRow>=0);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> assert(theRow<imgReader.nrOfRow());</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> imgReader.readData(rowBuffer,GDT_Float32, static_cast<int>(theRow), theBand);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> assert(theCol<rowBuffer.size());</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> std::cout << rowBuffer[static_cast<int>(theCol)] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> }</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">if</span>(driver_opt[0])</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> std::cout << <span class="stringliteral">" --oformat "</span> << imgReader.getDriverDescription() << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> imgReader.close();</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span>((bbox_opt[0]||bbox_te_opt[0])&&input_opt.size()>1){</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">if</span>(bbox_te_opt[0])</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> std::cout << std::setprecision(12) << <span class="stringliteral">"-te "</span> << minULX << <span class="stringliteral">" "</span> << minLRY << <span class="stringliteral">" "</span> << maxLRX << <span class="stringliteral">" "</span> << maxULY;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> std::cout << <span class="stringliteral">"union bounding box: "</span> << std::setprecision(12) << <span class="stringliteral">"--ulx="</span> << minULX << <span class="stringliteral">" --uly="</span> << maxULY << <span class="stringliteral">" --lrx="</span> << maxLRX << <span class="stringliteral">" --lry=& [...]
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span>(maxULX<minLRX&&minULY>maxLRY){</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>(bbox_te_opt[0])</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> std::cout << <span class="stringliteral">"intersect bounding box: "</span> << std::setprecision(12) << <span class="stringliteral">"-te "</span> << maxULX << <span class="stringliteral">" "</span> << maxLRY << <span class="stringliteral">" "</span> << minLRX << <span class="stringliteral">" --lry="</s [...]
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> std::cout << <span class="stringliteral">"intersect bounding box: "</span> << std::setprecision(12) << <span class="stringliteral">"--ulx="</span> << maxULX << <span class="stringliteral">" --uly="</span> << minULY << <span class="stringliteral">" --lrx="</span> << minLRX << <span class="stringliteral">" - [...]
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> std::cout << <span class="stringliteral">"no intersect"</span> << std::endl;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> }</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">if</span>(!read_opt[0])</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classEgcs_html"><div class="ttname"><a href="classEgcs.html">Egcs</a></div><div class="ttdef"><b>Definition:</b> <a href="Egcs_8h_source.html#l00026">Egcs.h:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkkalman.html b/doc/html/pkkalman.html
new file mode 100644
index 0000000..5662863
--- /dev/null
+++ b/doc/html/pkkalman.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkkalman</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkkalman </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>produce kalman filtered raster time series </p>
+<h2>SYNOPSIS</h2>
+<p><code></code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkkalman_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options</li>
+</ul>
+<table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>dir </td><td>direction </td><td>std::string </td><td>forward </td><td>direction to run model (forward|backward|smooth) </td></tr>
+<tr>
+<td>mod </td><td>model </td><td>std::string </td><td></td><td>model input datasets, e.g., MODIS (use: -mod model1 -mod model2 etc. </td></tr>
+<tr>
+<td>obs </td><td>observation </td><td>std::string </td><td></td><td>observation input datasets, e.g., landsat (use: -obs obs1 -obs obs2 etc. </td></tr>
+<tr>
+<td>tmod </td><td>tmodel </td><td>int </td><td></td><td>time sequence of model input. Sequence must have exact same length as model input. Leave empty to have default sequence 0,1,2,etc. </td></tr>
+<tr>
+<td>tobs </td><td>tobservation </td><td>int </td><td></td><td>time sequence of observation input. Sequence must have exact same length as observation input) </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td></td><td>Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid </td></tr>
+<tr>
+<td>ofw </td><td>outputfw </td><td>std::string </td><td></td><td>Output raster dataset for forward model </td></tr>
+<tr>
+<td>obw </td><td>outputbw </td><td>std::string </td><td></td><td>Output raster dataset for backward model </td></tr>
+<tr>
+<td>ofb </td><td>outputfb </td><td>std::string </td><td></td><td>Output raster dataset for smooth model </td></tr>
+<tr>
+<td>modnodata </td><td>modnodata </td><td>double </td><td>0 </td><td>invalid value for model input </td></tr>
+<tr>
+<td>obsnodata </td><td>obsnodata </td><td>double </td><td>0 </td><td>invalid value for observation input </td></tr>
+<tr>
+<td>modoffset </td><td>modoffset </td><td>double </td><td></td><td>offset used to read model input dataset (value=offset+scale*readValue </td></tr>
+<tr>
+<td>modscale </td><td>modscale </td><td>double </td><td></td><td>scale used to read model input dataset (value=offset+scale*readValue </td></tr>
+<tr>
+<td>obsoffset </td><td>obsoffset </td><td>double </td><td></td><td>offset used to read observation input dataset (value=offset+scale*readValue </td></tr>
+<tr>
+<td>obsscale </td><td>obsscale </td><td>double </td><td></td><td>scale used to read observation input dataset (value=offset+scale*readValue </td></tr>
+<tr>
+<td>eps </td><td>eps </td><td>double </td><td>1e-05 </td><td>epsilon for non zero division </td></tr>
+<tr>
+<td>um </td><td>uncertmodel </td><td>double </td><td>2 </td><td>Multiply this value with std dev of first model image to obtain uncertainty of model </td></tr>
+<tr>
+<td>uo </td><td>uncertobs </td><td>double </td><td>0 </td><td>Uncertainty of valid observations </td></tr>
+<tr>
+<td>w </td><td>weight </td><td>double </td><td></td><td>Set observation uncertainty as weighted difference between observation and model (use -w 0 to use a constant observation uncertainty, use -w value >> 1 to penalize low observation values with respect to model, use -w value << 0 to penalize a high observation values with respect to model </td></tr>
+<tr>
+<td>dobs </td><td>deltaobs </td><td>double </td><td></td><td>Lower and upper thresholds for relative pixel differences (in percentage): (observation-model)/model. For instance to force the observation within a +/- 10 % interval, use: -dobs -10 -dobs 10 (equivalent to -dobs 10). Leave empty to always update on observation </td></tr>
+<tr>
+<td>unodata </td><td>uncertnodata </td><td>double </td><td>10000 </td><td>Uncertainty in case of no-data values in observation </td></tr>
+<tr>
+<td>rt </td><td>regtime </td><td>double </td><td>1 </td><td>Set optional regression for sensor difference (model - observation). </td></tr>
+<tr>
+<td>rs </td><td>regsensor </td><td>double </td><td>1 </td><td>Set optional regression for sensor difference (model - observation). </td></tr>
+<tr>
+<td>down </td><td>down </td><td>int </td><td></td><td>Downsampling factor for reading model data to calculate regression </td></tr>
+<tr>
+<td>th </td><td>threshold </td><td>float </td><td>0 </td><td>threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). </td></tr>
+<tr>
+<td>win </td><td>window </td><td>unsigned short </td><td>0 </td><td>window size for calculating regression (use 0 for global) </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>v </td><td>verbose </td><td>short </td><td>0 </td><td>verbose mode when positive </td></tr>
+</table>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkkalman_8cc_source.html b/doc/html/pkkalman_8cc_source.html
new file mode 100644
index 0000000..878419b
--- /dev/null
+++ b/doc/html/pkkalman_8cc_source.html
@@ -0,0 +1,1662 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkkalman.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkkalman.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkkalman.cc: produce kalman filtered raster time series</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Vector2d.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "algorithms/ImgRegression.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">/*------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> Main procedure</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> ----------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> direction_opt(<span class="stringliteral">"dir"</span>,<span class="stringliteral">"direction"</span>,<span class="stringliteral">"direction to run model (forward|backward|smooth)"</span>,<span class="stringliteral">"forward"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> model_opt(<span class="stringliteral">"mod"</span>,<span class="stringliteral">"model"</span>,<span class="stringliteral">"model input datasets, e.g., MODIS (use: -mod model1 -mod model2 etc.)"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> observation_opt(<span class="stringliteral">"obs"</span>,<span class="stringliteral">"observation"</span>,<span class="stringliteral">"observation input datasets, e.g., landsat (use: -obs obs1 -obs obs2 etc.)"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> tmodel_opt(<span class="stringliteral">"tmod"</span>,<span class="stringliteral">"tmodel"</span>,<span class="stringliteral">"time sequence of model input. Sequence must have exact same length as model input. Leave empty to have default sequence 0,1,2,etc."</span>); </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> tobservation_opt(<span class="stringliteral">"tobs"</span>,<span class="stringliteral">"tobservation"</span>,<span class="stringliteral">"time sequence of observation input. Sequence must have exact same length as observation input)"</span>); </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> outputfw_opt(<span class="stringliteral">"ofw"</span>, <span class="stringliteral">"outputfw"</span>, <span class="stringliteral">"Output raster dataset for forward model"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> outputbw_opt(<span class="stringliteral">"obw"</span>, <span class="stringliteral">"outputbw"</span>, <span class="stringliteral">"Output raster dataset for backward model"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> outputfb_opt(<span class="stringliteral">"ofb"</span>, <span class="stringliteral">"outputfb"</span>, <span class="stringliteral">"Output raster dataset for smooth model"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> modnodata_opt(<span class="stringliteral">"modnodata"</span>, <span class="stringliteral">"modnodata"</span>, <span class="stringliteral">"invalid value for model input"</span>, 0);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> obsnodata_opt(<span class="stringliteral">"obsnodata"</span>, <span class="stringliteral">"obsnodata"</span>, <span class="stringliteral">"invalid value for observation input"</span>, 0);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> modoffset_opt(<span class="stringliteral">"modoffset"</span>, <span class="stringliteral">"modoffset"</span>, <span class="stringliteral">"offset used to read model input dataset (value=offset+scale*readValue)"</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> obsoffset_opt(<span class="stringliteral">"obsoffset"</span>, <span class="stringliteral">"obsoffset"</span>, <span class="stringliteral">"offset used to read observation input dataset (value=offset+scale*readValue)"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> modscale_opt(<span class="stringliteral">"modscale"</span>, <span class="stringliteral">"modscale"</span>, <span class="stringliteral">"scale used to read model input dataset (value=offset+scale*readValue)"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> obsscale_opt(<span class="stringliteral">"obsscale"</span>, <span class="stringliteral">"obsscale"</span>, <span class="stringliteral">"scale used to read observation input dataset (value=offset+scale*readValue)"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> eps_opt(<span class="stringliteral">"eps"</span>, <span class="stringliteral">"eps"</span>, <span class="stringliteral">"epsilon for non zero division"</span>, 0.00001);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uncertModel_opt(<span class="stringliteral">"um"</span>, <span class="stringliteral">"uncertmodel"</span>, <span class="stringliteral">"Multiply this value with std dev of first model image to obtain uncertainty of model"</span>,2);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uncertObs_opt(<span class="stringliteral">"uo"</span>, <span class="stringliteral">"uncertobs"</span>, <span class="stringliteral">"Uncertainty of valid observations"</span>,0);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> weight_opt(<span class="stringliteral">"w"</span>, <span class="stringliteral">"weight"</span>, <span class="stringliteral">"Penalize outliers in measurement via weights. Use first weight to penalize small measurements wrt model and second weight to penalize large measurements wrt model"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> deltaObs_opt(<span class="stringliteral">"dobs"</span>, <span class="stringliteral">"deltaobs"</span>, <span class="stringliteral">"Lower and upper thresholds for relative pixel differences (in percentage): (observation-model)/model. For instance to force the observation within a +/- 10 % interval, use: -dobs -10 -do [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uncertNodata_opt(<span class="stringliteral">"unodata"</span>, <span class="stringliteral">"uncertnodata"</span>, <span class="stringliteral">"Uncertainty in case of no-data values in observation"</span>, 10000);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> regTime_opt(<span class="stringliteral">"rt"</span>, <span class="stringliteral">"regtime"</span>, <span class="stringliteral">"Weight for regression in time series"</span>, 1.0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> regSensor_opt(<span class="stringliteral">"rs"</span>, <span class="stringliteral">"regsensor"</span>, <span class="stringliteral">"Weight for regression model - measurement (model - observation)."</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> down_opt(<span class="stringliteral">"down"</span>, <span class="stringliteral">"down"</span>, <span class="stringliteral">"Downsampling factor for reading model data to calculate regression"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> threshold_opt(<span class="stringliteral">"th"</span>, <span class="stringliteral">"threshold"</span>, <span class="stringliteral">"threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0)."</span>, 0);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minreg_opt(<span class="stringliteral">"minreg"</span>, <span class="stringliteral">"minreg"</span>, <span class="stringliteral">"Minimum number of pixels to take into account for regression"</span>, 5, 2);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// Optionpk<bool> regObs_opt("regobs", "regobs", "Perform regression between modeled and observed value",false);</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// Optionpk<double> checkDiff_opt("diff", "diff", "Flag observation as invalid if difference with model is above uncertainty",false);</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> window_opt(<span class="stringliteral">"win"</span>, <span class="stringliteral">"window"</span>, <span class="stringliteral">"window size for calculating regression (use 0 for global)"</span>, 0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// Optionpk<string> mask_opt("m", "mask", "Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata.");</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Optionpk<double> msknodata_opt("msknodata", "msknodata", "Mask value(s) not to consider for filtering. First value will be set in output image.", 0);</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>,<span class="stringliteral">"GTiff"</span>,2);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode when positive"</span>, 0);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> doProcess=direction_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> model_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> observation_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> tmodel_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> tobservation_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> outputfw_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> outputbw_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> outputfb_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> modnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> obsnodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> modoffset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> modscale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> obsoffset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> obsscale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> eps_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> uncertModel_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> uncertObs_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> weight_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> deltaObs_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> uncertNodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> regTime_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> regSensor_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> down_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> threshold_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> minreg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// regObs_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// checkDiff_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> window_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// mask_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// msknodata_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> exit(0);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> std::cerr << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(deltaObs_opt.size()==1){</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span>(deltaObs_opt[0]<=0)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> deltaObs_opt.push_back(-deltaObs_opt[0]);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> deltaObs_opt.insert(deltaObs_opt.begin(),-deltaObs_opt[0]);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(weight_opt.size()==1){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> weight_opt.push_back(weight_opt[0]);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(down_opt.empty()){</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> std::cerr << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> ostringstream errorStream;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(model_opt.size()<2){</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> errorStream << <span class="stringliteral">"Error: no model dataset selected, use option -mod"</span> << endl;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(observation_opt.size()<1){</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> errorStream << <span class="stringliteral">"Error: no observation dataset selected, use option -obs"</span> << endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(direction_opt[0]==<span class="stringliteral">"smooth"</span>){</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span>(outputfw_opt.empty()){</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> errorStream << <span class="stringliteral">"Error: output forward datasets is not provided, use option -ofw"</span> << endl;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(outputbw_opt.empty()){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> errorStream << <span class="stringliteral">"Error: output backward datasets is not provided, use option -obw"</span> << endl;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(outputfb_opt.empty()){</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> errorStream << <span class="stringliteral">"Error: output smooth datasets is not provided, use option -ofb"</span> << endl;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span>(direction_opt[0]==<span class="stringliteral">"forward"</span>&&outputfw_opt.empty()){</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> errorStream << <span class="stringliteral">"Error: output forward datasets is not provided, use option -ofw"</span> << endl;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(direction_opt[0]==<span class="stringliteral">"backward"</span>&&outputbw_opt.empty()){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> errorStream << <span class="stringliteral">"Error: output backward datasets is not provided, use option -obw"</span> << endl;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(model_opt.size()<observation_opt.size()){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> errorStream << <span class="stringliteral">"Error: sequence of models should be larger than observations"</span> << endl;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(tmodel_opt.size()!=model_opt.size()){</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(tmodel_opt.empty())</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> cout << <span class="stringliteral">"Warning: time sequence is not provided, self generating time sequence from 0 to "</span> << model_opt.size() << endl;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> cout << <span class="stringliteral">"Warning: time sequence provided ("</span> << tmodel_opt.size() << <span class="stringliteral">") does not match number of model raster datasets ("</span> << model_opt.size() << <span class="stringliteral">")"</span> << endl;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> tmodel_opt.clear();</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> tindex=0;tindex<model_opt.size();++tindex)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> tmodel_opt.push_back(tindex);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(tobservation_opt.size()!=observation_opt.size()){</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> errorStream << <span class="stringliteral">"Error: time sequence for observation must match size of observation dataset"</span> << endl;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">throw</span>(errorStream.str());</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> std::cout << errorString << std::endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> exit(1);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> stat.setNoDataValues(modnodata_opt);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <a class="code" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a> imgreg;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// vector<ImgReaderGdal> imgReaderModel(model_opt.size());</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// vector<ImgReaderGdal> imgReaderObs(observation_opt.size());</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderModel1;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderModel2;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderObs;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> imgWriterEst;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> imgReaderObs.open(observation_opt[0]);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">int</span> ncol=imgReaderObs.nrOfCol();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">int</span> nrow=imgReaderObs.nrOfRow();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(projection_opt.empty())</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> projection_opt.push_back(imgReaderObs.getProjection());</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">double</span> geotransform[6];</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">string</span> imageType=imgReaderObs.getImageType();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> theInterleave+=imgReaderObs.getInterleave();</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>(down_opt.empty()){</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> imgReaderModel1.open(model_opt[0]);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">double</span> resModel=imgReaderModel1.getDeltaX();</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">double</span> resObs=imgReaderObs.getDeltaX();</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> down=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(ceil(resModel/resObs));</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(!(down%2))</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> down+=1;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> down_opt.push_back(down);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> imgReaderModel1.close();</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> imgReaderObs.close();</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(regSensor_opt.empty())</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> regSensor_opt.push_back(1.0/down_opt[0]);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">//hiero</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// ImgReaderGdal maskReader;</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// double colMask=0;</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// double rowMask=0;</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// if(mask_opt.size()){</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// if(verbose_opt[0]>=1)</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// std::cout << "opening mask image file " << mask_opt[0] << std::endl;</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">// maskReader.open(mask_opt[0]);</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// maskReader.setNoData(msknodata_opt);</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// catch(string error){</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// cerr << error << std::endl;</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// exit(2);</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// catch(...){</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// cerr << "error catched" << std::endl;</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">int</span> obsindex=0;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> imgreg.setThreshold(threshold_opt[0]);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordtype">double</span> c0modGlobal=0;<span class="comment">//time regression coefficient c0 (offset) calculated on entire image </span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">double</span> c1modGlobal=1;<span class="comment">//time regression coefficient c1 (scale) calculated on entire image </span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">double</span> c0mod=0;<span class="comment">//time regression coefficient c0 (offset) calculated on local window</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">double</span> c1mod=1;<span class="comment">//time regression coefficient c1 (scale) calculated on local window</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordtype">double</span> c0obs=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">double</span> c1obs=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">double</span> errObs=uncertNodata_opt[0];<span class="comment">//start with high initial value in case we do not have first observation at time 0</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> vector<int> relobsindex;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">// cout << tmodel_opt << endl;</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">// cout << tobservation_opt << endl;</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> tindex=0;tindex<tobservation_opt.size();++tindex){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> vector<int>::iterator modit;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> modit=upper_bound(tmodel_opt.begin(),tmodel_opt.end(),tobservation_opt[tindex]);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">int</span> relpos=modit-tmodel_opt.begin()-1;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> assert(relpos>=0);<span class="comment">//todo: for now, we assume model is available at time before first measurement</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> relobsindex.push_back(relpos);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> cout << <span class="stringliteral">"observation "</span> << tindex << <span class="stringliteral">": "</span> << <span class="stringliteral">"relative position in model time series is "</span> << relpos << <span class="stringliteral">", date of observation is (tobservation_opt[tindex]): "</span> << tobservation_opt[tindex] [...]
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// cout << "tobservation_opt[tindex] " << tobservation_opt[tindex] << " " << relobsindex.back() << endl;</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordtype">int</span> ndigit=log(1.0*tmodel_opt.back())/log(10.0)+1;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">double</span> geox=0;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">double</span> geoy=0;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span>(find(direction_opt.begin(),direction_opt.end(),<span class="stringliteral">"forward"</span>)!=direction_opt.end()){</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> cout << <span class="stringliteral">"Running forward model"</span> << endl;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> obsindex=0;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">//initialization</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">string</span> output;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(outputfw_opt.size()==model_opt.size()){</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> output=outputfw_opt[0];</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> ostringstream outputstream;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> outputstream << outputfw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[0];</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">// outputstream << outputfw_opt[0] << "_" << tmodel_opt[0] << ".tif";</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> output=outputstream.str();</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> cout << <span class="stringliteral">"Opening image "</span> << output << <span class="stringliteral">" for writing "</span> << endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> imgWriterEst.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> imgWriterEst.setGeoTransform(geotransform);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> imgWriterEst.GDALSetNoDataValue(obsnodata_opt[0]);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> cout << <span class="stringliteral">"processing time "</span> << tmodel_opt[0] << endl;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size())</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> cout << <span class="stringliteral">"next observation "</span> << tmodel_opt[relobsindex[obsindex]] << endl;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> cout << <span class="stringliteral">"There is no next observation"</span> << endl;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> imgReaderModel1.open(model_opt[0]);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> imgReaderModel1.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> imgReaderModel1.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> imgReaderModel1.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> cerr << <span class="stringliteral">"Error opening file "</span> << model_opt[0] << endl;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">//calculate standard deviation of image to serve as model uncertainty</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> rasterBand=imgReaderModel1.getRasterBand(0);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordtype">double</span> minValue, maxValue, meanValue, stdDev;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">double</span> modRow=0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">double</span> modCol=0;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>(relobsindex[0]>0){<span class="comment">//initialize output_opt[0] as model[0]</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">//write first model as output</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> cout << <span class="stringliteral">"write first model as output"</span> << endl;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> imgWriterEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">if</span>(modRow<0||modRow>=imgReaderModel1.nrOfRow()){</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> cerr << <span class="stringliteral">"Error: geo coordinates ("</span> << geox << <span class="stringliteral">","</span> << geoy << <span class="stringliteral">") not covered in model image "</span> << imgReaderModel1.getFileName() << endl;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> imgReaderModel1.readData(estReadBuffer,GDT_Float64,modRow);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="comment">//simple nearest neighbor</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">//stat.nearUp(estReadBuffer,estWriteBuffer);</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol){</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> imgWriterEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">double</span> modValue=estReadBuffer[modCol];</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span>(imgReaderModel1.isNoData(modValue)){</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment">//todo: should take into account regression model-obs...</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> }</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> cerr << <span class="stringliteral">"Error writing file "</span> << imgWriterEst.getFileName() << endl;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">else</span>{<span class="comment">//we have a measurement</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> cout << <span class="stringliteral">"we have a measurement at initial time"</span> << endl;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> imgReaderObs.open(observation_opt[0]);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> imgReaderObs.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> imgReaderObs.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> imgReaderObs.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>(regSensor_opt[0]>0)</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> c0obs=0;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> c1obs=1;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> errObs=0;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> cout << <span class="stringliteral">"c0obs, c1obs: "</span> << c0obs << <span class="stringliteral">", "</span> << c1obs << endl;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> imgWriterEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> imgReaderModel1.readData(estReadBuffer,GDT_Float64,modRow);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> vector<double> obsLineBuffer;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> vector<double> uncertObsLineBuffer;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// imgReaderObs.readData(estWriteBuffer,GDT_Float64,irow,0);</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> imgReaderObs.readData(obsLineBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(imgReaderObs.nrOfBand()>1)</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> imgReaderObs.readData(uncertObsLineBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> imgWriterEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">double</span> modValue=estReadBuffer[modCol];</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(imgReaderModel1.isNoData(modValue)){<span class="comment">//model is nodata: retain observation </span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> estWriteBuffer[icol]=obsLineBuffer[icol];</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span>(imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> uncertWriteBuffer[icol]=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> uncertWriteBuffer[icol]=uncertObs_opt[0];</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">else</span>{<span class="comment">//model is valid: calculate estimate from model</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordtype">double</span> errMod=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment">// double certNorm=(errMod*errMod+errObs*errObs);</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// double certMod=errObs*errObs/certNorm;</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment">// double certObs=errMod*errMod/certNorm;</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment">// double regTime=0;</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment">// double regSensor=(c0obs+c1obs*modValue)*certMod;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment">// estWriteBuffer[icol]=regTime+regSensor;</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">double</span> totalUncertainty=errMod;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="comment">// if(errMod<eps_opt[0])</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// totalUncertainty=errObs;</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="comment">// else if(errObs<eps_opt[0])</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">// totalUncertainty=errMod;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment">// totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment">// totalUncertainty=sqrt(1.0/totalUncertainty);</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> uncertWriteBuffer[icol]=totalUncertainty;<span class="comment">//in case observation is not valid</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// uncertWriteBuffer[icol]+=uncertReadBuffer[icol];</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="comment">//measurement update</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">if</span>(!imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordtype">double</span> kalmanGain=1;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordtype">double</span> uncertObs=uncertObs_opt[0];</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> uncertObs=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()||deltaObs_opt.size()){</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> vector<double> obsWindowBuffer;<span class="comment">//buffer for observation to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">int</span> minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">int</span> maxCol=(icol+down_opt[0]/2<imgReaderObs.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderObs.nrOfCol()-1;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordtype">int</span> minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderObs.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderObs.nrOfRow()-1;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> imgReaderObs.readDataBlock(obsWindowBuffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> statobs;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> statobs.setNoDataValues(obsnodata_opt);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">double</span> obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">double</span> difference=obsMeanValue-modValue;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">if</span>(modValue){</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordtype">double</span> relativeDifference=difference/modValue;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">if</span>(deltaObs_opt.size()){</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> assert(deltaObs_opt.size()>1);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">if</span>(100*relativeDifference<deltaObs_opt[0])<span class="comment">//lower bound</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> kalmanGain=0;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(100*relativeDifference>deltaObs_opt[1])<span class="comment">//upper bound</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> kalmanGain=0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()){</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> assert(weight_opt.size()>1);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span>(obsMeanValue<modValue)</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> uncertObs=weight_opt[0]*relativeDifference;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obsMeanValue>modValue)</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> uncertObs=weight_opt[1]*relativeDifference;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> }</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span>(uncertObs<=0)</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> uncertObs=0;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> cout << <span class="stringliteral">"obsMeanValue:"</span> << obsMeanValue << <span class="stringliteral">", modValue: "</span> << modValue << endl;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>(kalmanGain>0){</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">if</span>((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> kalmanGain=uncertWriteBuffer[icol]/(uncertWriteBuffer[icol]+uncertObs);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> assert(kalmanGain<=1);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> estWriteBuffer[icol]+=kalmanGain*(obsLineBuffer[icol]-estWriteBuffer[icol]);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> uncertWriteBuffer[icol]*=(1-kalmanGain);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> imgReaderObs.close();</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> ++obsindex;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> imgReaderModel1.close();</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> imgWriterEst.close();</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> modindex=1;modindex<model_opt.size();++modindex){</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> cout << <span class="stringliteral">"processing time "</span> << tmodel_opt[modindex] << endl;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size())</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> cout << <span class="stringliteral">"next observation "</span> << tmodel_opt[relobsindex[obsindex]] << endl;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> cout << <span class="stringliteral">"There is no next observation"</span> << endl;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">string</span> output;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">if</span>(outputfw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> output=outputfw_opt[modindex];</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> ostringstream outputstream;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> outputstream << outputfw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex];</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="comment">// outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> output=outputstream.str();</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">//two band output band0=estimation, band1=uncertainty</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> imgWriterEst.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> imgWriterEst.setGeoTransform(geotransform);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> imgWriterEst.GDALSetNoDataValue(obsnodata_opt[0]);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment">//calculate regression between two subsequence model inputs</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> imgReaderModel1.open(model_opt[modindex-1]);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> imgReaderModel1.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> imgReaderModel1.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> imgReaderModel1.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> imgReaderModel2.open(model_opt[modindex]);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> imgReaderModel2.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> imgReaderModel2.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> imgReaderModel2.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">//calculate regression</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment">//we could re-use the points from second image from last run, but</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment">//to keep it general, we must redo it (overlap might have changed)</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> cout << <span class="stringliteral">"Calculating regression for "</span> << imgReaderModel1.getFileName() << <span class="stringliteral">" "</span> << imgReaderModel2.getFileName() << endl;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordtype">double</span> errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,0,0);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">// double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,verbose_opt[0]);</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> cout << <span class="stringliteral">"c0modGlobal, c1modGlobal: "</span> << c0modGlobal << <span class="stringliteral">", "</span> << c1modGlobal << endl;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">bool</span> update=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size()){</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> update=(relobsindex[obsindex]==modindex);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> }</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> cout << <span class="stringliteral">"***update "</span> << relobsindex[obsindex] << <span class="stringliteral">" = "</span> << modindex << <span class="stringliteral">" "</span> << observation_opt[obsindex] << <span class="stringliteral">" ***"</span> << endl;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> imgReaderObs.open(observation_opt[obsindex]);</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> imgReaderObs.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> imgReaderObs.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> imgReaderObs.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">//calculate regression between model and observation</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> cout << <span class="stringliteral">"Calculating regression for "</span> << imgReaderModel2.getFileName() << <span class="stringliteral">" "</span> << imgReaderObs.getFileName() << endl;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">if</span>(regSensor_opt[0]>0)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> c0obs=0;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> c1obs=1;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> errObs=0;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> }</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> cout << <span class="stringliteral">"c0obs, c1obs: "</span> << c0obs << <span class="stringliteral">", "</span> << c1obs << endl;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> }</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment">//prediction (also to fill cloudy pixels in update mode)</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordtype">string</span> input;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">if</span>(outputfw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> input=outputfw_opt[modindex-1];</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> ostringstream outputstream;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> outputstream << outputfw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex-1];</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment">// outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex-1] << ".tif";</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> input=outputstream.str();</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> cout << <span class="stringliteral">"opening "</span> << input << endl;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderEst(input);</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> imgReaderEst.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> imgReaderEst.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> imgReaderEst.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> vector< vector<double> > obsLineVector(down_opt[0]);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> vector<double> obsLineBuffer;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> vector<double> obsWindowBuffer;<span class="comment">//buffer for observation to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> vector<double> model1LineBuffer;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> vector<double> model2LineBuffer;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> vector<double> model1buffer;<span class="comment">//buffer for model 1 to calculate time regression based on window</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> vector<double> model2buffer;<span class="comment">//buffer for model 2 to calculate time regression based on window</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> vector<double> uncertObsLineBuffer;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment">// vector<double> estWindowBuffer;//buffer for estimate to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> vector<double> uncertReadBuffer;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment">//initialize obsLineVector if update</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> cout << <span class="stringliteral">"initialize obsLineVector"</span> << endl;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> assert(down_opt[0]%2);<span class="comment">//window size must be odd </span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=-down_opt[0]/2;iline<down_opt[0]/2+1;++iline){</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(iline<0)<span class="comment">//replicate line 0</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgWriterEst.nrOfRow();++irow){</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="comment">//do not read from imgReaderObs, because we read entire window for each pixel...</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> imgReaderEst.readData(estReadBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> imgReaderEst.readData(uncertReadBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment">//read model2 in case current estimate is nodata</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> imgReaderEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> imgReaderModel2.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> assert(modRow>=0&&modRow<imgReaderModel2.nrOfRow());</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> imgReaderModel2.readData(model2LineBuffer,GDT_Float64,modRow,0);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> imgReaderModel1.readData(model1LineBuffer,GDT_Float64,modRow,0);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderEst.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderEst.nrOfRow()-1;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> obsLineVector.erase(obsLineVector.begin());</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> imgReaderObs.readData(obsLineBuffer,GDT_Float64,maxRow,0);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> obsLineVector.push_back(obsLineBuffer);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> obsLineBuffer=obsLineVector[down_opt[0]/2];</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="comment">// imgReaderObs.readData(obsLineBuffer,GDT_Float64,irow,0);</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">if</span>(imgReaderObs.nrOfBand()>1)</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> imgReaderObs.readData(uncertObsLineBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriterEst.nrOfCol();++icol){</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> imgReaderEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordtype">int</span> minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordtype">int</span> maxCol=(icol+down_opt[0]/2<imgReaderEst.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderEst.nrOfCol()-1;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordtype">int</span> minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderEst.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderEst.nrOfRow()-1;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> obsWindowBuffer.clear();</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=0;iline<obsLineVector.size();++iline){</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=minCol;isample<=maxCol;++isample){</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> assert(isample<obsLineVector[iline].size());</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> obsWindowBuffer.push_back(obsLineVector[iline][isample]);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment">// imgReaderObs.readDataBlock(obsWindowBuffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> }</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordtype">double</span> estValue=estReadBuffer[icol];</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordtype">double</span> estMeanValue=0;<span class="comment">//stat.mean(estWindowBuffer);</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="keywordtype">double</span> nvalid=0;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="comment">//time update</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> imgReaderModel2.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> assert(modRow>=0&&modRow<imgReaderModel2.nrOfRow());</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordtype">double</span> modValue=model2LineBuffer[modCol];</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">bool</span> estNodata=imgReaderEst.isNoData(estValue);<span class="comment">//validity of current estimate</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">if</span>(estNodata){</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="comment">//we have not found any valid data yet, better here to take the current model value if valid</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">if</span>(imgReaderModel2.isNoData(modValue)){<span class="comment">//if both estimate and model are no-data, set obs to nodata</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> }</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> } </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">if</span>(window_opt[0]>0){</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment">// imgReaderModel2.geo2image(geox,geoy,modCol,modRow);//did that already</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> minCol=(modCol>window_opt[0]/2) ? modCol-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> maxCol=(modCol+window_opt[0]/2<imgReaderModel2.nrOfCol()) ? modCol+window_opt[0]/2 : imgReaderModel2.nrOfCol()-1;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> minRow=(modRow>window_opt[0]/2) ? modRow-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> maxRow=(modRow+window_opt[0]/2<imgReaderModel2.nrOfRow()) ? modRow+window_opt[0]/2 : imgReaderModel2.nrOfRow()-1;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> imgReaderModel2.readDataBlock(model2buffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> minCol=(modCol>window_opt[0]/2) ? modCol-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> maxCol=(modCol+window_opt[0]/2<imgReaderModel1.nrOfCol()) ? modCol+window_opt[0]/2 : imgReaderModel1.nrOfCol()-1;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> minRow=(modRow>window_opt[0]/2) ? modRow-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> maxRow=(modRow+window_opt[0]/2<imgReaderModel1.nrOfRow()) ? modRow+window_opt[0]/2 : imgReaderModel1.nrOfRow()-1;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> imgReaderModel1.readDataBlock(model1buffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment">// imgReaderEst.image2geo(icol,irow,geox,geoy);</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> }</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> cerr << <span class="stringliteral">"Error reading data block for "</span> << minCol << <span class="stringliteral">"-"</span> << maxCol << <span class="stringliteral">", "</span> << minRow << <span class="stringliteral">"-"</span> << maxRow << endl;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> }</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="comment">//erase no-data from buffer</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> vector<double>::iterator it1=model1buffer.begin();</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> vector<double>::iterator it2=model2buffer.begin();</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">while</span>(it1!=model1buffer.end()&&it2!=model2buffer.end()){</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="comment">//erase nodata</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordtype">bool</span> modNodata=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> modNodata=modNodata||imgReaderModel1.isNoData(*it1);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> modNodata=modNodata||imgReaderModel2.isNoData(*it2);</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span>(modNodata){</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> model1buffer.erase(it1);</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> model2buffer.erase(it2);</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> ++it1;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> ++it2;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> }</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">if</span>(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0]){</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> errMod=stat.linear_regression_err(model1buffer,model2buffer,c0mod,c1mod);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">else</span>{<span class="comment">//use global regression...</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> c0mod=c0modGlobal;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> c1mod=c1modGlobal;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> c0mod=c0modGlobal;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> c1mod=c1modGlobal;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> }</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordtype">double</span> certNorm=(errMod*errMod+errObs*errObs);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordtype">double</span> certMod=errObs*errObs/certNorm;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keywordtype">double</span> certObs=errMod*errMod/certNorm;</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordtype">double</span> regTime=(c0mod+c1mod*estValue)*certObs;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keywordtype">double</span> regSensor=(c0obs+c1obs*modValue)*certMod;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment">// double regSensor=(c0obs+c1obs*estValue)*certObs;</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> estWriteBuffer[icol]=regTime+regSensor;</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="comment">// if(regTime<regSensor){</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="comment">// cout << "regTime = (" << c0mod << "+" << c1mod << "*" << estValue << ")*" << certObs << " = " << regTime << endl;</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="comment">// cout << "regSensor = (" << c0obs << "+" << c1obs << "*" << modValue << ")*" << certMod << " = " << regSensor << endl;</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="comment">// assert(regTime+regSensor>0);</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="comment">// assert(regTime+regSensor<=1);</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordtype">double</span> totalUncertainty=0;</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span>(errMod<eps_opt[0])</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> totalUncertainty=errObs;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(errObs<eps_opt[0])</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> totalUncertainty=errMod;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> totalUncertainty=sqrt(1.0/totalUncertainty);</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="comment">//measurement update</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span>(update&&!imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordtype">double</span> kalmanGain=1;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordtype">double</span> uncertObs=uncertObs_opt[0];</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> uncertObs=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()>1||deltaObs_opt.size()){</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> statobs;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> statobs.setNoDataValues(obsnodata_opt);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="keywordtype">double</span> obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="keywordtype">double</span> difference=obsMeanValue-modValue;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">if</span>(modValue){</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="keywordtype">double</span> relativeDifference=difference/modValue;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">if</span>(deltaObs_opt.size()){</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> assert(deltaObs_opt.size()>1);</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">if</span>(100*relativeDifference<deltaObs_opt[0])<span class="comment">//lower bound</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> kalmanGain=0;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(100*relativeDifference>deltaObs_opt[1])<span class="comment">//upper bound</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> kalmanGain=0;</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> }</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()){</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> assert(weight_opt.size()>1);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordflow">if</span>(obsMeanValue<modValue)</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> uncertObs=weight_opt[0]*relativeDifference;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obsMeanValue>modValue)</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> uncertObs=weight_opt[1]*relativeDifference;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> }</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordflow">if</span>(uncertObs<=0)</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> uncertObs=0;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> cout << <span class="stringliteral">"obsMeanValue:"</span> << obsMeanValue << <span class="stringliteral">", modValue: "</span> << modValue << endl;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> }</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">if</span>(kalmanGain>0){</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keywordflow">if</span>((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> kalmanGain=uncertWriteBuffer[icol]/(uncertWriteBuffer[icol]+uncertObs);</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> assert(kalmanGain<=1);</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> estWriteBuffer[icol]+=kalmanGain*(obsLineBuffer[icol]-estWriteBuffer[icol]);</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> uncertWriteBuffer[icol]*=(1-kalmanGain);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> }</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> }</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>((irow+1.0)/imgWriterEst.nrOfRow());</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> imgWriterEst.close();</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> imgReaderEst.close();</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> imgReaderObs.close();</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> ++obsindex;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> }</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> imgReaderModel1.close();</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> imgReaderModel2.close();</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> }</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">if</span>(find(direction_opt.begin(),direction_opt.end(),<span class="stringliteral">"backward"</span>)!=direction_opt.end()){</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> cout << <span class="stringliteral">"Running backward model"</span> << endl;</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> obsindex=relobsindex.size()-1;</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment">//initialization</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordtype">string</span> output;</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">if</span>(outputbw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> output=outputbw_opt.back();</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> ostringstream outputstream;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> outputstream << outputbw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt.back();</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="comment">// outputstream << outputbw_opt[0] << "_" << tmodel_opt.back() << ".tif";</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> output=outputstream.str();</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> }</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> cout << <span class="stringliteral">"Opening image "</span> << output << <span class="stringliteral">" for writing "</span> << endl;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> imgWriterEst.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> imgWriterEst.setGeoTransform(geotransform);</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> imgWriterEst.GDALSetNoDataValue(obsnodata_opt[0]);</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> cout << <span class="stringliteral">"processing time "</span> << tmodel_opt.back() << endl;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size())</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> cout << <span class="stringliteral">"next observation "</span> << tmodel_opt[relobsindex[obsindex]] << endl;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> cout << <span class="stringliteral">"There is no next observation"</span> << endl;</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> }</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> imgReaderModel1.open(model_opt.back());</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> imgReaderModel1.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> imgReaderModel1.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> imgReaderModel1.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> }</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> }</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> cerr << <span class="stringliteral">"Error opening file "</span> << model_opt[0] << endl;</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> }</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment">//calculate standard deviation of image to serve as model uncertainty</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> rasterBand=imgReaderModel1.getRasterBand(0);</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="keywordtype">double</span> minValue, maxValue, meanValue, stdDev;</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="keywordtype">double</span> modRow=0;</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keywordtype">double</span> modCol=0;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">if</span>(relobsindex.back()<model_opt.size()-1){<span class="comment">//initialize output_opt.back() as model[0]</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment">//write last model as output</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> cout << <span class="stringliteral">"write last model as output"</span> << endl;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> imgWriterEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> imgReaderModel1.readData(estReadBuffer,GDT_Float64,modRow);</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment">//simple nearest neighbor</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="comment">//stat.nearUp(estReadBuffer,estWriteBuffer);</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> </div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriterEst.nrOfCol();++icol){</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> imgWriterEst.image2geo(icol,irow,geox,geoy); </div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordtype">double</span> modValue=estReadBuffer[modCol];</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">if</span>(imgReaderModel1.isNoData(modValue)){</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> }</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> }</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> }</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> cerr << <span class="stringliteral">"Error writing file "</span> << imgWriterEst.getFileName() << endl;</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> }</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordflow">else</span>{<span class="comment">//we have an measurement at end time</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> cout << <span class="stringliteral">"we have an measurement at end time"</span> << endl;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> imgReaderObs.open(observation_opt.back());</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> imgReaderObs.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> imgReaderObs.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> imgReaderObs.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordflow">if</span>(regSensor_opt[0]>0)</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> c0obs=0;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> c1obs=1;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> errObs=0;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> cout << <span class="stringliteral">"c0obs, c1obs: "</span> << c0obs << <span class="stringliteral">", "</span> << c1obs << endl;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> imgWriterEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> imgReaderModel1.readData(estReadBuffer,GDT_Float64,modRow);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> vector<double> obsLineBuffer;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> vector<double> uncertObsLineBuffer;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment">// imgReaderObs.readData(estWriteBuffer,GDT_Float64,irow,0);</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> imgReaderObs.readData(obsLineBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">if</span>(imgReaderObs.nrOfBand()>1)</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> imgReaderObs.readData(uncertObsLineBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriterEst.nrOfCol();++icol){</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> imgWriterEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordtype">double</span> modValue=estReadBuffer[modCol];</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">if</span>(imgReaderModel1.isNoData(modValue)){<span class="comment">//model is nodata: retain observation </span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> estWriteBuffer[icol]=obsLineBuffer[icol];</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordflow">if</span>(imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> }</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> uncertWriteBuffer[icol]=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> uncertWriteBuffer[icol]=uncertObs_opt[0];</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">else</span>{<span class="comment">//model is valid: calculate estimate from model</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordtype">double</span> errMod=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">// double certNorm=(errMod*errMod+errObs*errObs);</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment">// double certMod=errObs*errObs/certNorm;</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">// double certObs=errMod*errMod/certNorm;</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment">// double regTime=0;</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">// double regSensor=(c0obs+c1obs*modValue)*certMod;</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">// estWriteBuffer[icol]=regTime+regSensor;</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordtype">double</span> totalUncertainty=errMod;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">// if(errMod<eps_opt[0])</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">// totalUncertainty=errObs;</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">// else if(errObs<eps_opt[0])</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">// totalUncertainty=errMod;</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">// totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">// totalUncertainty=sqrt(1.0/totalUncertainty);</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> uncertWriteBuffer[icol]=totalUncertainty;<span class="comment">//in case observation is not valid</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment">//measurement update</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">if</span>(!imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordtype">double</span> kalmanGain=1;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordtype">double</span> uncertObs=uncertObs_opt[0];</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> uncertObs=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()>1||deltaObs_opt.size()){</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> vector<double> obsWindowBuffer;<span class="comment">//buffer for observation to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordtype">int</span> minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordtype">int</span> maxCol=(icol+down_opt[0]/2<imgReaderObs.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderObs.nrOfCol()-1;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordtype">int</span> minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderObs.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderObs.nrOfRow()-1;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> imgReaderObs.readDataBlock(obsWindowBuffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> statobs;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> statobs.setNoDataValues(obsnodata_opt);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordtype">double</span> obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordtype">double</span> difference=obsMeanValue-modValue;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">if</span>(modValue){</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordtype">double</span> relativeDifference=difference/modValue;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordflow">if</span>(deltaObs_opt.size()){</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> assert(deltaObs_opt.size()>1);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordflow">if</span>(100*relativeDifference<deltaObs_opt[0])<span class="comment">//lower bound</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> kalmanGain=0;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(100*relativeDifference>deltaObs_opt[1])<span class="comment">//upper bound</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> kalmanGain=0;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> }</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()){</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> assert(weight_opt.size()>1);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordflow">if</span>(obsMeanValue<modValue)</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> uncertObs=weight_opt[0]*relativeDifference;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obsMeanValue>modValue)</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> uncertObs=weight_opt[1]*relativeDifference;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> }</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">if</span>(uncertObs<=0)</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> uncertObs=0;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> cout << <span class="stringliteral">"obsMeanValue:"</span> << obsMeanValue << <span class="stringliteral">", modValue: "</span> << modValue << endl;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">if</span>(kalmanGain>0){</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordflow">if</span>((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> kalmanGain=uncertWriteBuffer[icol]/(uncertWriteBuffer[icol]+uncertObs);</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> }</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> assert(kalmanGain<=1);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> estWriteBuffer[icol]+=kalmanGain*(obsLineBuffer[icol]-estWriteBuffer[icol]);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> uncertWriteBuffer[icol]*=(1-kalmanGain);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> }</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> }</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> }</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> imgReaderObs.close();</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> --obsindex;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> imgReaderModel1.close();</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> imgWriterEst.close();</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> modindex=model_opt.size()-2;modindex>=0;--modindex){</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> cout << <span class="stringliteral">"processing time "</span> << tmodel_opt[modindex] << endl;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size())</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> cout << <span class="stringliteral">"next observation "</span> << tmodel_opt[relobsindex[obsindex]] << endl;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> cout << <span class="stringliteral">"There is no next observation"</span> << endl;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> }</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="keywordtype">string</span> output;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="keywordflow">if</span>(outputbw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> output=outputbw_opt[modindex];</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> ostringstream outputstream;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> outputstream << outputbw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex];</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">// outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> output=outputstream.str();</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> }</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">//two band output band0=estimation, band1=uncertainty</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> imgWriterEst.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> imgWriterEst.setGeoTransform(geotransform);</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> imgWriterEst.GDALSetNoDataValue(obsnodata_opt[0]);</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> </div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">//calculate regression between two subsequence model inputs</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> imgReaderModel1.open(model_opt[modindex+1]);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> imgReaderModel1.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> imgReaderModel1.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> imgReaderModel1.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> imgReaderModel2.open(model_opt[modindex]);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> imgReaderModel2.setNoData(modnodata_opt);</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordflow">if</span>(modoffset_opt.size())</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> imgReaderModel2.setOffset(modoffset_opt[0]);</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">if</span>(modscale_opt.size())</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> imgReaderModel2.setScale(modscale_opt[0]);</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment">//calculate regression</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment">//we could re-use the points from second image from last run, but</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="comment">//to keep it general, we must redo it (overlap might have changed)</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> cout << <span class="stringliteral">"Calculating regression for "</span> << imgReaderModel1.getFileName() << <span class="stringliteral">" "</span> << imgReaderModel2.getFileName() << endl;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordtype">double</span> errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,0,0);</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment">// double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,verbose_opt[0]);</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> cout << <span class="stringliteral">"c0modGlobal, c1modGlobal: "</span> << c0modGlobal << <span class="stringliteral">", "</span> << c1modGlobal << endl;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordtype">bool</span> update=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size()){</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> update=(relobsindex[obsindex]==modindex);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> cout << <span class="stringliteral">"***update "</span> << relobsindex[obsindex] << <span class="stringliteral">" = "</span> << modindex << <span class="stringliteral">" "</span> << observation_opt[obsindex] << <span class="stringliteral">" ***"</span> << endl;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> </div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> imgReaderObs.open(observation_opt[obsindex]);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> imgReaderObs.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> imgReaderObs.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> imgReaderObs.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment">//calculate regression between model and observation</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> cout << <span class="stringliteral">"Calculating regression for "</span> << imgReaderModel2.getFileName() << <span class="stringliteral">" "</span> << imgReaderObs.getFileName() << endl;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="keywordflow">if</span>(regSensor_opt[0]>0)</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> c0obs=0;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> c1obs=1;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> errObs=0;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> }</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> cout << <span class="stringliteral">"c0obs, c1obs: "</span> << c0obs << <span class="stringliteral">", "</span> << c1obs << endl;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment">//prediction (also to fill cloudy pixels in update mode)</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordtype">string</span> input;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">if</span>(outputbw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> input=outputbw_opt[modindex+1];</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> ostringstream outputstream;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> outputstream << outputbw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex+1];</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">// outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex+1] << ".tif";</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> input=outputstream.str();</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderEst(input);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> imgReaderEst.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> imgReaderEst.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> imgReaderEst.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> vector< vector<double> > obsLineVector(down_opt[0]);</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> vector<double> obsLineBuffer;</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> vector<double> obsWindowBuffer;<span class="comment">//buffer for observation to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> vector<double> model1LineBuffer;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> vector<double> model2LineBuffer;</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> vector<double> model1buffer;<span class="comment">//buffer for model 1 to calculate time regression based on window</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> vector<double> model2buffer;<span class="comment">//buffer for model 2 to calculate time regression based on window</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> vector<double> uncertObsLineBuffer;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> vector<double> estReadBuffer;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">// vector<double> estWindowBuffer;//buffer for estimate to calculate average corresponding to model pixel</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> vector<double> uncertReadBuffer;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">//initialize obsLineVector</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> assert(down_opt[0]%2);<span class="comment">//window size must be odd </span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=-down_opt[0]/2;iline<down_opt[0]/2+1;++iline){</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">if</span>(iline<0)<span class="comment">//replicate line 0</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgWriterEst.nrOfRow();++irow){</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> assert(irow<imgReaderEst.nrOfRow());</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment">//do not read from imgReaderObs, because we read entire window for each pixel...</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> imgReaderEst.readData(estReadBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> imgReaderEst.readData(uncertReadBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="comment">//read model2 in case current estimate is nodata</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> imgReaderEst.image2geo(0,irow,geox,geoy);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> imgReaderModel2.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> assert(modRow>=0&&modRow<imgReaderModel2.nrOfRow());</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> imgReaderModel2.readData(model2LineBuffer,GDT_Float64,modRow,0);</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> </div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> imgReaderModel1.readData(model1LineBuffer,GDT_Float64,modRow,0);</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> </div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderEst.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderEst.nrOfRow()-1;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> obsLineVector.erase(obsLineVector.begin());</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> imgReaderObs.readData(obsLineBuffer,GDT_Float64,maxRow,0);</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> obsLineVector.push_back(obsLineBuffer);</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> obsLineBuffer=obsLineVector[down_opt[0]/2];</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">// imgReaderObs.readData(obsLineBuffer,GDT_Float64,irow,0);</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">if</span>(imgReaderObs.nrOfBand()>1)</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> imgReaderObs.readData(uncertObsLineBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> }</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriterEst.nrOfCol();++icol){</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> imgReaderEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordtype">int</span> minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordtype">int</span> maxCol=(icol+down_opt[0]/2<imgReaderEst.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderEst.nrOfCol()-1;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordtype">int</span> minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordtype">int</span> maxRow=(irow+down_opt[0]/2<imgReaderEst.nrOfRow()) ? irow+down_opt[0]/2 : imgReaderEst.nrOfRow()-1;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> obsWindowBuffer.clear();</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=0;iline<obsLineVector.size();++iline){</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=minCol;isample<=maxCol;++isample){</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> assert(isample<obsLineVector[iline].size());</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> obsWindowBuffer.push_back(obsLineVector[iline][isample]);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> }</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">// imgReaderObs.readDataBlock(obsWindowBuffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> }</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keywordtype">double</span> estValue=estReadBuffer[icol];</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">double</span> estMeanValue=0;<span class="comment">//stat.mean(estWindowBuffer);</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordtype">double</span> nvalid=0;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">//time update</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> imgReaderModel2.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> assert(modRow>=0&&modRow<imgReaderModel2.nrOfRow());</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keywordtype">double</span> modValue=model2LineBuffer[modCol];</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordtype">bool</span> estNodata=imgReaderEst.isNoData(estValue);</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordflow">if</span>(estNodata){</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment">//we have not found any valid data yet, better here to take the current model value if valid</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="keywordflow">if</span>(imgReaderModel2.isNoData(modValue)){<span class="comment">//if both estimate and model are no-data, set obs to nodata</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> }</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> estWriteBuffer[icol]=modValue;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> }</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> } </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="keywordflow">if</span>(window_opt[0]>0){</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">// imgReaderModel2.geo2image(geox,geoy,modCol,modRow);//did that already</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> minCol=(modCol>window_opt[0]/2) ? modCol-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> maxCol=(modCol+window_opt[0]/2<imgReaderModel2.nrOfCol()) ? modCol+window_opt[0]/2 : imgReaderModel2.nrOfCol()-1;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> minRow=(modRow>window_opt[0]/2) ? modRow-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> maxRow=(modRow+window_opt[0]/2<imgReaderModel2.nrOfRow()) ? modRow+window_opt[0]/2 : imgReaderModel2.nrOfRow()-1;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> imgReaderModel2.readDataBlock(model2buffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> </div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> imgReaderModel1.geo2image(geox,geoy,modCol,modRow);</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> minCol=(modCol>window_opt[0]/2) ? modCol-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> maxCol=(modCol+window_opt[0]/2<imgReaderModel1.nrOfCol()) ? modCol+window_opt[0]/2 : imgReaderModel1.nrOfCol()-1;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> minRow=(modRow>window_opt[0]/2) ? modRow-window_opt[0]/2 : 0;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> maxRow=(modRow+window_opt[0]/2<imgReaderModel1.nrOfRow()) ? modRow+window_opt[0]/2 : imgReaderModel1.nrOfRow()-1;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> imgReaderModel1.readDataBlock(model1buffer,GDT_Float64,minCol,maxCol,minRow,maxRow,0);</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment">// imgReaderEst.image2geo(icol,irow,geox,geoy);</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> cerr << <span class="stringliteral">"Error reading data block for "</span> << minCol << <span class="stringliteral">"-"</span> << maxCol << <span class="stringliteral">", "</span> << minRow << <span class="stringliteral">"-"</span> << maxRow << endl;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> }</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment">//erase no-data from buffer</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> vector<double>::iterator it1=model1buffer.begin();</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> vector<double>::iterator it2=model2buffer.begin();</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">while</span>(it1!=model1buffer.end()&&it2!=model2buffer.end()){</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">//erase nodata</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordtype">bool</span> modNodata=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> modNodata=modNodata||imgReaderModel1.isNoData(*it1);</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> modNodata=modNodata||imgReaderModel2.isNoData(*it2);</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="keywordflow">if</span>(modNodata){</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> model1buffer.erase(it1);</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> model2buffer.erase(it2);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> }</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> ++it1;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> ++it2;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> }</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="keywordflow">if</span>(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0]){</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> errMod=stat.linear_regression_err(model1buffer,model2buffer,c0mod,c1mod);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> errMod*=regTime_opt[0];</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">else</span>{<span class="comment">//use global regression...</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> c0mod=c0modGlobal;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> c1mod=c1modGlobal;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> c0mod=c0modGlobal;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> c1mod=c1modGlobal;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="keywordtype">double</span> certNorm=(errMod*errMod+errObs*errObs);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordtype">double</span> certMod=errObs*errObs/certNorm;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordtype">double</span> certObs=errMod*errMod/certNorm;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordtype">double</span> regTime=(c0mod+c1mod*estValue)*certObs;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">// double regSensor=(c0obs+c1obs*estValue)*certObs;</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="keywordtype">double</span> regSensor=(c0obs+c1obs*modValue)*certMod;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> estWriteBuffer[icol]=regTime+regSensor;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="keywordtype">double</span> totalUncertainty=0;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="keywordflow">if</span>(errMod<eps_opt[0])</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> totalUncertainty=errObs;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(errObs<eps_opt[0])</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> totalUncertainty=errMod;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> totalUncertainty=sqrt(1.0/totalUncertainty);</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> }</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> }</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment">//measurement update</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordflow">if</span>(update&&!imgReaderObs.isNoData(obsLineBuffer[icol])){</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="keywordtype">double</span> kalmanGain=1;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="keywordtype">double</span> uncertObs=uncertObs_opt[0];</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">if</span>(uncertObsLineBuffer.size()>icol)</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> uncertObs=uncertObsLineBuffer[icol];</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()>1||deltaObs_opt.size()){</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> statobs;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> statobs.setNoDataValues(obsnodata_opt);</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="keywordtype">double</span> obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="keywordtype">double</span> difference=obsMeanValue-modValue;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keywordflow">if</span>(modValue){</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordtype">double</span> relativeDifference=difference/modValue;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">if</span>(deltaObs_opt.size()){</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> assert(deltaObs_opt.size()>1);</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="keywordflow">if</span>(100*relativeDifference<deltaObs_opt[0])<span class="comment">//lower bound</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> kalmanGain=0;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(100*relativeDifference>deltaObs_opt[1])<span class="comment">//upper bound</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> kalmanGain=0;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> }</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(weight_opt.size()){</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> assert(weight_opt.size()>1);</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="keywordflow">if</span>(obsMeanValue<modValue)</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> uncertObs=weight_opt[0]*relativeDifference;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obsMeanValue>modValue)</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> uncertObs=weight_opt[1]*relativeDifference;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> }</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> }</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="keywordflow">if</span>(uncertObs<=0)</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> uncertObs=0;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> cout << <span class="stringliteral">"obsMeanValue:"</span> << obsMeanValue << <span class="stringliteral">", modValue: "</span> << modValue << endl;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> }</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordflow">if</span>(kalmanGain>0){</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">if</span>((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> kalmanGain=uncertWriteBuffer[icol]/(uncertWriteBuffer[icol]+uncertObs);</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> assert(kalmanGain<=1);</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> estWriteBuffer[icol]+=kalmanGain*(obsLineBuffer[icol]-estWriteBuffer[icol]);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> uncertWriteBuffer[icol]*=(1-kalmanGain);</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> }</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> }</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>((irow+1.0)/imgWriterEst.nrOfRow());</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> }</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> imgWriterEst.close();</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> imgReaderEst.close();</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> imgReaderObs.close();</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> --obsindex;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> imgReaderModel1.close();</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> imgReaderModel2.close();</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> }</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> }</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="keywordflow">if</span>(find(direction_opt.begin(),direction_opt.end(),<span class="stringliteral">"smooth"</span>)!=direction_opt.end()){</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> cout << <span class="stringliteral">"Running smooth model"</span> << endl;</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> obsindex=0;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> modindex=0;modindex<model_opt.size();++modindex){</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> cout << <span class="stringliteral">"processing time "</span> << tmodel_opt[modindex] << endl;</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size())</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> cout << <span class="stringliteral">"next observation "</span> << tmodel_opt[relobsindex[obsindex]] << endl;</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> cout << <span class="stringliteral">"There is no next observation"</span> << endl;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="keywordtype">string</span> output;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="keywordflow">if</span>(outputfb_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> output=outputfb_opt[modindex];</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> ostringstream outputstream;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> outputstream << outputfb_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex];</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">// outputstream << outputfb_opt[0] << "_" << tmodel_opt[modindex] << ".tif";</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> output=outputstream.str();</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> }</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment">//two band output band0=estimation, band1=uncertainty</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> imgWriterEst.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> imgWriterEst.setGeoTransform(geotransform);</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> imgWriterEst.GDALSetNoDataValue(obsnodata_opt[0]);</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="comment">//open forward and backward estimates</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment">//we assume forward in model and backward in observation...</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="keywordtype">string</span> inputfw;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="keywordtype">string</span> inputbw;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="keywordflow">if</span>(outputfw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> inputfw=outputfw_opt[modindex];</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> ostringstream outputstream;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> outputstream << outputfw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex];</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment">// outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> inputfw=outputstream.str();</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> }</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="keywordflow">if</span>(outputbw_opt.size()==model_opt.size())</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> inputbw=outputbw_opt[modindex];</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> ostringstream outputstream;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> outputstream << outputbw_opt[0] << <span class="stringliteral">"_"</span>;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> outputstream << setfill(<span class="charliteral">'0'</span>) << setw(ndigit) << tmodel_opt[modindex];</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> outputstream << <span class="stringliteral">".tif"</span>;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">// outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> inputbw=outputstream.str();</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> }</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderForward(inputfw);</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReaderBackward(inputbw);</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> imgReaderForward.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> imgReaderForward.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> imgReaderForward.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> imgReaderBackward.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> imgReaderBackward.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> imgReaderBackward.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> vector<double> estForwardBuffer;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> vector<double> estBackwardBuffer;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> vector<double> uncertObsLineBuffer;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> vector<double> uncertForwardBuffer;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> vector<double> uncertBackwardBuffer;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> vector<double> uncertReadBuffer;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> vector<double> estWriteBuffer(ncol);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> vector<double> uncertWriteBuffer(ncol);</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="comment">// vector<double> lineMask;</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="keywordtype">bool</span> update=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="keywordflow">if</span>(obsindex<relobsindex.size()){</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> update=(relobsindex[obsindex]==modindex);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> }</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> cout << <span class="stringliteral">"***update "</span> << relobsindex[obsindex] << <span class="stringliteral">" = "</span> << modindex << <span class="stringliteral">" "</span> << observation_opt[obsindex] << <span class="stringliteral">" ***"</span> << endl;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> imgReaderObs.open(observation_opt[obsindex]);</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> imgReaderObs.getGeoTransform(geotransform);</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> imgReaderObs.setNoData(obsnodata_opt);</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="keywordflow">if</span>(obsoffset_opt.size())</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> imgReaderObs.setOffset(obsoffset_opt[0]);</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="keywordflow">if</span>(obsscale_opt.size())</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> imgReaderObs.setScale(obsscale_opt[0]);</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment">//calculate regression between model and observation</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> }</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> </div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgWriterEst.nrOfRow();++irow){</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> assert(irow<imgReaderForward.nrOfRow());</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> assert(irow<imgReaderBackward.nrOfRow());</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> imgReaderForward.readData(estForwardBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> imgReaderBackward.readData(estBackwardBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> imgReaderForward.readData(uncertForwardBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> imgReaderBackward.readData(uncertBackwardBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> </div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> imgReaderObs.readData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <span class="keywordflow">if</span>(imgReaderObs.nrOfBand()>1)</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> imgReaderObs.readData(uncertObsLineBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> }</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="comment">// double oldRowMask=-1;//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgWriterEst.nrOfCol();++icol){</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> imgWriterEst.image2geo(icol,irow,geox,geoy);</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="keywordtype">double</span> A=estForwardBuffer[icol];</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="keywordtype">double</span> B=estBackwardBuffer[icol];</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="keywordtype">double</span> C=uncertForwardBuffer[icol]*uncertForwardBuffer[icol];</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="keywordtype">double</span> D=uncertBackwardBuffer[icol]*uncertBackwardBuffer[icol];</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="keywordtype">double</span> uncertObs=uncertObs_opt[0];</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="comment">// if(update){//check for nodata in observation</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">// if(imgReaderObs.isNoData(estWriteBuffer[icol]))</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="comment">// uncertObs=uncertNodata_opt[0];</span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment">// else if(uncertObsLineBuffer.size()>icol)</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">// uncertObs=uncertObsLineBuffer[icol];</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> </div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordtype">double</span> noemer=(C+D);</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="comment">//todo: consistently check for division by zero...</span></div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="keywordflow">if</span>(imgReaderForward.isNoData(A)&&imgReaderBackward.isNoData(B)){</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> estWriteBuffer[icol]=obsnodata_opt[0];</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> uncertWriteBuffer[icol]=uncertNodata_opt[0];</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> }</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(imgReaderForward.isNoData(A)){</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> estWriteBuffer[icol]=B;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> uncertWriteBuffer[icol]=uncertBackwardBuffer[icol];</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> }</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(imgReaderForward.isNoData(B)){</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> estWriteBuffer[icol]=A;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> uncertWriteBuffer[icol]=uncertForwardBuffer[icol];</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> }</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="keywordflow">if</span>(noemer<eps_opt[0]){<span class="comment">//simple average if both uncertainties are ~>0</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> estWriteBuffer[icol]=0.5*(A+B);</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> uncertWriteBuffer[icol]=uncertObs;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> }</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> estWriteBuffer[icol]=(A*D+B*C)/noemer;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="keywordtype">double</span> P=0;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordflow">if</span>(C>eps_opt[0])</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> P+=1.0/C;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="keywordflow">if</span>(D>eps_opt[0])</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> P+=1.0/D;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="keywordflow">if</span>(uncertObs*uncertObs>eps_opt[0])</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> P-=1.0/uncertObs/uncertObs;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <span class="keywordflow">if</span>(P>eps_opt[0])</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> P=sqrt(1.0/P);</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> P=0;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> uncertWriteBuffer[icol]=P;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> }</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> }</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> }</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>((irow+1.0)/imgWriterEst.nrOfRow());</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> }</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> imgWriterEst.close();</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> imgReaderForward.close();</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> imgReaderBackward.close();</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="keywordflow">if</span>(update){</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> imgReaderObs.close();</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> ++obsindex;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> }</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> }</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> }</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment">// if(mask_opt.size())</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment">// maskReader.close();</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> }</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="ttc" id="classimgregression_1_1ImgRegression_html"><div class="ttname"><a href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgRegression_8h_source.html#l00030">ImgRegression.h:30</a></div></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pklas2img.html b/doc/html/pklas2img.html
new file mode 100644
index 0000000..071dd69
--- /dev/null
+++ b/doc/html/pklas2img.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pklas2img</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pklas2img </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Rasterize LAS/LAZ point clouds with filtering/compositing options </p>
+<h2>SYNOPSIS</h2>
+<p><code></code></p>
+<p><code></code></p>
+<p><code></code></p>
+<p><code> Options: [-n attribute] [-comp method] [-fir type] [-a_srs] [-ulx value -uly value -lrx value -lry value] [-dx value -dy value] [-ot type] [-of format] [-ret value]* [-class number]*</code></p>
+<p><code> Advanced options: [-nbin value] [-nodata value] [-co option]* [-ct colortable]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pklas2img_description"></a>
+Description</h1>
+<p>The utility pklas2img converts a las/laz point cloud into a gridded raster dataset. The implementation is based on <a href="www.liblas.org">liblas</a> API. You can define the bounding box, grid cell size and spatial reference set. The composite rule for multiple returns within a single grid cell can be set with the option -comp. The default attribute is z (heiht), but can also be intensity (if available), the return number (-n return) or the total number of returns in that grid cell ( [...]
+<h1><a class="anchor" id="pklas2img_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input las file </td></tr>
+<tr>
+<td>n </td><td>name </td><td>std::string </td><td>z </td><td>names of the attribute to select: intensity, return, nreturn, z </td></tr>
+<tr>
+<td>ret </td><td>ret </td><td>unsigned short </td><td></td><td>number(s) of returns to include </td></tr>
+<tr>
+<td>class </td><td>class </td><td>unsigned short </td><td></td><td>classes to keep: 0 (created, never classified), 1 (unclassified), 2 (ground), 3 (low vegetation), 4 (medium vegetation), 5 (high vegetation), 6 (building), 7 (low point, noise), 8 (model key-point), 9 (water), 10 (reserved), 11 (reserved), 12 (overlap) </td></tr>
+<tr>
+<td>comp </td><td>comp </td><td>std::string </td><td>last </td><td>composite for multiple points in cell (min, max, median, mean, sum, first, last, profile (percentile height values), percentile, number (point density)). Last: overwrite cells with latest point </td></tr>
+<tr>
+<td>fir </td><td>filter </td><td>std::string </td><td>all </td><td>filter las points (first,last,single,multiple,all). </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>a_srs </td><td>a_srs </td><td>std::string </td><td></td><td>assign the projection for the output file in epsg code, e.g., epsg:3035 for European LAEA projection </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td>0 </td><td>Upper left x value bounding box (in geocoordinates if georef is true). 0 is read from input file </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td>0 </td><td>Upper left y value bounding box (in geocoordinates if georef is true). 0 is read from input file </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td>0 </td><td>Lower right x value bounding box (in geocoordinates if georef is true). 0 is read from input file </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td>0 </td><td>Lower right y value bounding box (in geocoordinates if georef is true). 0 is read from input file </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td>Byte </td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td>GTiff </td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>dx </td><td>dx </td><td>double </td><td>1 </td><td>Output resolution in x (in meter) </td></tr>
+<tr>
+<td>dy </td><td>dy </td><td>double </td><td>1 </td><td>Output resolution in y (in meter) </td></tr>
+<tr>
+<td>nbin </td><td>nbin </td><td>short </td><td>10 </td><td>Number of percentile bins for calculating percentile height value profile (=number of output bands) </td></tr>
+<tr>
+<td>perc </td><td>perc </td><td>double </td><td>95 </td><td>Percentile value used for rule percentile </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>short </td><td>0 </td><td>nodata value to put in image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+</table>
+pklas2img -i lasfile -o output </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pklas2img_8cc_source.html b/doc/html/pklas2img_8cc_source.html
new file mode 100644
index 0000000..4f67773
--- /dev/null
+++ b/doc/html/pklas2img_8cc_source.html
@@ -0,0 +1,629 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pklas2img.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pklas2img.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pklas2img.cc: Rasterize LAS/LAZ point clouds with filtering/compositing options</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "lasclasses/FileReaderLas.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "algorithms/Filter2d.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input las file"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> attribute_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"name"</span>, <span class="stringliteral">"names of the point attribute to select: intensity, return, nreturn, z"</span>, <span class="stringliteral">"z"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// Optionpk<bool> disc_opt("circ", "circular", "circular disc kernel for dilation and erosion", false);</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// Optionpk<double> maxSlope_opt("s", "maxSlope", "Maximum slope used for morphological filtering", 0.0);</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// Optionpk<double> hThreshold_opt("ht", "maxHeight", "initial and maximum height threshold for progressive morphological filtering (e.g., -ht 0.2 -ht 2.5)", 0.2);</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// Optionpk<short> maxIter_opt("maxit", "maxit", "Maximum number of iterations in post filter", 5);</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> returns_opt(<span class="stringliteral">"ret"</span>, <span class="stringliteral">"ret"</span>, <span class="stringliteral">"number(s) of returns to include"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> classes_opt(<span class="stringliteral">"class"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"classes to keep: 0 (created, never classified), 1 (unclassified), 2 (ground), 3 (low vegetation), 4 (medium vegetation), 5 (high vegetation), 6 (building), 7 (low point, noise), 8 ( [...]
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> composite_opt(<span class="stringliteral">"comp"</span>, <span class="stringliteral">"comp"</span>, <span class="stringliteral">"composite for multiple points in cell (min, max, median, mean, sum, first, last, profile (percentile height values), percentile, number (point density)). Last: overwrite cells with latest p [...]
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> filter_opt(<span class="stringliteral">"fir"</span>, <span class="stringliteral">"filter"</span>, <span class="stringliteral">"filter las points (first,last,single,multiple,all)."</span>, <span class="stringliteral">"all"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">// Optionpk<string> postFilter_opt("pf", "pfilter", "post processing filter (etew_min,promorph (progressive morphological filter),bunting (adapted promorph),open,close,none).", "none");</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Optionpk<short> dimx_opt("dimx", "dimx", "Dimension X of postFilter", 3);</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// Optionpk<short> dimy_opt("dimy", "dimy", "Dimension Y of postFilter", 3);</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> projection_opt(<span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"a_srs"</span>, <span class="stringliteral">"assign the projection for the output file in epsg code, e.g., epsg:3035 for European LAEA projection"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box (in geocoordinates if georef is true). 0 is read from input file"</span>, 0.0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box (in geocoordinates if georef is true). 0 is read from input file"</span>, 0.0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower right x value bounding box (in geocoordinates if georef is true). 0 is read from input file"</span>, 0.0);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower right y value bounding box (in geocoordinates if georef is true). 0 is read from input file"</span>, 0.0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringlitera [...]
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>, <span class="stringliteral">"GTiff"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dx_opt(<span class="stringliteral">"dx"</span>, <span class="stringliteral">"dx"</span>, <span class="stringliteral">"Output resolution in x (in meter)"</span>, 1.0);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dy_opt(<span class="stringliteral">"dy"</span>, <span class="stringliteral">"dy"</span>, <span class="stringliteral">"Output resolution in y (in meter)"</span>, 1.0);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nbin_opt(<span class="stringliteral">"nbin"</span>, <span class="stringliteral">"nbin"</span>, <span class="stringliteral">"Number of percentile bins for calculating percentile height value profile (=number of output bands)"</span>, 10.0);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> percentile_opt(<span class="stringliteral">"perc"</span>,<span class="stringliteral">"perc"</span>,<span class="stringliteral">"Percentile value used for rule percentile"</span>,95);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value to put in image"</span>, 0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode"</span>, 0,2);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> nbin_opt.setHide(1);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> percentile_opt.setHide(1);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nodata_opt.setHide(1);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> attribute_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> returns_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> classes_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> composite_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> filter_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> projection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> dx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> dy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> nbin_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> percentile_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> exit(0);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> cout << endl;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> cout << <span class="stringliteral">"pklas2img -i lasfile -o output"</span> << endl;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> cout << endl;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">//todo: is this needed?</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> GDALAllRegister();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">double</span> dfComplete=0.0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <a class="code" href="classVector2d.html">Vector2d<vector<double></a> > inputData;<span class="comment">//row,col,point</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cout << <span class="stringliteral">"Unknown output pixel type: "</span> << otype_opt[0] << endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> cout << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordtype">double</span> maxLRX=0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">double</span> maxULY=0;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">double</span> minULX=0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">double</span> minLRY=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> totalPoints=0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nPoints=0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ipoint=0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iinput=0;iinput<input_opt.size();++iinput){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// assert(input_opt[iinput].find(".las")!=string::npos);</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <a class="code" href="classFileReaderLas.html">FileReaderLas</a> lasReader;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> lasReader.open(input_opt[iinput]);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> cerr << errorString << endl;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> exit(1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> cerr << <span class="stringliteral">"Error opening input "</span> << input_opt[iinput] << endl;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> exit(2);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> nPoints=lasReader.getPointCount();</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> totalPoints+=nPoints;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(ulx_opt[0]>=lrx_opt[0]||uly_opt[0]<=lry_opt[0]){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> lasReader.getExtent(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> lrx+=dx_opt[0];<span class="comment">//pixel coordinates are referenced to upper left corner (las coordinates are centres)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> lry-=dy_opt[0];<span class="comment">//pixel coordinates are referenced to upper left corner (las coordinates are centres)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span>(ulx>=lrx){</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> ulx=ulx-dx_opt[0]/2.0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> lrx=ulx+dx_opt[0]/2.0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(uly<=lry){</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> uly=lry+dy_opt[0]/2.0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> lry=lry-dy_opt[0]/2.0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(maxLRX>minULX){</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> maxLRX=(lrx>maxLRX)?lrx:maxLRX;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> maxULY=(uly>maxULY)?uly:maxULY;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> minULX=(ulx<minULX)?ulx:minULX;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> minLRY=(lry<minLRY)?lry:minLRY;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">else</span>{<span class="comment">//initialize</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> maxLRX=lrx;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> maxULY=uly;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> minULX=ulx;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> minLRY=lry;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> } </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> maxLRX=lrx_opt[0];</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> maxULY=uly_opt[0];</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> minULX=ulx_opt[0];</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> minLRY=lry_opt[0];</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> lasReader.close();</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> std::cout << setprecision(12) << <span class="stringliteral">"--ulx="</span> << minULX << <span class="stringliteral">" --uly="</span> << maxULY << <span class="stringliteral">" --lrx="</span> << maxLRX << <span class="stringliteral">" --lry="</span> << minLRY << std::endl;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> std::cout << <span class="stringliteral">"total number of points before filtering: "</span> << totalPoints << std::endl;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> std::cout << <span class="stringliteral">"filter set to "</span> << filter_opt[0] << std::endl;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">// std::cout << "postFilter set to " << postFilter_opt[0] << std::endl;</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">int</span> ncol=ceil(maxLRX-minULX)/dx_opt[0];<span class="comment">//number of columns in outputGrid</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">int</span> nrow=ceil(maxULY-minLRY)/dy_opt[0];<span class="comment">//number of rows in outputGrid</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//todo: multiple bands</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> nband=(composite_opt[0]==<span class="stringliteral">"profile"</span>)? nbin_opt[0] : 1;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(!output_opt.size()){</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> cerr << <span class="stringliteral">"Error: no output file defined"</span> << endl;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> exit(1);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> cout << <span class="stringliteral">"opening output file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> outputWriter.open(output_opt[0],ncol,nrow,nband,theType,oformat_opt[0],option_opt);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> outputWriter.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">//set projection</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">double</span> gt[6];</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> gt[0]=minULX;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> gt[1]=dx_opt[0];</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> gt[2]=0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> gt[3]=maxULY;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> gt[4]=0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> gt[5]=-dy_opt[0];</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> outputWriter.setGeoTransform(gt);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(projection_opt.size()){</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">string</span> projectionString=outputWriter.setProjectionProj4(projection_opt[0]);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> cout << <span class="stringliteral">"projection: "</span> << projectionString << endl;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(!outputWriter.isGeoRef())</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> cout << <span class="stringliteral">"Warning: output image "</span> << output_opt[0] << <span class="stringliteral">" is not georeferenced!"</span> << endl;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> outputWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> inputData.clear();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> inputData.resize(nrow,ncol);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <a class="code" href="classVector2d.html">Vector2d<double></a> outputData(nrow,ncol);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> outputData[irow][icol]=0;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> cout << <span class="stringliteral">"Reading "</span> << input_opt.size() << <span class="stringliteral">" point cloud files"</span> << endl;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iinput=0;iinput<input_opt.size();++iinput){</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <a class="code" href="classFileReaderLas.html">FileReaderLas</a> lasReader;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> lasReader.open(input_opt[iinput]);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> exit(1);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(lasReader.isCompressed())</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> cout << <span class="stringliteral">"Reading compressed point cloud "</span> << input_opt[iinput]<< endl;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> cout << <span class="stringliteral">"Reading uncompressed point cloud "</span> << input_opt[iinput] << endl;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">//set bounding filter</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// lasReader.addBoundsFilter(minULX,maxULY,maxLRX,minLRY);</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">//set returns filter</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(returns_opt.size())</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> lasReader.addReturnsFilter(returns_opt);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(classes_opt.size())</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> lasReader.addClassFilter(classes_opt);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> lasReader.setFilters();</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span>(attribute_opt[0]!=<span class="stringliteral">"z"</span>){</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> vector<boost::uint16_t> returnsVector;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> vector<string>::iterator ait=attribute_opt.begin();</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">while</span>(ait!=attribute_opt.end()){</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span>(*ait==<span class="stringliteral">"intensity"</span>){</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> std::cout << <span class="stringliteral">"writing intensity"</span> << std::endl;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> ++ait;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*ait==<span class="stringliteral">"return"</span>){</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> std::cout << <span class="stringliteral">"writing return number"</span> << std::endl;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> ++ait;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(*ait==<span class="stringliteral">"nreturn"</span>){</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> std::cout << <span class="stringliteral">"writing number of returns"</span> << std::endl;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> ++ait;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> attribute_opt.erase(ait);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> liblas::Point thePoint(&(lasReader.getHeader()));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">while</span>(lasReader.readNextPoint(thePoint)){</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ipoint)/totalPoints;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> cout << <span class="stringliteral">"reading point "</span> << ipoint << endl;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(thePoint.GetX()<minULX||thePoint.GetX()>=maxLRX||thePoint.GetY()>=maxULY||thePoint.GetY()<minLRY)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">if</span>((filter_opt[0]==<span class="stringliteral">"single"</span>)&&(thePoint.GetNumberOfReturns()!=1))</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span>((filter_opt[0]==<span class="stringliteral">"multiple"</span>)&&(thePoint.GetNumberOfReturns()<2))</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span>((filter_opt[0]==<span class="stringliteral">"last"</span>)&&(thePoint.GetReturnNumber()!=thePoint.GetNumberOfReturns()))</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span>((filter_opt[0]==<span class="stringliteral">"first"</span>)&&(thePoint.GetReturnNumber()!=1))</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">double</span> dcol,drow;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> outputWriter.geo2image(thePoint.GetX(),thePoint.GetY(),dcol,drow);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordtype">int</span> icol=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(dcol);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">int</span> irow=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(drow);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(irow<0||irow>=nrow){</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// cout << "Error: thePoint.GetX(),thePoint.GetY(),dcol,drow" << thePoint.GetX() << ", " << thePoint.GetY() << ", " << dcol << ", " << drow << endl;</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span>(icol<0||icol>=ncol){</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">// //test</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">// cout << "Error: thePoint.GetX(),thePoint.GetY(),dcol,drow" << thePoint.GetX() << ", " << thePoint.GetY() << ", " << dcol << ", " << drow << endl;</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> assert(irow>=0);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> assert(irow<nrow);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> assert(icol>=0);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> assert(icol<ncol);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"number"</span>)</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> outputData[irow][icol]+=1;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(attribute_opt[0]==<span class="stringliteral">"z"</span>)</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> inputData[irow][icol].push_back(thePoint.GetZ());</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(attribute_opt[0]==<span class="stringliteral">"intensity"</span>)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> inputData[irow][icol].push_back(thePoint.GetIntensity());</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(attribute_opt[0]==<span class="stringliteral">"return"</span>)</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> inputData[irow][icol].push_back(thePoint.GetReturnNumber());</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(attribute_opt[0]==<span class="stringliteral">"nreturn"</span>)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> inputData[irow][icol].push_back(thePoint.GetNumberOfReturns());</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> std::string errorString=<span class="stringliteral">"attribute not supported"</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">throw</span>(errorString);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> ++ipoint;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> std::cout << <span class="stringliteral">"number of points: "</span> << ipoint << std::endl;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> lasReader.close();</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> progress=1;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> std::cout << <span class="stringliteral">"processing LiDAR points"</span> << std::endl;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> progress=0;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment">//fill inputData in outputData</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">// if(composite_opt[0]=="profile"){</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">// assert(postFilter_opt[0]=="none");</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">// for(int iband=0;iband<nband;++iband)</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment">// outputProfile[iband].resize(nrow,ncol);</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"number"</span>)</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">continue</span>;<span class="comment">//outputData already set</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <a class="code" href="classVector2d.html">Vector2d<double></a> outputProfile(nband,ncol);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol){</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> std::vector<double> profile;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span>(!inputData[irow][icol].size())</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> outputData[irow][icol]=(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>((nodata_opt[0])));</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"min"</span>)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> outputData[irow][icol]=stat.mymin(inputData[irow][icol]);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"max"</span>)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> outputData[irow][icol]=stat.mymax(inputData[irow][icol]);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"median"</span>)</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> outputData[irow][icol]=stat.median(inputData[irow][icol]);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"percentile"</span>)</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> outputData[irow][icol]=stat.percentile(inputData[irow][icol],inputData[irow][icol].begin(),inputData[irow][icol].end(),percentile_opt[0]);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"mean"</span>)</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> outputData[irow][icol]=stat.mean(inputData[irow][icol]);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"sum"</span>)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> outputData[irow][icol]=stat.sum(inputData[irow][icol]);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"first"</span>)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> outputData[irow][icol]=inputData[irow][icol][0];</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"last"</span>)</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> outputData[irow][icol]=inputData[irow][icol].back();</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"profile"</span>){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span>(inputData[irow][icol].size()<2){</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> outputProfile[iband][icol]=static_cast<double>(nodata_opt[0]);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> stat.minmax(inputData[irow][icol],inputData[irow][icol].begin(),inputData[irow][icol].end(),min,max);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> std::cout << <span class="stringliteral">"min,max: "</span> << min << <span class="stringliteral">","</span> << max << std::endl;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(max>min){</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> stat.percentiles(inputData[irow][icol],inputData[irow][icol].begin(),inputData[irow][icol].end(),profile,nband,min,max);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> assert(profile.size()==nband);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> outputProfile[iband][icol]=profile[iband];</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband)</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> outputProfile[iband][icol]=max;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> std::cout << <span class="stringliteral">"Error: composite_opt "</span> << composite_opt[0] << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> exit(2);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>(composite_opt[0]==<span class="stringliteral">"profile"</span>){</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="comment">// assert(outputProfile[iband].size()==outputWriter.nrOfRow());</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> assert(outputProfile[iband].size()==outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> outputWriter.writeData(outputProfile[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> exit(1);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow)/outputWriter.nrOfRow();</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> progress=1;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> inputData.clear();<span class="comment">//clean up memory</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">//apply post filter</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment">// std::cout << "Applying post processing filter: " << postFilter_opt[0] << std::endl;</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">// if(postFilter_opt[0]=="etew_min"){</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">// if(composite_opt[0]!="min")</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">// std::cout << "Warning: composite option is not set to min!" << std::endl;</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment">// //Elevation Threshold with Expand Window (ETEW) Filter (p.73 frmo Airborne LIDAR Data Processing and Analysis Tools ALDPAT 1.0)</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment">// //first iteration is performed assuming only minima are selected using options -fir all -comp min</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment">// unsigned long int nchange=1;</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// //increase cells and thresholds until no points from the previous iteration are discarded.</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment">// int dimx=dimx_opt[0];</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment">// int dimy=dimy_opt[0];</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment">// filter2d::Filter2d morphFilter;</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment">// // morphFilter.setNoValue(0);</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">// Vector2d<float> currentOutput=outputData;</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment">// int iteration=1;</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="comment">// while(nchange&&iteration<=maxIter_opt[0]){</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="comment">// double hThreshold=maxSlope_opt[0]*dimx;</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">// Vector2d<float> newOutput;</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment">// nchange=morphFilter.morphology(currentOutput,newOutput,"erode",dimx,dimy,disc_opt[0],hThreshold);</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// currentOutput=newOutput;</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment">// dimx+=2;//change from theory: originally double cellCize</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment">// dimy+=2;//change from theory: originally double cellCize</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment">// std::cout << "iteration " << iteration << ": " << nchange << " pixels changed" << std::endl;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment">// ++iteration;</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="comment">// outputData=currentOutput;</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="comment">// } </span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// else if(postFilter_opt[0]=="promorph"||postFilter_opt[0]=="bunting"){</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="comment">// if(composite_opt[0]!="min")</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">// std::cout << "Warning: composite option is not set to min!" << std::endl;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">// assert(hThreshold_opt.size()>1);</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment">// //Progressive morphological filter tgrs2003_zhang vol41 pp 872-882</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment">// //first iteration is performed assuming only minima are selected using options -fir all -comp min</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">// //increase cells and thresholds until no points from the previous iteration are discarded.</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">// int dimx=dimx_opt[0];</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment">// int dimy=dimy_opt[0];</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// filter2d::Filter2d theFilter;</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="comment">// // theFilter.setNoValue(0);</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment">// Vector2d<float> currentOutput=outputData;</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment">// double hThreshold=hThreshold_opt[0];</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="comment">// int iteration=1;</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment">// while(iteration<=maxIter_opt[0]){</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="comment">// std::cout << "iteration " << iteration << " with window size " << dimx << " and dh_max: " << hThreshold << std::endl;</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="comment">// Vector2d<float> newOutput;</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">// theFilter.morphology(outputData,currentOutput,"erode",dimx,dimy,disc_opt[0],hThreshold);</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="comment">// theFilter.morphology(currentOutput,outputData,"dilate",dimx,dimy,disc_opt[0],hThreshold);</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment">// if(postFilter_opt[0]=="bunting"){</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">// theFilter.doit(outputData,currentOutput,"median",dimx,dimy,1,disc_opt[0]);</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="comment">// outputData=currentOutput;</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="comment">// catch(std::string errorString){</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment">// cout << errorString << endl;</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">// int newdimx=(dimx==1)? 3: 2*(dimx-1)+1;</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="comment">// int newdimy=(dimx==1)? 3: 2*(dimy-1)+1;//from PE&RS vol 71 pp313-324</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">// hThreshold=hThreshold_opt[0]+maxSlope_opt[0]*(newdimx-dimx)*dx_opt[0];</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment">// dimx=newdimx;</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// dimy=newdimy;</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// if(hThreshold>hThreshold_opt[1])</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// hThreshold=hThreshold_opt[1];</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">// ++iteration;</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment">// outputData=currentOutput;</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment">// } </span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment">// else if(postFilter_opt[0]=="open"){</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment">// if(composite_opt[0]!="min")</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="comment">// std::cout << "Warning: composite option is not set to min!" << std::endl;</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">// filter2d::Filter2d morphFilter;</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// // morphFilter.setNoValue(0);</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// Vector2d<float> filterInput=outputData;</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// morphFilter.morphology(outputData,filterInput,"erode",dimx_opt[0],dimy_opt[0],disc_opt[0],maxSlope_opt[0]);</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// morphFilter.morphology(filterInput,outputData,"dilate",dimx_opt[0],dimy_opt[0],disc_opt[0],maxSlope_opt[0]);</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// catch(std::string errorString){</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// cout << errorString << endl;</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">// else if(postFilter_opt[0]=="close"){</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="comment">// if(composite_opt[0]!="max")</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">// std::cout << "Warning: composite option is not set to max!" << std::endl;</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="comment">// filter2d::Filter2d morphFilter;</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="comment">// // morphFilter.setNoValue(0);</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment">// Vector2d<float> filterInput=outputData;</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">// morphFilter.morphology(outputData,filterInput,"dilate",dimx_opt[0],dimy_opt[0],disc_opt[0],maxSlope_opt[0]);</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">// morphFilter.morphology(filterInput,outputData,"erode",dimx_opt[0],dimy_opt[0],disc_opt[0],maxSlope_opt[0]);</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// catch(std::string errorString){</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// cout << errorString << endl;</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">if</span>(composite_opt[0]!=<span class="stringliteral">"profile"</span>){</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment">//write output file</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> std::cout << <span class="stringliteral">"writing output raster file"</span> << std::endl;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> progress=0;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<nrow;++irow){</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> assert(outputData.size()==outputWriter.nrOfRow());</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> assert(outputData[0].size()==outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> outputWriter.writeData(outputData[irow],GDT_Float64,irow,0);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">catch</span>(std::string errorString){</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> cout << errorString << endl;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> exit(1);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow)/outputWriter.nrOfRow();</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> }</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> progress=1;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> std::cout << <span class="stringliteral">"closing lasReader"</span> << std::endl;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> outputWriter.close();</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classFileReaderLas_html"><div class="ttname"><a href="classFileReaderLas.html">FileReaderLas</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderLas_8h_source.html#l00039">FileReaderLas.h:39</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pklas2img_8py_source.html b/doc/html/pklas2img_8py_source.html
new file mode 100644
index 0000000..169e72f
--- /dev/null
+++ b/doc/html/pklas2img_8py_source.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pklas2img.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pklas2img.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pklas2img.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterFile</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classqgis_1_1pklas2img_1_1pklas2img.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html">pklas2img</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ATTRIBUTE_OPTIONS = [<span class="stringliteral">"z"</span>,<span class="stringliteral">"intensity"</span>, <span class="stringliteral">"return"</span>, <span class="stringliteral">"nreturn"</span>]</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> COMPOSITE_OPTIONS = [<span class="stringliteral">"last"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"median"</span>, <span class="stringliteral">"mean"</span>, <span class="stringliteral">"sum"</span>, <span class="stringliteral">"first"</span>, <span class="strin [...]
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> FILTER_OPTIONS = [<span class="stringliteral">"all"</span>,<span class="stringliteral">"first"</span>,<span class="stringliteral">"last"</span>,<span class="stringliteral">"single"</span>,<span class="stringliteral">"multiple"</span>]</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> ATTRIBUTE = <span class="stringliteral">"ATTRIBUTE"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> COMPOSITE = <span class="stringliteral">"COMPOSITE"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILTER = <span class="stringliteral">"FILTER"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> PERCENTILE = <span class="stringliteral">"PERCENTILE"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> DX = <span class="stringliteral">"DX"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> DY = <span class="stringliteral">"DY"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"># PROJWIN = 'PROJWIN'</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> TYPE = [<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float64'</span>,<span class="stringliteral">'CInt16& [...]
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> <span class="stringliteral">"pklas2img"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#aa41f6aa59efd28521fd49a8f2740917d">name</a> = <span class="stringliteral">"(Linux only) Create raster dataset from LAS(Z) data point cloud(s)"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a5504eac2d342bdae408e9ce3d51a6a6a">group</a> = <span class="stringliteral">"[pktools] LiDAR"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterFile(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a7b57ce9958d387ac60e2564b468c9121">INPUT</a>, <span class="stringliteral">"Input LAS(Z) data set(s)"</span>, <span class="keyword">False</span>, <span class="keyword">False</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a130c1acc3e9b615079634fd9685b8dec">ATTRIBUTE</a>,<span class="stringliteral">"name of the point attribute to select"</span>,self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a0409e973a7b8cdf6057c607a998354a5">ATTRIBUTE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ae0c885711f536f96a5c63d535f1bb878">COMPOSITE</a>,<span class="stringliteral">"composite for multiple points in cell"</span>,self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ad00b69bd446875f229cadeb69ac6a8f7">COMPOSITE_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a63d7f043f1912491e2e34857ac4b498a">FILTER</a>,<span class="stringliteral">"filter las points"</span>,self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ac7ef9219de8e84423760309190deb56e">FILTER_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a6b94eb994fa787dc2a90c4df618b7192">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a60a126c8d52d3911d75f9e67231e3730">RTYPE</a>, <span class="stringliteral">'Output raster type'</span>, self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ab2c9b209aebe166c5202551470dcf7f0">TYPE</a>, 0))</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a320a11359d403b61b67cdf113770723e">PERCENTILE</a>, <span class="stringliteral">"Percentile value used for rule percentile"</span>,0.0,100.0,95))</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a6aa0d7c47f3a6c8b9eb4375049e69824">DX</a>, <span class="stringliteral">"Output resolution in x"</span>,0.0,<span class="keywordtype">None</span>,1.0))</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a165ee10778d2f0bdbe5abfae21f36d8f">DY</a>, <span class="stringliteral">"Output resolution in y"</span>,0.0,<span class="keywordtype">None</span>,1.0))</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"># self.addParameter(ParameterExtent(self.PROJWIN,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"># 'Georeferenced boundingbox'))</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a9cbf569ff7b068dade13fb6dc0ede553">NODATA</a>, <span class="stringliteral">"nodata value to put in image"</span>,0,<span class="keywordtype">None</span>,0))</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a8cf9933f7aca1f1ace4957cbde0f958e">EXTRA</a>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a32b88cd9bfc7602df94418d953cc44a7">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands = [cliPath]</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a7b57ce9958d387ac60e2564b468c9121">INPUT</a>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> inputFiles = input.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span> inputFile <span class="keywordflow">in</span> inputFiles:</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> commands.append(<span class="stringliteral">'"'</span> + inputFile + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ab2c9b209aebe166c5202551470dcf7f0">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a60a126c8d52d3911d75f9e67231e3730">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ab2c9b209aebe166c5202551470dcf7f0">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a60a126c8d52d3911d75f9e67231e3730">RTYPE</a>)])</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a6b94eb994fa787dc2a90c4df618b7192">OUTPUT</a>)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> commands.append(<span class="stringliteral">"-n"</span>)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> commands.append(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a0409e973a7b8cdf6057c607a998354a5">ATTRIBUTE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a130c1acc3e9b615079634fd9685b8dec">ATTRIBUTE</a>)])</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(<span class="stringliteral">"-comp"</span>)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> commands.append(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ad00b69bd446875f229cadeb69ac6a8f7">COMPOSITE_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ae0c885711f536f96a5c63d535f1bb878">COMPOSITE</a>)])</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> commands.append(<span class="stringliteral">"-fir"</span>)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#ac7ef9219de8e84423760309190deb56e">FILTER_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a63d7f043f1912491e2e34857ac4b498a">FILTER</a>)])</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a6aa0d7c47f3a6c8b9eb4375049e69824">DX</a>) != 0:</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> commands.append(<span class="stringliteral">"-dx"</span>)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a6aa0d7c47f3a6c8b9eb4375049e69824">DX</a>)))</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a165ee10778d2f0bdbe5abfae21f36d8f">DY</a>) != 0:</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> commands.append(<span class="stringliteral">"-dy"</span>)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a165ee10778d2f0bdbe5abfae21f36d8f">DY</a>)))</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">#projwin = str(self.getParameterValue(self.PROJWIN))</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"># regionCoords = projwin.split(',')</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"># commands.append('-ulx')</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"># commands.append(regionCoords[0])</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"># commands.append('-uly')</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"># commands.append(regionCoords[3])</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"># commands.append('-lrx')</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"># commands.append(regionCoords[1])</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"># commands.append('-lry')</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"># commands.append(regionCoords[2])</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a9cbf569ff7b068dade13fb6dc0ede553">NODATA</a>)))</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pklas2img_1_1pklas2img.html#a8cf9933f7aca1f1ace4957cbde0f958e">EXTRA</a>))</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> commands.append(extra)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a6aa0d7c47f3a6c8b9eb4375049e69824"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a6aa0d7c47f3a6c8b9eb4375049e69824">qgis.pklas2img.pklas2img.DX</a></div><div class="ttdeci">string DX</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00052">pklas2img.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a63d7f043f1912491e2e34857ac4b498a"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a63d7f043f1912491e2e34857ac4b498a">qgis.pklas2img.pklas2img.FILTER</a></div><div class="ttdeci">string FILTER</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00049">pklas2img.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a60a126c8d52d3911d75f9e67231e3730"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a60a126c8d52d3911d75f9e67231e3730">qgis.pklas2img.pklas2img.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00056">pklas2img.py:56</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a7b57ce9958d387ac60e2564b468c9121"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a7b57ce9958d387ac60e2564b468c9121">qgis.pklas2img.pklas2img.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00041">pklas2img.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_ad00b69bd446875f229cadeb69ac6a8f7"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#ad00b69bd446875f229cadeb69ac6a8f7">qgis.pklas2img.pklas2img.COMPOSITE_OPTIONS</a></div><div class="ttdeci">list COMPOSITE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00044">pklas2img.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html">qgis.pklas2img.pklas2img</a></div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00039">pklas2img.py:39</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a320a11359d403b61b67cdf113770723e"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a320a11359d403b61b67cdf113770723e">qgis.pklas2img.pklas2img.PERCENTILE</a></div><div class="ttdeci">string PERCENTILE</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00051">pklas2img.py:51</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a5504eac2d342bdae408e9ce3d51a6a6a"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a5504eac2d342bdae408e9ce3d51a6a6a">qgis.pklas2img.pklas2img.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00065">pklas2img.py:65</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_aa41f6aa59efd28521fd49a8f2740917d"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#aa41f6aa59efd28521fd49a8f2740917d">qgis.pklas2img.pklas2img.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00064">pklas2img.py:64</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a32b88cd9bfc7602df94418d953cc44a7"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a32b88cd9bfc7602df94418d953cc44a7">qgis.pklas2img.pklas2img.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00060">pklas2img.py:60</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a165ee10778d2f0bdbe5abfae21f36d8f"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a165ee10778d2f0bdbe5abfae21f36d8f">qgis.pklas2img.pklas2img.DY</a></div><div class="ttdeci">string DY</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00053">pklas2img.py:53</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a130c1acc3e9b615079634fd9685b8dec"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a130c1acc3e9b615079634fd9685b8dec">qgis.pklas2img.pklas2img.ATTRIBUTE</a></div><div class="ttdeci">string ATTRIBUTE</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00047">pklas2img.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a8cf9933f7aca1f1ace4957cbde0f958e"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a8cf9933f7aca1f1ace4957cbde0f958e">qgis.pklas2img.pklas2img.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00058">pklas2img.py:58</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a0409e973a7b8cdf6057c607a998354a5"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a0409e973a7b8cdf6057c607a998354a5">qgis.pklas2img.pklas2img.ATTRIBUTE_OPTIONS</a></div><div class="ttdeci">list ATTRIBUTE_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00043">pklas2img.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_ae0c885711f536f96a5c63d535f1bb878"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#ae0c885711f536f96a5c63d535f1bb878">qgis.pklas2img.pklas2img.COMPOSITE</a></div><div class="ttdeci">string COMPOSITE</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00048">pklas2img.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_ab2c9b209aebe166c5202551470dcf7f0"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#ab2c9b209aebe166c5202551470dcf7f0">qgis.pklas2img.pklas2img.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00057">pklas2img.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a6b94eb994fa787dc2a90c4df618b7192"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a6b94eb994fa787dc2a90c4df618b7192">qgis.pklas2img.pklas2img.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00042">pklas2img.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_ac7ef9219de8e84423760309190deb56e"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#ac7ef9219de8e84423760309190deb56e">qgis.pklas2img.pklas2img.FILTER_OPTIONS</a></div><div class="ttdeci">list FILTER_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00045">pklas2img.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pklas2img_1_1pklas2img_html_a9cbf569ff7b068dade13fb6dc0ede553"><div class="ttname"><a href="classqgis_1_1pklas2img_1_1pklas2img.html#a9cbf569ff7b068dade13fb6dc0ede553">qgis.pklas2img.pklas2img.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pklas2img_8py_source.html#l00055">pklas2img.py:55</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkndvi_8cc_source.html b/doc/html/pkndvi_8cc_source.html
new file mode 100644
index 0000000..d9a004e
--- /dev/null
+++ b/doc/html/pkndvi_8cc_source.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/not_used/pkndvi.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li><li class="navelem"><a class="el" href="dir_e28b2035b152bb51229fe7a0fca4e376.html">not_used</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkndvi.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkndvi.cc: program to calculate vegetation index image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> ***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">//command line options</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"input image file"</span>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>,<span class="stringliteral">"output"</span>,<span class="stringliteral">"output image file containing ndvi"</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Bands to be used for vegetation index (see rule option)"</span>, 0);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> rule_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"rule"</span>, <span class="stringliteral">"Rule for index. ndvi (b1-b0)/(b1+b0), ndvi2 (b1-b0)/(b2+b3), gvmi (b0+0.1)-(b1+0.02))/((b0+0.1)+(b1+0.02))), vari (b1-b2)/(b1+b2-b0), osavi, mcari, tcari, diff (b1-b0), scale, ratio."</span>, [...]
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> invalid_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"invalid"</span>, <span class="stringliteral">"Mask value where image is invalid."</span>, 0);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Flag value to put in image if not valid (0)"</span>, 0);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> min_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"minimum value for ndvi after scaling (set all values smaller than min to min)"</span>, 0);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> max_opt(<span class="stringliteral">"max"</span>, <span class="stringliteral">"max"</span>, <span class="stringliteral">"maximum value for ndvi after scaling (limit all values to max)"</span>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> eps_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"eps"</span>, <span class="stringliteral">"epsilon, contraint division by zero"</span>, 0);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_scale_opt(<span class="stringliteral">"src_s"</span>, <span class="stringliteral">"src_scale"</span>, <span class="stringliteral">"scale used for input, scale[1] is used for output: DN=scale[1]*ndvi+offset[1]"</span>, 1);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dst_scale_opt(<span class="stringliteral">"dst_s"</span>, <span class="stringliteral">"src_scale"</span>, <span class="stringliteral">"scale used for output: DN=dst_s*ndvi+dst_offset"</span>, 1);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_offset_opt(<span class="stringliteral">"src_o"</span>, <span class="stringliteral">"src_offset"</span>, <span class="stringliteral">"offset used for input"</span>, 0);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> dst_offset_opt(<span class="stringliteral">"dst_o"</span>, <span class="stringliteral">"dst_offset"</span>, <span class="stringliteral">"offset is used for output: DN=dst_s*ndvi+dst_offset"</span>, 0);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringlitera [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>, <span class="stringliteral">"GTiff"</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> rule_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> invalid_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> eps_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> src_scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> src_offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> dst_scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> dst_offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> exit(0);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> exit(0);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> exit(0);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">int</span> reqBand=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"scale"</span>)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> reqBand=1;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"vari"</span>||rule_opt[0]==<span class="stringliteral">"mcari"</span>||rule_opt[0]==<span class="stringliteral">"tcari"</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> reqBand=3;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"ndvi2"</span>)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> reqBand=4;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> reqBand=2;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">while</span>(band_opt.size()<reqBand)<span class="comment">//bands can be explicitly provided by user or</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> band_opt.push_back(band_opt[0]);<span class="comment">//default is to use band 0 for each input</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> std::cout << band_opt;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//todo: a bit stupid to duplicate input reader, but it works</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">while</span>(input_opt.size()<reqBand)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> input_opt.push_back(input_opt[0]);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> std::cout << input_opt;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> vector<ImgReaderGdal> inputReader(reqBand);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<reqBand;++ifile){</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> inputReader[ifile].open(input_opt[ifile]);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> assert(inputReader[ifile].nrOfBand()>band_opt[ifile]);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> cout << <span class="stringliteral">"opening output image file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> cout << <span class="stringliteral">"data type: "</span> << otype_opt[0] << endl;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">//create output image with user defined data type </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> theType=inputReader[0].getDataType();</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> cout << endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> cout << <span class="stringliteral">"opening output image file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> theInterleave+=inputReader[0].getInterleave();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> outputWriter.open(output_opt[0],inputReader[0].nrOfCol(),inputReader[0].nrOfRow(),1,theType,oformat_opt[0],option_opt);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> outputWriter.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> outputWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">//if input image is georeferenced, copy projection info to output image</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> outputWriter.setProjection(inputReader[0].getProjection());</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> inputReader[0].getBoundingBox(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> outputWriter.copyGeoTransform(inputReader[0]);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> outputWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (inputReader[0].getColorTable()!=NULL)<span class="comment">//copy colorTable from first input image</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> outputWriter.setColorTable(inputReader[0].getColorTable());</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(reqBand,inputReader[0].nrOfCol());</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> vector<double> lineOutput(outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">float</span> progress=0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">for</span>(irow=0;irow<inputReader[0].nrOfRow();++irow){</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//read line in lineInput buffer</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"scale"</span>)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"vari"</span>||rule_opt[0]==<span class="stringliteral">"tcari"</span>){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> inputReader[2].readData(lineInput[2],GDT_Float64,irow,band_opt[2]);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"ndvi2"</span>){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> inputReader[2].readData(lineInput[2],GDT_Float64,irow,band_opt[2]);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> inputReader[3].readData(lineInput[3],GDT_Float64,irow,band_opt[3]);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> exit(1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> assert(invalid_opt.size()==nodata_opt.size());</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">for</span>(icol=0;icol<inputReader[0].nrOfCol();++icol){</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">double</span> ndvi=min_opt[0];</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordtype">double</span> flagValue=nodata_opt[0];</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">bool</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iflag=0;valid&&iflag<invalid_opt.size();++iflag){</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<lineInput.size();++iband){</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(lineInput[iband][icol]==invalid_opt[iflag]){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> flagValue=nodata_opt[iflag];</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">double</span> denom;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">double</span> nom;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(valid){</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"ndvi"</span>){</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">//Example of indices addressed by ndvi:</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">//structural indices</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//NDVI (Rouse1974): b0=b_680, b1=b_800</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">//Chlorophyll indices:</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">//Normalized Phaeophytinization index (NPQI Barnes1992): b0=R_435, b1=R_415</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">//Photochemical Reflectance index (PRI1 Gamon1992): b0=R_567, b1=R_528</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">//Photochemical Reflectance index (PRI2 Gamon1992): b0=R_570, b1=R_531</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">//Normalized Phaeophytinization index (NPQI Barnes1992): b0=R_435, b1=R_415</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">//Normalized Pigment Chlorophyll index (NPCI Penuelas1994): b0=R_430, b1=R_680</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">//Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//Lichtenthaler index 1 (Lic1 Lichtenthaler1996): b0=R_680, b2=R_800</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"ndvi2"</span>){<span class="comment">//normalized difference with different wavelengths used in denom and nom</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">//Example of indices addressed by ndvi2</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">//Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800, b2=R_650, b=R_800</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">//Vogelmann index 2 (Vog2 Vogelmann1993): b0=R_747, b1=R_735, b2=R_715, b3=R_726</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//Vogelmann index 3 (Vog3 Vogelmann1993): b0=R_747, b1=R_734, b2=R_715, b3=R_720</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> nom=(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[3][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"gvmi"</span>){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> denom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)-((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> nom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)+((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"vari"</span>){</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"osavi"</span>){<span class="comment">//structural index (Rondeaux1996): //b0=R_670, b1=R_800</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> denom=(1.0+0.16)*(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.16;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"mcari"</span>){<span class="comment">//chlorophyll index (Daughtry2000): b0=R_550, b1=R_670, b2=R_700</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> denom=((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]))*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"tcari"</span>){<span class="comment">//chlorophyll index (Haboudane2002): b0=R_550, b1=R_670, B2=R_700</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> denom=3*((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0])*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"diff"</span>){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> nom=1.0;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"scale"</span>){</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> nom=1.0;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rule_opt[0]==<span class="stringliteral">"ratio"</span>){</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">//Examples of indices addressed by ratio:</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">//structural indices:</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">//Simple Ratio Index (SR Jordan1969, Rouse1974): b0=R_NIR/R_RED</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">//chlorophyll indices:</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">//Greenness Index: b0=R_554, b1=R_677; </span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">//Zarco-Tejada&Miller (Zarco2001): b0=R_750,b1=R_710</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">//Simple Red Pigment Index (SRPI Penuelas1995): b0=R_430, b1=R_680</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">//Carter index 1 (Ctr1 Carter1994): b0=R_695, b1=R_420</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">//Carter index 2 (Ctr2 Carter1994): b0=R_695, b1=R_760</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">//Lichtenthaler index 2 (Lic2 Lichtenthaler1996): b0=R_440, b2=R_690</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">//Vogelmann index 1 (Vog1 Vogelmann1993): b0=R_740, b1=R_720</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">//Gitelson and Merzlyak 1 (GM1 Gitelson1997): b0=R_750 b1=R_550</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">//Gitelson and Merzlyak (GM2 Gitelson1997) b0=R_750 b1=R_700</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::cout << <span class="stringliteral">"Error: rule "</span> << rule_opt[0] << <span class="stringliteral">" not supported"</span> << std::endl;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> exit(1);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span>(nom>eps_opt[0]||nom<-eps_opt[0])</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> ndvi=denom/nom;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">switch</span>(theType){</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">case</span>(GDT_Byte):</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">case</span>(GDT_Int16):</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">case</span>(GDT_UInt16):</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">case</span>(GDT_UInt32):</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">case</span>(GDT_Int32):</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> lineOutput[icol]=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(0.5+ndvi*dst_scale_opt[0]+dst_offset_opt[0]);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> lineOutput[icol]=ndvi*dst_scale_opt[0]+dst_offset_opt[0];</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(lineOutput[icol]<min_opt[0])</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> lineOutput[icol]=min_opt[0];</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(max_opt.size()){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span>(lineOutput[icol]>max_opt[0])</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> lineOutput[icol]=max_opt[0];</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> lineOutput[icol]=flagValue;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">//write buffer lineOutput to output file</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> outputWriter.writeData(lineOutput,GDT_Float64,irow);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> exit(1);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">//progress bar</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/outputWriter.nrOfRow();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<inputReader.size();++ifile)</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> inputReader[ifile].close();</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> outputWriter.close();</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkoptsvm.html b/doc/html/pkoptsvm.html
new file mode 100644
index 0000000..5417a0e
--- /dev/null
+++ b/doc/html/pkoptsvm.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkoptsvm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkoptsvm </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to optimize parameters for support vector machine classifier pksvm </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkoptsvm -t training </code></p>
+<p><code></code></p>
+<p><code> Options: [-cc startvalue -cc endvalue] [-g startvalue -g endvalue] [-stepcc stepsize] [-stepg stepsize]</code></p>
+<p><code> Advanced options: </code></p>
+<h1><a class="anchor" id="pkoptsvm_description"></a>
+Description</h1>
+<p>The support vector machine depends on several parameters. Ideally, these parameters should be optimized for each classification problem. In case of a radial basis kernel function, two important parameters are <em></em>{cost} and <em></em>{gamma}. The utility pkoptsvm can optimize these two parameters, based on an accuracy assessment (the Kappa value). If an input test set (-i) is provided, it is used for the accuracy assessment. If not, the accuracy assessment is based on a cross vali [...]
+<p>The optimization routine uses a grid search. The initial and final values of the parameters can be set with -cc startvalue -cc endvalue and -g startvalue -g endvalue for cost and gamma respectively. The search uses a multiplicative step for iterating the parameters (set with the options -stepcc and -stepg). An often used approach is to define a relatively large multiplicative step first (e.g 10) to obtain an initial estimate for both parameters. The estimate can then be optimized by d [...]
+<h1><a class="anchor" id="pkoptsvm_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option). </td></tr>
+<tr>
+<td>cc </td><td>ccost </td><td>float </td><td>1 </td><td>min and max boundaries the parameter C of C-SVC, epsilon-SVR, and nu-SVR (optional: initial value) </td></tr>
+<tr>
+<td>g </td><td>gamma </td><td>float </td><td>0 </td><td>min max boundaries for gamma in kernel function (optional: initial value) </td></tr>
+<tr>
+<td>stepcc </td><td>stepcc </td><td>double </td><td>2 </td><td>multiplicative step for ccost in GRID search </td></tr>
+<tr>
+<td>stepg </td><td>stepg </td><td>double </td><td>2 </td><td>multiplicative step for gamma in GRID search </td></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input test vector file </td></tr>
+<tr>
+<td>tln </td><td>tln </td><td>std::string </td><td></td><td>training layer name(s) </td></tr>
+<tr>
+<td>label </td><td>label </td><td>std::string </td><td>label </td><td>identifier for class label in training vector file. </td></tr>
+<tr>
+<td>bal </td><td>balance </td><td>unsigned int </td><td>0 </td><td>balance the input data to this number of samples for each class </td></tr>
+<tr>
+<td>random </td><td>random </td><td>bool </td><td>true </td><td>in case of balance, randomize input data </td></tr>
+<tr>
+<td>min </td><td>min </td><td>int </td><td>0 </td><td>if number of training pixels is less then min, do not take this class into account </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td></td><td>band index (starting from 0, either use band option or use start to end) </td></tr>
+<tr>
+<td>s </td><td>start </td><td>double </td><td>0 </td><td>start band sequence number </td></tr>
+<tr>
+<td>e </td><td>end </td><td>double </td><td>0 </td><td>end band sequence number (set to 0 to include all bands) </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td>svmt </td><td>svmtype </td><td>std::string </td><td>C_SVC </td><td>type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) </td></tr>
+<tr>
+<td>kt </td><td>kerneltype </td><td>std::string </td><td>radial </td><td>type of kernel function (linear,polynomial,radial,sigmoid) </td></tr>
+<tr>
+<td>kd </td><td>kd </td><td>unsigned short </td><td>3 </td><td>degree in kernel function </td></tr>
+<tr>
+<td>c0 </td><td>coef0 </td><td>float </td><td>0 </td><td>coef0 in kernel function </td></tr>
+<tr>
+<td>nu </td><td>nu </td><td>float </td><td>0.5 </td><td>the parameter nu of nu-SVC, one-class SVM, and nu-SVR </td></tr>
+<tr>
+<td>eloss </td><td>eloss </td><td>float </td><td>0.1 </td><td>the epsilon in loss function of epsilon-SVR </td></tr>
+<tr>
+<td>cache </td><td>cache </td><td>int </td><td>100 </td><td>cache memory size in MB </td></tr>
+<tr>
+<td>etol </td><td>etol </td><td>float </td><td>0.001 </td><td>the tolerance of termination criterion </td></tr>
+<tr>
+<td>shrink </td><td>shrink </td><td>bool </td><td>false </td><td>whether to use the shrinking heuristics </td></tr>
+<tr>
+<td>pe </td><td>probest </td><td>bool </td><td>true </td><td>whether to train a SVC or SVR model for probability estimates </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>2 </td><td>n-fold cross validation mode </td></tr>
+<tr>
+<td>cf </td><td>cf </td><td>bool </td><td>false </td><td>use Overall Accuracy instead of kappa </td></tr>
+<tr>
+<td>maxit </td><td>maxit </td><td>unsigned int </td><td>500 </td><td>maximum number of iterations </td></tr>
+<tr>
+<td>tol </td><td>tolerance </td><td>double </td><td>0.0001 </td><td>relative tolerance for stopping criterion </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>list of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>list of class values (use same order as in class opt). </td></tr>
+</table>
+Usage: pkoptsvm -t training </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkoptsvm_8cc_source.html b/doc/html/pkoptsvm_8cc_source.html
new file mode 100644
index 0000000..48e70fc
--- /dev/null
+++ b/doc/html/pkoptsvm_8cc_source.html
@@ -0,0 +1,680 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkoptsvm.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkoptsvm.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkoptsvm.cc: program to optimize parameters for support vector machine classifier pksvm</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <sstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <nlopt.hpp></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "algorithms/FeatureSelector.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "algorithms/OptFactory.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "algorithms/CostFactorySVM.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "algorithms/svm.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#define Malloc(type,n) (type *)malloc((n)*sizeof(type))</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"></span> <span class="comment">//declare objective function</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">double</span> objFunction(<span class="keyword">const</span> std::vector<double> &x, std::vector<double> &grad, <span class="keywordtype">void</span> *my_func_data);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//global parameters used in objective function</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> map<string,short> classValueMap;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> vector<std::string> nameVector;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> vector<unsigned int> nctraining;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> vector<unsigned int> nctest;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> svm_type_opt(<span class="stringliteral">"svmt"</span>, <span class="stringliteral">"svmtype"</span>, <span class="stringliteral">"type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR)"</span>,<span class="stringliteral">"C_SVC"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> kernel_type_opt(<span class="stringliteral">"kt"</span>, <span class="stringliteral">"kerneltype"</span>, <span class="stringliteral">"type of kernel function (linear,polynomial,radial,sigmoid) "</span>,<span class="stringliteral">"radial"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> kernel_degree_opt(<span class="stringliteral">"kd"</span>, <span class="stringliteral">"kd"</span>, <span class="stringliteral">"degree in kernel function"</span>,3);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> coef0_opt(<span class="stringliteral">"c0"</span>, <span class="stringliteral">"coef0"</span>, <span class="stringliteral">"coef0 in kernel function"</span>,0);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> nu_opt(<span class="stringliteral">"nu"</span>, <span class="stringliteral">"nu"</span>, <span class="stringliteral">"the parameter nu of nu-SVC, one-class SVM, and nu-SVR"</span>,0.5);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_loss_opt(<span class="stringliteral">"eloss"</span>, <span class="stringliteral">"eloss"</span>, <span class="stringliteral">"the epsilon in loss function of epsilon-SVR"</span>,0.1);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> cache_opt(<span class="stringliteral">"cache"</span>, <span class="stringliteral">"cache"</span>, <span class="stringliteral">"cache memory size in MB"</span>,100);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_tol_opt(<span class="stringliteral">"etol"</span>, <span class="stringliteral">"etol"</span>, <span class="stringliteral">"the tolerance of termination criterion"</span>,0.001);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> shrinking_opt(<span class="stringliteral">"shrink"</span>, <span class="stringliteral">"shrink"</span>, <span class="stringliteral">"whether to use the shrinking heuristics"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> prob_est_opt(<span class="stringliteral">"pe"</span>, <span class="stringliteral">"probest"</span>, <span class="stringliteral">"whether to train a SVC or SVR model for probability estimates"</span>,<span class="keyword">true</span>,2);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> costfunction_opt(<span class="stringliteral">"cf"</span>, <span class="stringliteral">"cf"</span>, <span class="stringliteral">"use Overall Accuracy instead of kappa"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// Optionpk<bool> weight_opt("wi", "wi", "set the parameter C of class i to weight*C, for C-SVC",true);</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"n-fold cross validation mode"</span>,2);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"list of class names."</span>); </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"list of class values (use same order as in class opt)."</span>); </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"use 1 to output intermediate results for plotting"</span>,0,2);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">double</span> objFunction(<span class="keyword">const</span> std::vector<double> &x, std::vector<double> &grad, <span class="keywordtype">void</span> *my_func_data){</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> assert(grad.empty());</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> vector<Vector2d<float> > *tf=<span class="keyword">reinterpret_cast<</span>vector<Vector2d<float> <span class="keyword">></span>*> (my_func_data);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">float</span> ccost=x[0];</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">float</span> gamma=x[1];</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">double</span> error=1.0/epsilon_tol_opt[0];</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">double</span> kappa=1.0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">double</span> oa=1.0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classCostFactorySVM.html">CostFactorySVM</a> costfactory(svm_type_opt[0], kernel_type_opt[0], kernel_degree_opt[0], gamma, coef0_opt[0], ccost, nu_opt[0], epsilon_loss_opt[0], cache_opt[0], epsilon_tol_opt[0], shrinking_opt[0], prob_est_opt[0], cv_opt[0], verbose_opt[0]);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> assert(tf->size());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// if(nctest>0)</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// costfactory.setCv(0);</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> costfactory.setCv(cv_opt[0]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> costfactory.setClassValueMap(classname_opt[iclass],classvalue_opt[iclass]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">//set names in confusion matrix using nameVector</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> costfactory.setNameVector(nameVector);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// vector<string> nameVector=costfactory.getNameVector();</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iname=0;iname<nameVector.size();++iname){</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(costfactory.getClassValueMap().empty()){</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> costfactory.pushBackClassName(nameVector[iname]);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// cm.pushBackClassName(nameVector[iname]);</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(costfactory.getClassIndex(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]))<0)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> costfactory.pushBackClassName(type2string<short>((costfactory.getClassValueMap())[nameVector[iname]]));</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> costfactory.setNcTraining(nctraining);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> costfactory.setNcTest(nctest);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> kappa=costfactory.getCost(*tf);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">return</span>(kappa);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> {</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> map<short,int> reclassMap;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> vector<int> vreclass;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option)."</span>); </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> ccost_opt(<span class="stringliteral">"cc"</span>, <span class="stringliteral">"ccost"</span>, <span class="stringliteral">"min and max boundaries the parameter C of C-SVC, epsilon-SVR, and nu-SVR (optional: initial value)"</span>,1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> gamma_opt(<span class="stringliteral">"g"</span>, <span class="stringliteral">"gamma"</span>, <span class="stringliteral">"min max boundaries for gamma in kernel function (optional: initial value)"</span>,0);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> stepcc_opt(<span class="stringliteral">"stepcc"</span>,<span class="stringliteral">"stepcc"</span>,<span class="stringliteral">"multiplicative step for ccost in GRID search"</span>,2);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> stepg_opt(<span class="stringliteral">"stepg"</span>,<span class="stringliteral">"stepg"</span>,<span class="stringliteral">"multiplicative step for gamma in GRID search"</span>,2);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input test vector file"</span>); </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> tlayer_opt(<span class="stringliteral">"tln"</span>, <span class="stringliteral">"tln"</span>, <span class="stringliteral">"training layer name(s)"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"label"</span>, <span class="stringliteral">"label"</span>, <span class="stringliteral">"identifier for class label in training vector file."</span>,<span class="stringliteral">"label"</span>); </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">// Optionpk<unsigned short> reclass_opt("\0", "rc", "reclass code (e.g. --rc=12 --rc=23 to reclass first two classes to 12 and 23 resp.).", 0);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> balance_opt(<span class="stringliteral">"bal"</span>, <span class="stringliteral">"balance"</span>, <span class="stringliteral">"balance the input data to this number of samples for each class"</span>, 0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> random_opt(<span class="stringliteral">"random"</span>,<span class="stringliteral">"random"</span>, <span class="stringliteral">"in case of balance, randomize input data"</span>, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minSize_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"if number of training pixels is less then min, do not take this class into account"</span>, 0);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index (starting from 0, either use band option or use start to end)"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bstart_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"start"</span>, <span class="stringliteral">"start band sequence number"</span>,0); </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bend_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"end"</span>, <span class="stringliteral">"end band sequence number (set to 0 to include all bands)"</span>, 0); </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> maxit_opt(<span class="stringliteral">"maxit"</span>,<span class="stringliteral">"maxit"</span>,<span class="stringliteral">"maximum number of iterations"</span>,500);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">//Optionpk<string> algorithm_opt("a", "algorithm", "GRID, or any optimization algorithm from http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms","GRID"); </span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> tolerance_opt(<span class="stringliteral">"tol"</span>,<span class="stringliteral">"tolerance"</span>,<span class="stringliteral">"relative tolerance for stopping criterion"</span>,0.0001);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> input_opt.setHide(1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> tlayer_opt.setHide(1);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> label_opt.setHide(1);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> balance_opt.setHide(1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> random_opt.setHide(1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> bstart_opt.setHide(1);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> bend_opt.setHide(1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> svm_type_opt.setHide(1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> kernel_type_opt.setHide(1);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> kernel_degree_opt.setHide(1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> coef0_opt.setHide(1);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> nu_opt.setHide(1);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> epsilon_loss_opt.setHide(1);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> cache_opt.setHide(1);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> epsilon_tol_opt.setHide(1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> shrinking_opt.setHide(1);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> prob_est_opt.setHide(1);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> cv_opt.setHide(1);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> costfunction_opt.setHide(1);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> maxit_opt.setHide(1);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> tolerance_opt.setHide(1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// algorithm_opt.setHide(1);</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> classname_opt.setHide(1);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> classvalue_opt.setHide(1);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> doProcess=training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> ccost_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> gamma_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> stepcc_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> stepg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> tlayer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> balance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> minSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> bstart_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> bend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> svm_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> kernel_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> kernel_degree_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> coef0_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> nu_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> epsilon_loss_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> cache_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> epsilon_tol_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> shrinking_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> prob_est_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> costfunction_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> maxit_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> tolerance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// algorithm_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> exit(0);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> cout << endl;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> cout << <span class="stringliteral">"Usage: pkoptsvm -t training"</span> << endl;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> cout << endl;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> assert(training_opt.size());</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> cv_opt[0]=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> std::cout << <span class="stringliteral">"input filename: "</span> << input_opt[0] << std::endl;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> std::cout << <span class="stringliteral">"training vector file: "</span> << std::endl;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<training_opt.size();++ifile)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> std::cout << training_opt[ifile] << std::endl;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> std::cout << <span class="stringliteral">"verbose: "</span> << verbose_opt[0] << std::endl;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalSamples=0;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalTestSamples=0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nclass=0;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordtype">int</span> startBand=2;<span class="comment">//first two bands represent X and Y pos</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> vector<double> offset;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> vector<double> scale;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> vector< Vector2d<float> > trainingPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> vector< Vector2d<float> > testPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// if(priors_opt.size()>1){//priors from argument list</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// priors.resize(priors_opt.size());</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">// double normPrior=0;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass){</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// priors[iclass]=priors_opt[iclass];</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// normPrior+=priors[iclass];</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// //normalize</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// for(int iclass=0;iclass<priors_opt.size();++iclass)</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">// priors[iclass]/=normPrior;</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">//sort bands</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> std::sort(band_opt.begin(),band_opt.end());</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">// map<string,short> classValueMap;//global variable for now (due to getCost)</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> classValueMap[classname_opt[iclass]]=classvalue_opt[iclass];</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">//----------------------------------- Training -------------------------------</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">struct </span><a class="code" href="structsvm__problem.html">svm_problem</a> prob;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> vector<string> fields;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">//organize training data</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> trainingPixels.clear();</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> testPixels.clear();</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> map<string,Vector2d<float> > trainingMap;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> map<string,Vector2d<float> > testMap;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> std::cout << <span class="stringliteral">"reading training file "</span> << training_opt[0] << std::endl;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReader(training_opt[0]);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> inputReader.close();</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> totalTestSamples=inputReader.readDataImageOgr(testMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> inputReader.close();</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> trainingReader.close();</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">if</span>(trainingMap.size()<2){</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// while(mapit!=trainingMap.end())</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// cerr << mapit->first << " -> " << classValueMap[mapit->first] << std::endl;</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from training input file"</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(input_opt.size()&&testMap.size()<2){</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from test input file"</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> exit(1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> exit(1);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">//todo delete class 0 ?</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment">// if(verbose_opt[0]>=1)</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">// std::cout << "erasing class 0 from training set (" << trainingMap[0].size() << " from " << totalSamples << ") samples" << std::endl;</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">// totalSamples-=trainingMap[0].size();</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="comment">// trainingMap.erase(0);</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> std::cout << <span class="stringliteral">"training pixels: "</span> << std::endl;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> map<string,Vector2d<float> >::iterator mapit;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//check if name in training is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span>(classValueMap[mapit->first]>0){</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> std::cout << mapit->first << <span class="stringliteral">" -> "</span> << classValueMap[mapit->first] << std::endl;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> std::cerr << <span class="stringliteral">"Error: names in classname option are not complete, please check names in training vector and make sure classvalue is > 0"</span> << std::endl;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> exit(1);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> } </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">//delete small classes</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>((mapit->second).size()<minSize_opt[0]){</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> trainingMap.erase(mapit);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> nameVector.push_back(mapit->first);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> trainingPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">// trainingPixels.push_back(mapit->second); ??</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment">// ++iclass;</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> ++mapit;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> nclass=trainingPixels.size();</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(classname_opt.size())</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> assert(nclass==classname_opt.size());</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> nband=trainingPixels[0][0].size()-2;<span class="comment">//X and Y//trainingPixels[0][0].size();</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> mapit=testMap.begin();</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">while</span>(mapit!=testMap.end()){</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">//check if name in test is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span>(classValueMap[mapit->first]>0){</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> ;<span class="comment">//ok, no need to print to std::cout </span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> std::cerr << <span class="stringliteral">"Error: names in classname option are not complete, please check names in test vector and make sure classvalue is > 0"</span> << std::endl;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> exit(1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> } </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment">//no need to delete small classes for test sample</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> testPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> ++mapit;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> assert(nclass==testPixels.size());</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> assert(nband=testPixels[0][0].size()-2);<span class="comment">//X and Y//testPixels[0][0].size();</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> assert(!cv_opt[0]);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">//do not remove outliers here: could easily be obtained through ogr2ogr -where 'B2<110' output.shp input.shp</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">//balance training data</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">if</span>(balance_opt[0]>0){</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> srand(time(NULL));</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> totalSamples=0;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">while</span>(trainingPixels[iclass].size()>balance_opt[0]){</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordtype">int</span> index=rand()%trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> trainingPixels[iclass].erase(trainingPixels[iclass].begin()+index);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordtype">int</span> oldsize=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=trainingPixels[iclass].size();isample<balance_opt[0];++isample){</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">int</span> index = rand()%oldsize;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> trainingPixels[iclass].push_back(trainingPixels[iclass][index]);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> }</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> totalSamples+=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> assert(totalSamples==nclass*balance_opt[0]);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">//no need to balance test sample </span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> offset.resize(nband);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> scale.resize(nband);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> assert(offset_opt.size()==nband);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> assert(scale_opt.size()==nband);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> std::cout << <span class="stringliteral">"scaling for band"</span> << iband << std::endl;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> offset[iband]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iband];</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> scale[iband]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iband];</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(scale[iband]<=0){</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordtype">float</span> theMin=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">float</span> theMax=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingPixels[iclass].size();++isample){</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">if</span>(theMin>trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> theMin=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">if</span>(theMax<trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> theMax=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> }</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> offset[iband]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> scale[iband]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> std::cout << <span class="stringliteral">"Extreme image values for band "</span> << iband << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset[iband] << <span class="stringliteral">", "</span> << scale[iband] << std::endl;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> std::cout << <span class="stringliteral">"scaled values for band "</span> << iband << <span class="stringliteral">": ["</span> << (theMin-offset[iband])/scale[iband] << <span class="stringliteral">","</span> << (theMax-offset[iband])/scale[iband] << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">// if(priors_opt.size()==1){//default: equal priors for each class</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment">// priors.resize(nclass);</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment">// priors[iclass]=1.0/nclass;</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment">// assert(priors_opt.size()==1||priors_opt.size()==nclass);</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> std::cout << <span class="stringliteral">"number of classes: "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// std::cout << "priors:";</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="comment">// for(int iclass=0;iclass<nclass;++iclass)</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">// std::cout << " " << priors[iclass];</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">// std::cout << std::endl;</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">//Calculate features of training (and test) set</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> nctraining.resize(nclass);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> nctest.resize(nclass);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> vector< Vector2d<float> > trainingFeatures(nclass);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> std::cout << <span class="stringliteral">"calculating features for class "</span> << iclass << std::endl;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> nctraining[iclass]=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> std::cout << <span class="stringliteral">"nctraining["</span> << iclass << <span class="stringliteral">"]: "</span> << nctraining[iclass] << std::endl;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">if</span>(testPixels.size()>iclass){</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> nctest[iclass]=testPixels[iclass].size();</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> std::cout << <span class="stringliteral">"nctest["</span> << iclass << <span class="stringliteral">"]: "</span> << nctest[iclass] << std::endl;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> }</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> }</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> nctest[iclass]=0;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment">// trainingFeatures[iclass].resize(nctraining[iclass]);</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> trainingFeatures[iclass].resize(nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctraining[iclass];++isample){</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> assert(trainingPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> assert(trainingPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordtype">float</span> value=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> trainingFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// assert(trainingFeatures[iclass].size()==nctraining[iclass]);</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctest[iclass];++isample){</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> assert(testPixels[iclass].size()>isample);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> assert(testPixels[iclass][isample].size()>iband+startBand);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> assert(offset.size()>iband);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> assert(scale.size()>iband);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">float</span> value=testPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// testFeatures[iclass][isample].push_back((value-offset[iband])/scale[iband]);</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> trainingFeatures[iclass][nctraining[iclass]+isample].push_back((value-offset[iband])/scale[iband]);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> assert(trainingFeatures[iclass].size()==nctraining[iclass]+nctest[iclass]);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> assert(ccost_opt.size()>1);<span class="comment">//must have boundaries at least (initial value is optional)</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">if</span>(ccost_opt.size()<3)<span class="comment">//create initial value</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> ccost_opt.push_back(sqrt(ccost_opt[0]*ccost_opt[1]));</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> assert(gamma_opt.size()>1);<span class="comment">//must have boundaries at least (initial value is optional)</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(gamma_opt.size()<3)<span class="comment">//create initial value</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> gamma_opt.push_back(sqrt(gamma_opt[0]*gamma_opt[1]));<span class="comment">//will be translated to 1.0/nFeatures</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> assert(ccost_opt.size()==3);<span class="comment">//min, init, max</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> assert(gamma_opt.size()==3);<span class="comment">//min, init, max</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> assert(gamma_opt[0]<gamma_opt[1]);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> assert(gamma_opt[0]<gamma_opt[2]);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> assert(gamma_opt[2]<gamma_opt[1]);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> assert(ccost_opt[0]<ccost_opt[1]);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> assert(ccost_opt[0]<ccost_opt[2]);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> assert(ccost_opt[2]<ccost_opt[1]);</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> std::vector<double> x(2);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment">// if(algorithm_opt[0]=="GRID"){</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">if</span> (1){</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment">// double minError=1000;</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">// double minCost=0;</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="comment">// double minGamma=0;</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordtype">double</span> maxKappa=0;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">double</span> maxCost=0;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">double</span> maxGamma=0;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordtype">double</span> ncost=log(ccost_opt[1])/log(stepcc_opt[0])-log(ccost_opt[0])/log(stepcc_opt[0]);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordtype">double</span> ngamma=log(gamma_opt[1])/log(stepg_opt[0])-log(gamma_opt[0])/log(stepg_opt[0]);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> ccost=ccost_opt[0];ccost<=ccost_opt[1];ccost*=stepcc_opt[0]){</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> gamma=gamma_opt[0];gamma<=gamma_opt[1];gamma*=stepg_opt[0]){</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> x[0]=ccost;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> x[1]=gamma;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> std::vector<double> theGrad;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordtype">double</span> kappa=0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> kappa=objFunction(x,theGrad,&trainingFeatures);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span>(kappa>maxKappa){</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> maxKappa=kappa;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> maxCost=ccost;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> maxGamma=gamma;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> }</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> std::cout << ccost << <span class="stringliteral">" "</span> << gamma << <span class="stringliteral">" "</span> << kappa<< std::endl;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> progress+=1.0/ncost/ngamma;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> progress=1.0;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> x[0]=maxCost;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> x[1]=maxGamma;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">//else{</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment">// nlopt::opt optimizer=OptFactory::getOptimizer(algorithm_opt[0],2);</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment">// if(verbose_opt[0]>1)</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">// std::cout << "optimization algorithm: " << optimizer.get_algorithm_name() << "..." << std::endl;</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment">// std::vector<double> lb(2);</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment">// std::vector<double> init(2);</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="comment">// std::vector<double> ub(2);</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="comment">// lb[0]=ccost_opt[0];</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">// lb[1]=(gamma_opt[0]>0)? gamma_opt[0] : 1.0/trainingFeatures[0][0].size();</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">// init[0]=ccost_opt[2];</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="comment">// init[1]=(gamma_opt[2]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="comment">// ub[0]=ccost_opt[1];</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// ub[1]=(gamma_opt[1]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment">// // optimizer.set_min_objective(objFunction, &trainingFeatures);</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="comment">// optimizer.set_max_objective(objFunction, &trainingFeatures);</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment">// optimizer.set_lower_bounds(lb);</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment">// optimizer.set_upper_bounds(ub);</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment">// if(verbose_opt[0]>1)</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// std::cout << "set stopping criteria" << std::endl;</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">// //set stopping criteria</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment">// if(maxit_opt[0])</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">// optimizer.set_maxeval(maxit_opt[0]);</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">// optimizer.set_xtol_rel(tolerance_opt[0]);</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment">// double minf=0;</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment">// x=init;</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment">// try{</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">// optimizer.optimize(x, minf);</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="comment">// catch(string error){</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">// cerr << error << std::endl;</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">// catch (exception& e){</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">// cout << e.what() << endl;</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment">// catch(...){</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment">// cerr << "error catched" << std::endl;</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment">// exit(1);</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">// double ccost=x[0];</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="comment">// double gamma=x[1];</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="comment">// std::cout << "optimized with " << optimizer.get_algorithm_name() << "..." << std::endl;</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">//}</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> std::cout << <span class="stringliteral">" --ccost "</span> << x[0];</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> std::cout << <span class="stringliteral">" --gamma "</span> << x[1];</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classCostFactorySVM_html"><div class="ttname"><a href="classCostFactorySVM.html">CostFactorySVM</a></div><div class="ttdef"><b>Definition:</b> <a href="CostFactorySVM_8h_source.html#l00034">CostFactorySVM.h:34</a></div></div>
+<div class="ttc" id="structsvm__problem_html"><div class="ttname"><a href="structsvm__problem.html">svm_problem</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00018">svm.h:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkpolygonize.html b/doc/html/pkpolygonize.html
new file mode 100644
index 0000000..76501fc
--- /dev/null
+++ b/doc/html/pkpolygonize.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkpolygonize</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkpolygonize </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to make vector file from raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkpolygonize -i input [-m mask] -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-f format] [-b band] [-n fieldname] [-nodata value]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkpolygonize_description"></a>
+Description</h1>
+<p>The utility pkpolygonize converts a raster to a vector dataset. All pixels in the mask band with a value other than zero will be considered suitable for collection as polygons. Use the same input file as mask to remove the background polygon (recommended). </p>
+<h1><a class="anchor" id="pkpolygonize_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>All pixels in the mask band with a value other than zero will be considered suitable for collection as polygons. Use input file as mask to remove background polygon! </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output vector file </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>SQLite </td><td>Output OGR file format </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td>0 </td><td>the band to be used from input file </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>Disgard this nodata value when creating polygons. </td></tr>
+<tr>
+<td>n </td><td>name </td><td>std::string </td><td>DN </td><td>the field name of the output layer </td></tr>
+</table>
+Usage: pkpolygonize -i input [-m mask] -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkpolygonize can be found <a class="el" href="md_examples_pkpolygonize.html#examples_pkpolygonize">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkpolygonize_8cc_source.html b/doc/html/pkpolygonize_8cc_source.html
new file mode 100644
index 0000000..c07ff63
--- /dev/null
+++ b/doc/html/pkpolygonize_8cc_source.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkpolygonize.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkpolygonize.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkpolygonize.cc: program to make vector file from raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "cpl_string.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "gdal_priv.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "gdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "ogrsf_frmts.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "gdal_alg.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "ogr_api.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"All pixels in the mask band with a value other than zero will be considered suitable for collection as polygons. Use input file as mask to remove background polygon! "</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output vector file"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output OGR file format"</span>,<span class="stringliteral">"SQLite"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"the band to be used from input file"</span>, 0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> fname_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"name"</span>, <span class="stringliteral">"the field name of the output layer"</span>, <span class="stringliteral">"DN"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Disgard this nodata value when creating polygons."</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> exit(0);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> cout << endl;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> cout << <span class="stringliteral">"Usage: pkpolygonize -i input [-m mask] -o output"</span> << endl;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> cout << endl;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> exit(0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> exit(0);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> GDALAllRegister();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">double</span> dfComplete=0.0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> GDALRasterBand *maskBand=NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> cout << <span class="stringliteral">"opening mask file "</span> << mask_opt[0] << endl;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> maskBand = maskReader.getRasterBand(0);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> GDALRasterBand *inputBand;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> inputBand=inputReader.getRasterBand(0);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(nodata_opt.size())</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> inputBand->SetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter(output_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> OGRLayer* theLayer=ogrWriter.createLayer(output_opt[0].substr(output_opt[0].rfind(<span class="charliteral">'/'</span>)+1), inputReader.getProjectionRef());</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> cout << <span class="stringliteral">"projection: "</span> << inputReader.getProjection() << endl;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> ogrWriter.createField(fname_opt[0],OFTInteger);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> OGRLayerH hOutLayer=(OGRLayerH)ogrWriter.getLayer();</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> cout << <span class="stringliteral">"GDALPolygonize started..."</span> << endl;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">int</span> index=theLayer->GetLayerDefn()->GetFieldIndex(fname_opt[0].c_str());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span>(GDALPolygonize((GDALRasterBandH)inputBand, (GDALRasterBandH)maskBand, hOutLayer,index,NULL,pfnProgress,pProgressArg)!=CE_None)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> cerr << CPLGetLastErrorMsg() << endl;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> dfComplete=1.0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> cout << <span class="stringliteral">"number of features: "</span> << OGR_L_GetFeatureCount(hOutLayer,TRUE) << endl;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> inputReader.close();</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> maskReader.close();</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ogrWriter.close();</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkreclass.html b/doc/html/pkreclass.html
new file mode 100644
index 0000000..453b245
--- /dev/null
+++ b/doc/html/pkreclass.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkreclass</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkreclass </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to replace pixel values in raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkreclass -i input [-c from -r to]* -o output </code></p>
+<h1><a class="anchor" id="pkreclass_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Mask image(s) </td></tr>
+<tr>
+<td>msknodata </td><td>msknodata </td><td>unsigned short </td><td>1 </td><td>Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask. </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>int </td><td>0 </td><td>nodata value to put in image if not valid (0) </td></tr>
+<tr>
+<td>code </td><td>code </td><td>std::string </td><td></td><td>Recode text file (2 colums: from to) </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>list of classes to reclass (in combination with reclass option) </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>std::string </td><td></td><td>list of recoded classes (in combination with class option) </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output mask file </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>b </td><td>band </td><td>unsigned short </td><td>0 </td><td>band index(es) to replace (other bands are copied to output) </td></tr>
+<tr>
+<td>n </td><td>fname </td><td>std::string </td><td>label </td><td>field name of the shape file to be replaced </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>d </td><td>description </td><td>std::string </td><td></td><td>Set image description </td></tr>
+<tr>
+<td>v </td><td>verbose </td><td>short </td><td>0 </td><td>verbose </td></tr>
+</table>
+Usage: pkreclass -i input [-c from -r to]* -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkreclass can be found <a class="el" href="md_examples_pkreclass.html#examples_pkreclass">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkreclass_8cc_source.html b/doc/html/pkreclass_8cc_source.html
new file mode 100644
index 0000000..74a0155
--- /dev/null
+++ b/doc/html/pkreclass_8cc_source.html
@@ -0,0 +1,434 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkreclass.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkreclass.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkreclass.cc: program to replace pixel values in raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Mask image(s)"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output mask file"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> masknodata_opt(<span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask."</span>, 1);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value to put in image if not valid (0)"</span>, 0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"band index(es) to replace (other bands are copied to output)"</span>, 0);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> type_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringliteral [...]
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> code_opt(<span class="stringliteral">"code"</span>, <span class="stringliteral">"code"</span>, <span class="stringliteral">"Recode text file (2 colums: from to)"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> class_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"list of classes to reclass (in combination with reclass option)"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> reclass_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"list of recoded classes (in combination with class option)"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> fieldname_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"fname"</span>, <span class="stringliteral">"field name of the shape file to be replaced"</span>, <span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> description_opt(<span class="stringliteral">"d"</span>, <span class="stringliteral">"description"</span>, <span class="stringliteral">"Set image description"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> masknodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> code_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> class_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> reclass_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> fieldname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> description_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> exit(0);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> cout << endl;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> cout << <span class="stringliteral">"Usage: pkreclass -i input [-c from -r to]* -o output"</span> << endl;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> cout << endl;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> std::cerr << <span class="stringliteral">"No input file provided (use option -i). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> exit(0);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span>(output_opt.empty()){</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> std::cerr << <span class="stringliteral">"No output file provided (use option -o). Use --help for help information"</span> << std::endl;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> exit(0);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// vector<short> bandVector;</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// for(int iband=0;iband<band_opt.size();++iband)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// bandVector.push_back(band_opt[iband]);</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> map<string,string> codemapString;<span class="comment">//map with codes: codemapString[theKey(from)]=theValue(to)</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> map<double,double> codemap;<span class="comment">//map with codes: codemap[theKey(from)]=theValue(to)</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(code_opt.size()){</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> cout << <span class="stringliteral">"opening code text file "</span> << code_opt[0] << endl;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> ifstream codefile;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> codefile.open(code_opt[0].c_str());</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">string</span> theKey;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">string</span> theValue;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">while</span>(codefile>>theKey){</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> codefile >> theValue;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> codemapString[theKey]=theValue;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> codemap[string2type<double>(theKey)]=string2type<double>(theValue);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> codefile.close();</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">else</span>{<span class="comment">//use combination of class_opt and reclass_opt</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> assert(class_opt.size()==reclass_opt.size());</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<class_opt.size();++iclass){</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> codemapString[class_opt[iclass]]=reclass_opt[iclass];</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> codemap[string2type<double>(class_opt[iclass])]=string2type<double>(reclass_opt[iclass]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> assert(codemapString.size());</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> assert(codemap.size());</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">//if verbose true, print the codes to screen</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> map<string,string>::iterator mit;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> cout << codemapString.size() << <span class="stringliteral">" codes used: "</span> << endl;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">for</span>(mit=codemapString.begin();mit!=codemapString.end();++mit)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> cout << (*mit).first << <span class="stringliteral">" "</span> << (*mit).second << endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">bool</span> refIsRaster=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> ogrReader;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> ogrReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> refIsRaster=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// if(input_opt[0].find(".shp")!=string::npos){//shape file</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(!refIsRaster){</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> cout << <span class="stringliteral">"opening "</span> << input_opt[0] << <span class="stringliteral">" for reading "</span> << endl;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// ImgReaderOgr ogrReader(input_opt[0]);</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> cout << <span class="stringliteral">"opening "</span> << output_opt[0] << <span class="stringliteral">" for writing "</span> << endl;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> ogrWriter(output_opt[0],ogrReader);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> cout << <span class="stringliteral">"copied layer from "</span> << input_opt[0] << endl << flush;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> OGRFeatureDefn *poFDefn = ogrWriter.getLayer()->GetLayerDefn();</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">//start reading features from the layer</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> cout << <span class="stringliteral">"reset reading"</span> << endl;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> ogrReader.getLayer()->ResetReading();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> cout << <span class="stringliteral">"going through features"</span> << endl << flush;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">while</span>(<span class="keyword">true</span>){</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">// while( (poFeature = ogrWriter.getLayer()->GetNextFeature()) != NULL ){</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> poFeature=ogrReader.getLayer()->GetNextFeature();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(poFeature== NULL)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> OGRFeatureDefn *poFDefn = ogrWriter.getLayer()->GetLayerDefn();</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">string</span> featurename;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iField=0;iField<poFDefn->GetFieldCount();++iField){</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">string</span> fieldname=poFieldDefn->GetNameRef();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(fieldname==fieldname_opt[0]){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">string</span> fromClass=poFeature->GetFieldAsString(iField);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">string</span> toClass=fromClass;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(codemapString.find(fromClass)!=codemapString.end())</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> toClass=codemapString[fromClass];</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> poFeature->SetField(iField,toClass.c_str());</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> cout << <span class="stringliteral">"feature "</span> << ifeature << <span class="stringliteral">": "</span> << fromClass << <span class="stringliteral">"->"</span> << poFeature->GetFieldAsInteger(iField) << endl << flush;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// cout << "feature " << ifeature << ": " << fromClass << "->" << toClass << endl << flush;</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">//do not forget to actually write feature to file!!!</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> ogrWriter.createFeature(poFeature);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> ++ifeature;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> cout << <span class="stringliteral">"replaced "</span> << ifeature << <span class="stringliteral">" features"</span> << endl;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> ogrReader.close();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> ogrWriter.close();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">else</span>{<span class="comment">//image file</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputReader;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> vector<ImgReaderGdal> maskReader(mask_opt.size()); </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> cout << <span class="stringliteral">"opening input image file "</span> << input_opt[0] << endl;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> inputReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask){</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> cout << <span class="stringliteral">"opening mask image file "</span> << mask_opt[imask] << endl;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> maskReader[imask].open(mask_opt[imask]);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> cout << <span class="stringliteral">"opening output image file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> cout << <span class="stringliteral">"data type: "</span> << type_opt[0] << endl;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">//create output image with user defined data type </span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> type_opt[0].c_str()))</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> theType=inputReader.getDataType();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> cout << endl << <span class="stringliteral">"Output pixel type: "</span> << GDALGetDataTypeName(theType) << endl;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> theInterleave+=inputReader.getInterleave();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> outputWriter.open(output_opt[0],inputReader.nrOfCol(),inputReader.nrOfRow(),inputReader.nrOfBand(),theType,inputReader.getImageType(),option_opt);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> outputWriter.GDALSetNoDataValue(nodata_opt[0],iband);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(description_opt.size())</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> outputWriter.setImageDescription(description_opt[0]);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> outputWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (inputReader.getColorTable()!=NULL)<span class="comment">//copy colorTable from input image</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> outputWriter.setColorTable(inputReader.getColorTable());</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//if input image is georeferenced, copy projection info to output image</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(inputReader.isGeoRef()){</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> assert(maskReader[imask].isGeoRef());</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> outputWriter.copyGeoTransform(inputReader);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> outputWriter.setProjection(inputReader.getProjection());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">double</span> ulx,uly,lrx,lry;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> inputReader.getBoundingBox(ulx,uly,lrx,lry);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> outputWriter.copyGeoTransform(inputReader);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> assert(nodata_opt.size()==masknodata_opt.size());</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>(verbose_opt[0]&&mask_opt.size()){</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iv=0;iv<masknodata_opt.size();++iv)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> cout << masknodata_opt[iv] << <span class="stringliteral">"->"</span> << nodata_opt[iv] << endl;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> assert(outputWriter.nrOfCol()==inputReader.nrOfCol());</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// Vector2d<int> lineInput(inputReader.nrOfBand(),inputReader.nrOfCol());</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(inputReader.nrOfBand(),inputReader.nrOfCol());</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <a class="code" href="classVector2d.html">Vector2d<short></a> lineMask(mask_opt.size());</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> lineMask[imask].resize(maskReader[imask].nrOfCol());</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(outputWriter.nrOfBand(),outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">double</span> oldRowMask=-1;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">for</span>(irow=0;irow<inputReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">//read line in lineInput buffer</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband){</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// inputReader.readData(lineInput[iband],GDT_Int32,irow,iband);</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> inputReader.readData(lineInput[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> exit(1);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">double</span> x,y;<span class="comment">//geo coordinates</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">double</span> colMask,rowMask;<span class="comment">//image coordinates in mask image</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">for</span>(icol=0;icol<inputReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span>(mask_opt.size()>1){<span class="comment">//multiple masks</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask){</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> inputReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> maskReader[imask].geo2image(x,y,colMask,rowMask);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> assert(rowMask>=0&&rowMask<maskReader[imask].nrOfRow());</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> maskReader[imask].readData(lineMask[imask],GDT_Int16,static_cast<int>(rowMask));</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> exit(1);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> oldRowMask=rowMask;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">short</span> ivalue=0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">if</span>(mask_opt.size()==masknodata_opt.size())<span class="comment">//one invalid value for each mask</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> ivalue=masknodata_opt[imask];</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">else</span><span class="comment">//use same invalid value for each mask</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> ivalue=masknodata_opt[0];</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(lineMask[imask][colMask]==ivalue){</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> lineInput[iband][icol]=nodata_opt[imask];</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mask_opt.size()){<span class="comment">//potentially more invalid values for single mask</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> inputReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> maskReader[0].geo2image(x,y,colMask,rowMask);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> assert(rowMask>=0&&rowMask<maskReader[0].nrOfRow());</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> maskReader[0].readData(lineMask[0],GDT_Int16,static_cast<int>(rowMask));</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> exit(1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> oldRowMask=rowMask;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalue=0;ivalue<masknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> assert(masknodata_opt.size()==nodata_opt.size());</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span>(lineMask[0][colMask]==masknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> lineInput[iband][icol]=nodata_opt[ivalue];</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<lineOutput.size();++iband){</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> lineOutput[iband][icol]=lineInput[iband][icol];</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span>(find(band_opt.begin(),band_opt.end(),iband)!=band_opt.end()){</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">if</span>(!masked && codemap.find(lineInput[iband][icol])!=codemap.end()){</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordtype">double</span> toValue=codemap[lineInput[iband][icol]];</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> lineOutput[iband][icol]=toValue;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">//write buffer lineOutput to output file</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<outputWriter.nrOfBand();++iband)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> outputWriter.writeData(lineOutput[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> exit(1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//progress bar</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>((irow+1.0)/outputWriter.nrOfRow());</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> inputReader.close();</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> outputWriter.close();</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkreclass_8py_source.html b/doc/html/pkreclass_8py_source.html
new file mode 100644
index 0000000..5b7a7f7
--- /dev/null
+++ b/doc/html/pkreclass_8py_source.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pkreclass.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkreclass.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pkreclass.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pkreclass_1_1pkreclass.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html">pkreclass</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> CLASS = <span class="stringliteral">"CLASS"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> BAND = <span class="stringliteral">"BAND"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> RECLASS = <span class="stringliteral">"RECLASS"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> MASK = <span class="stringliteral">"MASK"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> MSKNODATA = <span class="stringliteral">"MSKNODATA"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> <span class="stringliteral">"pkreclass"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a2d3e9d7948ff61e49ecaa646ace3b51c">name</a> = <span class="stringliteral">"reclass raster datasets"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a5474989e8a32b4f84da61b1030d928d4">group</a> = <span class="stringliteral">"[pktools] raster"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.addParameter(ParameterMultipleInput(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#aac30b4b09ec8af2b365ffc60dd969fa4">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterMultipleInput.TYPE_RASTER))</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ac06924e2f6d01acffb97d97f5ed30550">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a670784309f5dde13aa8d7c8956b85501">BAND</a>, <span class="stringliteral">"Band index(es) to replace, e.g., 0;1;2 (other bands are copied to output)"</span>, <span class="stringliteral">'0'</span>))</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a8d00f95e83e048f830d3541e0006412a">MASK</a>, <span class="stringliteral">"Mask raster dataset"</span>,optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ad9cb8a5b163ad79ff18263dac1c27ea9">MSKNODATA</a>, <span class="stringliteral">"Mask value(s) not to consider for classification (e.g., 0;255)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a6eee06a836cf0cda3bb7d4e471dd0ff8">CLASS</a>, <span class="stringliteral">"list of classes to reclass, in combination with reclass option, e.g., 0;1;2;3"</span>,<span class="stringliteral">""</span>))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ab677fcc1481ee0f4804a64ba5a9ccf41">RECLASS</a>, <span class="stringliteral">"list of recoded classes, in combination with class option e.g., 10;11;12;13"</span>,<span class="stringliteral">""</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a377d3003bdce66a2ef2083bcd439950f">NODATA</a>, <span class="stringliteral">"nodata value to put in image if not valid"</span>,0,<span class="keywordtype">None</span>,0))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a7b77eea90f50504357742100c95ac454">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#af8727418e991db1564e423d9ebeb2c89">TYPE</a>, 0))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a10e1786759936dd074581841f73c2505">EXTRA</a>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a1e3b6410096d899e755b4c3b8ceb2b63">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> commands = [cliPath]</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#aac30b4b09ec8af2b365ffc60dd969fa4">INPUT</a>)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#af8727418e991db1564e423d9ebeb2c89">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a7b77eea90f50504357742100c95ac454">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> commands.append(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#af8727418e991db1564e423d9ebeb2c89">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a7b77eea90f50504357742100c95ac454">RTYPE</a>)])</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ac06924e2f6d01acffb97d97f5ed30550">OUTPUT</a>)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a377d3003bdce66a2ef2083bcd439950f">NODATA</a>)))</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> band=str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a670784309f5dde13aa8d7c8956b85501">BAND</a>))</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> band != <span class="stringliteral">''</span>:</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> bandValues = band.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span> bandValue <span class="keywordflow">in</span> bandValues:</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(<span class="stringliteral">'-b'</span>)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> commands.append(bandValue)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> theclass=str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a6eee06a836cf0cda3bb7d4e471dd0ff8">CLASS</a>))</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> theclass != <span class="stringliteral">''</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> classValues = theclass.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span> classValue <span class="keywordflow">in</span> classValues:</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(<span class="stringliteral">'-c'</span>)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> commands.append(classValue)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> reclass=str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ab677fcc1481ee0f4804a64ba5a9ccf41">RECLASS</a>))</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span> reclass != <span class="stringliteral">''</span>:</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> reclassValues = reclass.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">for</span> reclassValue <span class="keywordflow">in</span> reclassValues:</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(<span class="stringliteral">'-r'</span>)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> commands.append(reclassValue)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> mask = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a8d00f95e83e048f830d3541e0006412a">MASK</a>))</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> mask != <span class="stringliteral">"None"</span>:</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> commands.append(<span class="stringliteral">'-m'</span>)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> commands.append(mask)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> msknodata=str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#ad9cb8a5b163ad79ff18263dac1c27ea9">MSKNODATA</a>))</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> msknodataValues = msknodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span> msknodataValue <span class="keywordflow">in</span> msknodataValues:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> commands.append(<span class="stringliteral">'-msknodata'</span>)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> commands.append(msknodataValue)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pkreclass_1_1pkreclass.html#a10e1786759936dd074581841f73c2505">EXTRA</a>))</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> commands.append(extra)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_ad9cb8a5b163ad79ff18263dac1c27ea9"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#ad9cb8a5b163ad79ff18263dac1c27ea9">qgis.pkreclass.pkreclass.MSKNODATA</a></div><div class="ttdeci">string MSKNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00046">pkreclass.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_aac30b4b09ec8af2b365ffc60dd969fa4"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#aac30b4b09ec8af2b365ffc60dd969fa4">qgis.pkreclass.pkreclass.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00040">pkreclass.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a1e3b6410096d899e755b4c3b8ceb2b63"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a1e3b6410096d899e755b4c3b8ceb2b63">qgis.pkreclass.pkreclass.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00052">pkreclass.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a6eee06a836cf0cda3bb7d4e471dd0ff8"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a6eee06a836cf0cda3bb7d4e471dd0ff8">qgis.pkreclass.pkreclass.CLASS</a></div><div class="ttdeci">string CLASS</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00042">pkreclass.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a670784309f5dde13aa8d7c8956b85501"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a670784309f5dde13aa8d7c8956b85501">qgis.pkreclass.pkreclass.BAND</a></div><div class="ttdeci">string BAND</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00043">pkreclass.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_ab677fcc1481ee0f4804a64ba5a9ccf41"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#ab677fcc1481ee0f4804a64ba5a9ccf41">qgis.pkreclass.pkreclass.RECLASS</a></div><div class="ttdeci">string RECLASS</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00044">pkreclass.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a7b77eea90f50504357742100c95ac454"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a7b77eea90f50504357742100c95ac454">qgis.pkreclass.pkreclass.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00048">pkreclass.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a8d00f95e83e048f830d3541e0006412a"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a8d00f95e83e048f830d3541e0006412a">qgis.pkreclass.pkreclass.MASK</a></div><div class="ttdeci">string MASK</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00045">pkreclass.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a10e1786759936dd074581841f73c2505"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a10e1786759936dd074581841f73c2505">qgis.pkreclass.pkreclass.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00050">pkreclass.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a2d3e9d7948ff61e49ecaa646ace3b51c"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a2d3e9d7948ff61e49ecaa646ace3b51c">qgis.pkreclass.pkreclass.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00056">pkreclass.py:56</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_ac06924e2f6d01acffb97d97f5ed30550"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#ac06924e2f6d01acffb97d97f5ed30550">qgis.pkreclass.pkreclass.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00041">pkreclass.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_af8727418e991db1564e423d9ebeb2c89"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#af8727418e991db1564e423d9ebeb2c89">qgis.pkreclass.pkreclass.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00049">pkreclass.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html">qgis.pkreclass.pkreclass</a></div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00038">pkreclass.py:38</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a5474989e8a32b4f84da61b1030d928d4"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a5474989e8a32b4f84da61b1030d928d4">qgis.pkreclass.pkreclass.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00057">pkreclass.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pkreclass_1_1pkreclass_html_a377d3003bdce66a2ef2083bcd439950f"><div class="ttname"><a href="classqgis_1_1pkreclass_1_1pkreclass.html#a377d3003bdce66a2ef2083bcd439950f">qgis.pkreclass.pkreclass.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pkreclass_8py_source.html#l00047">pkreclass.py:47</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkregann.html b/doc/html/pkregann.html
new file mode 100644
index 0000000..faa4c0b
--- /dev/null
+++ b/doc/html/pkregann.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkregann</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkregann </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>regression with artificial neural network (multi-layer perceptron) </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkregann -i input -t training [-ic col]* [-oc col]* -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-from row] [-to row] [-cv size] [-nn number]</code></p>
+<p><code> Advanced options: [–offset value] [–scale value] [–connection rate] [–learning rate] [–maxit number] </code></p>
+<h1><a class="anchor" id="pkregann_description"></a>
+Description</h1>
+<p>The utility pkregann performs a regression based on an artificial neural network. The regression is trained from the input (-ic) and output (-oc) columns in a training text file. Each row in the training file represents one sampling unit. Multi-dimensional input features can be defined with multiple input options (e.g., -ic 0 -ic 1 -ic 2 for three dimensional features). </p>
+<h1><a class="anchor" id="pkregann_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input ASCII file </td></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>training ASCII file (each row represents one sampling unit. Input features should be provided as columns, followed by output) </td></tr>
+<tr>
+<td>ic </td><td>inputCols </td><td>int </td><td></td><td>input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2 </td></tr>
+<tr>
+<td>oc </td><td>outputCols </td><td>int </td><td></td><td>output columns (e.g., for two dimensional output in columns 3 and 4 (starting from 0) use: -oc 3 -oc 4 </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>output ASCII file for result </td></tr>
+<tr>
+<td>from </td><td>from </td><td>double </td><td>0 </td><td>start from this row in training file (start from 0) </td></tr>
+<tr>
+<td>to </td><td>to </td><td>double </td><td>0 </td><td>read until this row in training file (start from 0 or set leave 0 as default to read until end of file) </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>0 </td><td>n-fold cross validation mode </td></tr>
+<tr>
+<td>nn </td><td>nneuron </td><td>unsigned int </td><td>5 </td><td>number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td></td><td>connection </td><td>float </td><td>1 </td><td>connection reate (default: 1.0 for a fully connected network) </td></tr>
+<tr>
+<td>l </td><td>learning </td><td>float </td><td>0.7 </td><td>learning rate (default: 0.7) </td></tr>
+<tr>
+<td></td><td>maxit </td><td>unsigned int </td><td>500 </td><td>number of maximum iterations (epoch) (default: 500) </td></tr>
+</table>
+Usage: pkregann -i input -t training [-ic col]* [-oc col]* -o output </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkregann_8cc_source.html b/doc/html/pkregann_8cc_source.html
new file mode 100644
index 0000000..860d0d9
--- /dev/null
+++ b/doc/html/pkregann_8cc_source.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkregann.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkregann.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkregann.cc: regression with artificial neural network (multi-layer perceptron)</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "fileclasses/FileReaderAscii.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "floatfann.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "algorithms/myfann_cpp.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">//--------------------------- command line options ------------------------------------</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input ASCII file"</span>); </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"output ASCII file for result"</span>); </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> inputCols_opt(<span class="stringliteral">"ic"</span>, <span class="stringliteral">"inputCols"</span>, <span class="stringliteral">"input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2"</span>); </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> outputCols_opt(<span class="stringliteral">"oc"</span>, <span class="stringliteral">"outputCols"</span>, <span class="stringliteral">"output columns (e.g., for two dimensional output in columns 3 and 4 (starting from 0) use: -oc 3 -oc 4"</span>); </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"training ASCII file (each row represents one sampling unit. Input features should be provided as columns, followed by output)"</span>); </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> from_opt(<span class="stringliteral">"from"</span>, <span class="stringliteral">"from"</span>, <span class="stringliteral">"start from this row in training file (start from 0)"</span>,0); </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> to_opt(<span class="stringliteral">"to"</span>, <span class="stringliteral">"to"</span>, <span class="stringliteral">"read until this row in training file (start from 0 or set leave 0 as default to read until end of file)"</span>, 0); </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"n-fold cross validation mode"</span>,0);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nneuron_opt(<span class="stringliteral">"nn"</span>, <span class="stringliteral">"nneuron"</span>, <span class="stringliteral">"number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons)&quo [...]
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> connection_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"connection"</span>, <span class="stringliteral">"connection reate (default: 1.0 for a fully connected network)"</span>, 1.0); </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// Optionpk<float> weights_opt("w", "weights", "weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer)", 0.0); </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> learning_opt(<span class="stringliteral">"l"</span>, <span class="stringliteral">"learning"</span>, <span class="stringliteral">"learning rate (default: 0.7)"</span>, 0.7); </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> maxit_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"maxit"</span>, <span class="stringliteral">"number of maximum iterations (epoch) (default: 500)"</span>, 500); </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"set to: 0 (results only), 1 (confusion matrix), 2 (debug)"</span>,0,2);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> connection_opt.setHide(1);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> learning_opt.setHide(1);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> maxit_opt.setHide(1);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> inputCols_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> outputCols_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> from_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> to_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nneuron_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> connection_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// weights_opt.retrieveOption(argc,argv);</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> learning_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> maxit_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> exit(0);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> cout << endl;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> cout << <span class="stringliteral">"Usage: pkregann -i input -t training [-ic col]* [-oc col]* -o output"</span> << endl;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ninput=inputCols_opt.size();</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> noutput=outputCols_opt.size();</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> assert(ninput);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> assert(noutput);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> vector< vector<float> > inputUnits;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> vector< vector<float> > trainingUnits;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> vector< vector<float> > trainingOutput;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a> inputFile;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(input_opt.size()){</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> inputFile.open(input_opt[0]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> inputFile.setMinRow(from_opt[0]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> inputFile.setMaxRow(to_opt[0]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> inputFile.setComment(<span class="charliteral">'#'</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> inputFile.readData(inputUnits,inputCols_opt,1,0,<span class="keyword">true</span>,verbose_opt[0]);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> inputFile.close();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> inputSize=inputUnits.size();</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a> trainingFile(training_opt[0]);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleSize=0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> trainingFile.setMinRow(from_opt[0]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> trainingFile.setMaxRow(to_opt[0]);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> trainingFile.setComment(<span class="charliteral">'#'</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> trainingFile.readData(trainingUnits,inputCols_opt,1,0,<span class="keyword">true</span>,verbose_opt[0]);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> trainingFile.readData(trainingOutput,outputCols_opt,1,0,<span class="keyword">true</span>,verbose_opt[0]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> trainingFile.close();</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> sampleSize=trainingUnits.size();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> std::cout << <span class="stringliteral">"sampleSize: "</span> << sampleSize << std::endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> std::cout << <span class="stringliteral">"ninput: "</span> << ninput << std::endl;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> std::cout << <span class="stringliteral">"noutput: "</span> << noutput << std::endl;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> std::cout << <span class="stringliteral">"trainingUnits[0].size(): "</span> << trainingUnits[0].size() << std::endl;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::cout << <span class="stringliteral">"trainingOutput[0].size(): "</span> << trainingOutput[0].size() << std::endl;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> std::cout << <span class="stringliteral">"trainingUnits.size(): "</span> << trainingUnits.size() << std::endl;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> std::cout << <span class="stringliteral">"trainingOutput.size(): "</span> << trainingOutput.size() << std::endl;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> assert(ninput==trainingUnits[0].size());</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> assert(noutput==trainingOutput[0].size());</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> assert(trainingUnits.size()==trainingOutput.size());</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> assert(offset_opt.size()==ninput);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> assert(scale_opt.size()==ninput);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> std::vector<float> offset_input(ninput);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::vector<float> scale_input(ninput);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> std::vector<float> offset_output(noutput);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> std::vector<float> scale_output(noutput);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iinput=0;iinput<ninput;++iinput){</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> cout << <span class="stringliteral">"scaling for input feature"</span> << iinput << endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> offset_input[iinput]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iinput];</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> scale_input[iinput]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iinput];</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(scale_input[iinput]<=0){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">float</span> theMin=trainingUnits[0][iinput];</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">float</span> theMax=trainingUnits[0][iinput];</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingUnits.size();++isample){</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(theMin>trainingUnits[isample][iinput])</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> theMin=trainingUnits[isample][iinput];</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(theMax<trainingUnits[isample][iinput])</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> theMax=trainingUnits[isample][iinput];</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> offset_input[iinput]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> scale_input[iinput]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> std::cout << <span class="stringliteral">"Extreme image values for input feature "</span> << iinput << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset_input[iinput] << <span class="stringliteral">", "</span> << scale_input[iinput] << std::endl;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> std::cout << <span class="stringliteral">"scaled values for input feature "</span> << iinput << <span class="stringliteral">": ["</span> << (theMin-offset_input[iinput])/scale_input[iinput] << <span class="stringliteral">","</span> << (theMax-offset_input[iinput])/scale_input[iinput] << <span class="stringliteral">"]"</spa [...]
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ioutput=0;ioutput<noutput;++ioutput){</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> cout << <span class="stringliteral">"scaling for output feature"</span> << ioutput << endl;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">float</span> theMin=trainingOutput[0][ioutput];</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">float</span> theMax=trainingOutput[0][ioutput];</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingOutput.size();++isample){</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(theMin>trainingOutput[isample][ioutput])</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> theMin=trainingOutput[isample][ioutput];</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(theMax<trainingOutput[isample][ioutput])</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> theMax=trainingOutput[isample][ioutput];</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> offset_output[ioutput]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> scale_output[ioutput]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> std::cout << <span class="stringliteral">"Extreme image values for output feature "</span> << ioutput << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset_output[ioutput] << <span class="stringliteral">", "</span> << scale_output[ioutput] << std::endl;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> std::cout << <span class="stringliteral">"scaled values for output feature "</span> << ioutput << <span class="stringliteral">": ["</span> << (theMin-offset_output[ioutput])/scale_output[ioutput] << <span class="stringliteral">","</span> << (theMax-offset_output[ioutput])/scale_output[ioutput] << <span class="stringliteral">"]&qu [...]
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <a class="code" href="classFANN_1_1neural__net.html">FANN::neural_net</a> net;<span class="comment">//the neural network</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_layers = nneuron_opt.size()+2;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">const</span> <span class="keywordtype">float</span> desired_error = 0.0003;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations_between_reports = (verbose_opt[0])? maxit_opt[0]+1:0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> cout << <span class="stringliteral">"creating artificial neural network with "</span> << nneuron_opt.size() << <span class="stringliteral">" hidden layer, having "</span> << endl;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nneuron_opt.size();++ilayer)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> cout << nneuron_opt[ilayer] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> cout << <span class="stringliteral">"neurons"</span> << endl;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">switch</span>(num_layers){</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">case</span>(3):{</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[3];</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> layers[0]=ninput;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> layers[1]=nneuron_opt[0];</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> layers[2]=noutput;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> net.create_sparse_array(connection_opt[0],num_layers,layers);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// net.create_sparse(connection_opt[0],num_layers, ninput, nneuron_opt[0], noutput);</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">case</span>(4):{</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> layers[3];</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> layers[0]=ninput;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> layers[1]=nneuron_opt[0];</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> layers[2]=nneuron_opt[1];</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> layers[3]=noutput;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> net.create_sparse_array(connection_opt[0],num_layers,layers);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// net.create_sparse(connection_opt[0],num_layers, ninput, nneuron_opt[0], nneuron_opt[1], noutput);</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> cerr << <span class="stringliteral">"Only 1 or 2 hidden layers are supported!"</span> << endl;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> exit(1);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> cout << <span class="stringliteral">"network created"</span> << endl;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> net.set_learning_rate(learning_opt[0]);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// net.set_activation_steepness_hidden(1.0);</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// net.set_activation_steepness_output(1.0);</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> net.set_activation_function_hidden(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> net.set_activation_function_output(FANN::SIGMOID_SYMMETRIC_STEPWISE);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// Set additional properties such as the training algorithm</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// net.set_training_algorithm(FANN::TRAIN_QUICKPROP);</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// Output network type and parameters</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> cout << endl << <span class="stringliteral">"Network Type : "</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">switch</span> (net.get_network_type())</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> {</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">case</span> FANN::LAYER:</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> cout << <span class="stringliteral">"LAYER"</span> << endl;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">case</span> FANN::SHORTCUT:</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> cout << <span class="stringliteral">"SHORTCUT"</span> << endl;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> cout << <span class="stringliteral">"UNKNOWN"</span> << endl;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> net.print_parameters();</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> cout << <span class="stringliteral">"Max Epochs "</span> << setw(8) << maxit_opt[0] << <span class="stringliteral">". "</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> << <span class="stringliteral">"Desired Error: "</span> << left << desired_error << right << endl;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">bool</span> initWeights=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <a class="code" href="classVector2d.html">Vector2d<float></a> trainingFeatures(sampleSize,ninput);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;isample<sampleSize;++isample){</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iinput=0;iinput<ninput;++iinput)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> trainingFeatures[isample][iinput]=(trainingUnits[isample][iinput]-offset_input[iinput])/scale_input[iinput];</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <a class="code" href="classVector2d.html">Vector2d<float></a> scaledOutput(sampleSize,noutput);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;isample<sampleSize;++isample){</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ioutput=0;ioutput<noutput;++ioutput)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> scaledOutput[isample][ioutput]=(trainingOutput[isample][ioutput]-offset_output[ioutput])/scale_output[ioutput];</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span>(cv_opt[0]){</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> std::cout << <span class="stringliteral">"cross validation"</span> << std::endl;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> std::vector< std::vector<float> > referenceVector;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> std::vector< std::vector<float> > outputVector;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> net.cross_validation(trainingFeatures,</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> scaledOutput,</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> cv_opt[0],</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> maxit_opt[0],</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> desired_error,</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> referenceVector,</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> outputVector);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> assert(referenceVector.size()==outputVector.size());</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> vector<double> rmse(noutput);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<referenceVector.size();++isample){</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> std::cout << isample << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ioutput=0;ioutput<noutput;++ioutput){</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(!isample)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> rmse[ioutput]=0;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">double</span> ref=scale_output[ioutput]*referenceVector[isample][ioutput]+offset_output[ioutput];</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">double</span> val=scale_output[ioutput]*outputVector[isample][ioutput]+offset_output[ioutput];</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> rmse[ioutput]+=(ref-val)*(ref-val);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> std::cout << ref << <span class="stringliteral">" "</span> << val;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span>(ioutput<noutput-1)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> std::cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ioutput=0;ioutput<noutput;++ioutput)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> std::cout << <span class="stringliteral">"rmse output variable "</span> << ioutput << <span class="stringliteral">": "</span> << sqrt(rmse[ioutput]/referenceVector.size()) << std::endl;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> net.train_on_data(trainingFeatures,</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> scaledOutput,</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> initWeights,</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> maxit_opt[0],</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> iterations_between_reports,</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> desired_error);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(verbose_opt[0]>=2){</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> net.print_connections();</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> vector<fann_connection> convector;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> net.get_connection_array(convector);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i_connection=0;i_connection<net.get_total_connections();++i_connection)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> cout << <span class="stringliteral">"connection "</span> << i_connection << <span class="stringliteral">": "</span> << convector[i_connection].weight << endl;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//end of training</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> ofstream outputStream;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> outputStream.open(output_opt[0].c_str(),ios::out);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isample=0;isample<inputUnits.size();++isample){</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> std::vector<float> inputFeatures(ninput);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iinput=0;iinput<ninput;++iinput)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> inputFeatures[iinput]=(inputUnits[isample][iinput]-offset_input[iinput])/scale_input[iinput];</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> vector<float> result(noutput);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> result=net.run(inputFeatures);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> outputStream << isample << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> std::cout << isample << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iinput=0;iinput<ninput;++iinput){</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> outputStream << inputUnits[isample][iinput] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> std::cout << inputUnits[isample][iinput] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ioutput=0;ioutput<noutput;++ioutput){</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> result[ioutput]=scale_output[ioutput]*result[ioutput]+offset_output[ioutput];</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> outputStream << result[ioutput];</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">if</span>(ioutput<noutput-1)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> outputStream << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> outputStream << std::endl;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> std::cout << result[ioutput];</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span>(ioutput<noutput-1)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> std::cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>(!output_opt.empty())</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> outputStream.close();</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="ttc" id="classFileReaderAscii_html"><div class="ttname"><a href="classFileReaderAscii.html">FileReaderAscii</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderAscii_8h_source.html#l00030">FileReaderAscii.h:30</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classFANN_1_1neural__net_html"><div class="ttname"><a href="classFANN_1_1neural__net.html">FANN::neural_net</a></div><div class="ttdef"><b>Definition:</b> <a href="myfann__cpp_8h_source.html#l00978">myfann_cpp.h:978</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksensormodel_8h_source.html b/doc/html/pksensormodel_8h_source.html
new file mode 100644
index 0000000..61c6754
--- /dev/null
+++ b/doc/html/pksensormodel_8h_source.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pksensormodel.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksensormodel.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pksensormodel.h: program to calculate geometric position based on row (sensor), col (sensor), roll, pitch, yaw and lens coordinates</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef _PKSENSORMODEL_H_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define _PKSENSORMODEL_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// #include <gslwrap/matrix_double.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <armadillo></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "models/SensorModel.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">double</span> objFunction(<span class="keyword">const</span> std::vector<double> &x, std::vector<double> &grad, <span class="keywordtype">void</span> *my_func_data);</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classDataModel.html"> 29</a></span> <span class="keyword">class </span><a class="code" href="classDataModel.html">DataModel</a>{</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <a class="code" href="classDataModel.html">DataModel</a>() : m_threshold(0){};</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="classDataModel.html">DataModel</a>(<span class="keyword">const</span> SensorModel::SensorModel& theModel) : m_model(theModel), m_threshold(0){};</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> ~<a class="code" href="classDataModel.html">DataModel</a>(){};</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">void</span> setModel(<span class="keyword">const</span> SensorModel::SensorModel& theModel){m_model=theModel;};</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> SensorModel::SensorModel& getModel()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_model;};</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> getSize()<span class="keyword"> const</span>{<span class="keywordflow">return</span> m_posGCP.size();};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">void</span> setThreshold(<span class="keywordtype">double</span> theThreshold){m_threshold=theThreshold;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">double</span> getThreshold(){<span class="keywordflow">return</span> m_threshold;};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> erase(<span class="keywordtype">int</span> index){</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> m_attPlatform.erase(m_attPlatform.begin()+index);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> m_posPlatform.erase(m_posPlatform.begin()+index);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> m_posGCP.erase(m_posGCP.begin()+index);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> m_row.erase(m_row.begin()+index);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> m_col.erase(m_col.begin()+index);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> };</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> pushAttPlatform(<span class="keyword">const</span> arma::vec& atp){m_attPlatform.push_back(atp); <span class="keywordflow">return</span> m_attPlatform.size();};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> pushPosPlatform(<span class="keyword">const</span> arma::vec& ppl){m_posPlatform.push_back(ppl); <span class="keywordflow">return</span> m_posPlatform.size();};</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">int</span> pushPosGCP(<span class="keyword">const</span> arma::vec& pgcp){m_posGCP.push_back(pgcp); <span class="keywordflow">return</span> m_posGCP.size();};</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> pushRow(<span class="keywordtype">int</span> r){m_row.push_back(r); <span class="keywordflow">return</span> m_row.size();};</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> pushCol(<span class="keywordtype">int</span> c){m_col.push_back(c); <span class="keywordflow">return</span> m_col.size();};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> arma::vec getPosPlatform(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_posPlatform.size());<span class="keywordflow">return</span>(m_posPlatform[index]);};</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> arma::vec getAttPlatform(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_attPlatform.size());<span class="keywordflow">return</span>(m_attPlatform[index]);};</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> arma::vec getPosGCP(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_posGCP.size());<span class="keywordflow">return</span>(m_posGCP[index]);};</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> arma::vec getPos(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> assert(index>=0);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> assert(index<m_posPlatform.size());</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> assert(index<m_attPlatform.size());</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> assert(index<m_row.size());</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> assert(index<m_col.size());</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> assert(index<m_posGCP.size());</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span>(m_model.getPos(m_posPlatform[index],m_attPlatform[index],m_row[index],m_col[index],m_posGCP[index][2]));</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> };</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">double</span> getDistGeo(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_posGCP.size());<span class="keywordflow">return</span>(m_model.getDistGeo(m_posGCP[index],getPos(index)));};</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> getRow(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_row.size());<span class="keywordflow">return</span>(m_row[index]);};</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> getCol(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_col.size());<span class="keywordflow">return</span>(m_col[index]);};</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> getHeight(<span class="keywordtype">int</span> index)<span class="keyword"> const</span>{assert(index>=0);assert(index<m_posGCP.size());<span class="keywordflow">return</span>(m_posGCP[index][2]);};</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> setBoresightAtt(<span class="keyword">const</span> arma::vec& bc_att){</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> m_model.setBoresightAtt(bc_att);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// for(int index=0;index<m_attPlatform.size();++index)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// m_attPlatform[index]+=bc_att;</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> };</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> SensorModel::SensorModel m_model;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> vector<arma::vec> m_posPlatform;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> vector<arma::vec> m_posGCP;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> vector<arma::vec> m_attPlatform;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> vector<int> m_row;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> vector<int> m_col;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">double</span> m_threshold;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> };</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#endif //_PKSENSORMODEL_H_</span></div>
+<div class="ttc" id="classDataModel_html"><div class="ttname"><a href="classDataModel.html">DataModel</a></div><div class="ttdef"><b>Definition:</b> <a href="pksensormodel_8h_source.html#l00029">pksensormodel.h:29</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksetmask.html b/doc/html/pksetmask.html
new file mode 100644
index 0000000..070ad91
--- /dev/null
+++ b/doc/html/pksetmask.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pksetmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksetmask </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to apply mask image (set invalid values) to raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pksetmask -i input -m mask [-msknodata value] -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-min value]* [-max value]* [-data value]* [-nodata value]*</code></p>
+<p><code> Advanced options: [-b band]* [–operator '<'|'='|'<'] [-ot type] [-of format] [-co option]* [-ct table]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pksetmask_description"></a>
+Description</h1>
+<p>The utility pksetmask sets a mask provided with option -m to an input raster dataset. The default operator is '='. Values in the input raster data where the mask has a nodata value (set with the option -msknodata) will then be set to nodata (set with -nodata). Other operators are less than (–operator '<') and larger than (–operator '>').</p>
+<h1><a class="anchor" id="pksetmask_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Mask image(s) </td></tr>
+<tr>
+<td>msknodata </td><td>msknodata </td><td>int </td><td>1 </td><td>Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask. </td></tr>
+<tr>
+<td>mskband </td><td>mskband </td><td>short </td><td>0 </td><td>Mask band to read (0 indexed). Provide band for each mask. </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output mask file </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>int </td><td>0 </td><td>nodata value to put in image if not valid </td></tr>
+<tr>
+<td>p </td><td>operator </td><td>char </td><td>= </td><td>Operator: < = > !. Use operator for each msknodata option </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+</table>
+Usage: pksetmask -i input -m mask [-msknodata value] -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pksetmask can be found <a class="el" href="md_examples_pksetmask.html#examples_pksetmask">here</a> </p>
+<h1>FAQ </h1>
+<p>Frequently asked questions on pksetmask can be found <a class="el" href="md_faq_pksetmask.html#faq_pksetmask">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksetmask_8cc_source.html b/doc/html/pksetmask_8cc_source.html
new file mode 100644
index 0000000..7aa6332
--- /dev/null
+++ b/doc/html/pksetmask_8cc_source.html
@@ -0,0 +1,405 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pksetmask.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksetmask.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pksetmask.cc: program to apply mask image (set invalid values) to raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">//command line options</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Mask image(s)"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output mask file"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringlitera [...]
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> msknodata_opt(<span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask."</span>, 1);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> mskband_opt(<span class="stringliteral">"mskband"</span>, <span class="stringliteral">"mskband"</span>, <span class="stringliteral">"Mask band to read (0 indexed). Provide band for each mask."</span>, 0);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<char></a> operator_opt(<span class="stringliteral">"p"</span>, <span class="stringliteral">"operator"</span>, <span class="stringliteral">"Operator: < = > !. Use operator for each msknodata option"</span>, <span class="charliteral">'='</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata value to put in image if not valid"</span>, 0);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose"</span>, 0,2);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> otype_opt.setHide(1);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> oformat_opt.setHide(1);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> option_opt.setHide(1);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> colorTable_opt.setHide(1);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> mskband_opt.setHide(1);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> msknodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> mskband_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> operator_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> exit(0);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> cout << endl;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> cout << <span class="stringliteral">"Usage: pksetmask -i input -m mask [-msknodata value] -o output"</span> << endl;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> cout << endl;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << <span class="stringliteral">"number of mask images: "</span> << mask_opt.size() << endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//duplicate band used for mask if not explicitly provided</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">while</span>(mskband_opt.size()<mask_opt.size())</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> mskband_opt.push_back(mskband_opt[0]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> vector<ImgReaderGdal> maskReader(mask_opt.size()); </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> cout << <span class="stringliteral">"opening mask image file "</span> << mask_opt[imask] << endl;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> maskReader[imask].open(mask_opt[imask]);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> cout << <span class="stringliteral">"opening input image file "</span> << input_opt[0] << endl;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputReader;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> inputReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">string</span> imageType=inputReader.getImageType();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> GDALDataType theType=GDT_Unknown;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> std::cout << <span class="stringliteral">"Image type: "</span> << imageType << std::endl;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> std::cout << <span class="stringliteral">"possible output data types: "</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iType = 0; iType < GDT_TypeCount; ++iType){</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> cout << <span class="stringliteral">" "</span> << GDALGetDataTypeName((GDALDataType)iType);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span>( GDALGetDataTypeName((GDALDataType)iType) != NULL</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> && EQUAL(GDALGetDataTypeName((GDALDataType)iType),</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> otype_opt[0].c_str()))</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> theType=(GDALDataType) iType;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(theType==GDT_Unknown)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> theType=inputReader.getDataType();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> std::cout << std::endl << <span class="stringliteral">"Output data type: "</span> << GDALGetDataTypeName(theType) << std::endl;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> std::cout << <span class="stringliteral">"opening output image for writing: "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> theInterleave+=inputReader.getInterleave();</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> outputWriter.open(output_opt[0],inputReader.nrOfCol(),inputReader.nrOfRow(),inputReader.nrOfBand(),theType,imageType,option_opt);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> outputWriter.GDALSetNoDataValue(nodata_opt[0],iband);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> outputWriter.setProjection(inputReader.getProjection());</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> outputWriter.copyGeoTransform(inputReader);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> cout << errorstring << endl;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> exit(1);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// cout << "opening output image file " << output_opt[0] << endl;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// outputWriter.open(output_opt[0],inputReader);</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> outputWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (inputReader.getColorTable()!=NULL)<span class="comment">//copy colorTable from input image</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> outputWriter.setColorTable(inputReader.getColorTable());</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span>(inputReader.isGeoRef()){</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> assert(maskReader[imask].isGeoRef());</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> assert(nodata_opt.size()==msknodata_opt.size());</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> assert(operator_opt.size()==msknodata_opt.size()||operator_opt.size()==1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> cout << <span class="stringliteral">" mask files selected: "</span> << mask_opt.size() << endl;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iv=0;iv<msknodata_opt.size();++iv){</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">char</span> op=(operator_opt.size()==msknodata_opt.size())?operator_opt[iv]:operator_opt[0];</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> cout << op << <span class="stringliteral">" "</span> << msknodata_opt[iv] << <span class="stringliteral">"->"</span> << nodata_opt[iv] << endl;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineInput(inputReader.nrOfBand(),inputReader.nrOfCol());</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineOutput(outputWriter.nrOfBand(),outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> assert(lineOutput.size()==lineInput.size());</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> assert(inputReader.nrOfCol()==outputWriter.nrOfCol());</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// Vector2d<int> lineMask(mask_opt.size());</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <a class="code" href="classVector2d.html">Vector2d<double></a> lineMask(mask_opt.size());</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask){</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> cout << <span class="stringliteral">"mask "</span> << imask << <span class="stringliteral">" has "</span> << maskReader[imask].nrOfCol() << <span class="stringliteral">" columns and "</span> << maskReader[imask].nrOfRow() << <span class="stringliteral">" rows"</span> << endl;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> lineMask[imask].resize(maskReader[imask].nrOfCol());</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">int</span> irow=0;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">int</span> icol=0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">float</span> progress=0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// double oldRowMask=-1;</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> vector<double> oldRowMask(mask_opt.size());</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> oldRowMask[imask]=-1;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">for</span>(irow=0;irow<inputReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//read line in lineInput buffer</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband){</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> inputReader.readData(lineInput[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> exit(1);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">double</span> x,y;<span class="comment">//geo coordinates</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordtype">double</span> colMask,rowMask;<span class="comment">//image coordinates in mask image</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">for</span>(icol=0;icol<inputReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(mask_opt.size()>1){<span class="comment">//multiple masks</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask){</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> inputReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> maskReader[imask].geo2image(x,y,colMask,rowMask);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> colMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(colMask);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> rowMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rowMask);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(rowMask>=0&&rowMask<maskReader[imask].nrOfRow()&&colMask>=0&&colMask<maskReader[imask].nrOfCol()){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldRowMask[imask])){</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> assert(rowMask>=0&&rowMask<maskReader[imask].nrOfRow());</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// maskReader[imask].readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> maskReader[imask].readData(lineMask[imask],GDT_Float64,static_cast<int>(rowMask),mskband_opt[imask]);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> exit(1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> oldRowMask[imask]=rowMask;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">continue</span>;<span class="comment">//no coverage in this mask</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> ivalue=0;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>(mask_opt.size()==msknodata_opt.size())<span class="comment">//one invalid value for each mask</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> ivalue=msknodata_opt[imask];</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">else</span><span class="comment">//use same invalid value for each mask</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> ivalue=msknodata_opt[0];</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">char</span> op=(operator_opt.size()==mask_opt.size())?operator_opt[imask]:operator_opt[0];</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">switch</span>(op){</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">case</span>(<span class="charliteral">'='</span>):</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span>(lineMask[imask][colMask]==ivalue)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">case</span>(<span class="charliteral">'<'</span>):</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span>(lineMask[imask][colMask]<ivalue)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">case</span>(<span class="charliteral">'>'</span>):</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(lineMask[imask][colMask]>ivalue)</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">case</span>(<span class="charliteral">'!'</span>):</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(lineMask[imask][colMask]!=ivalue)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span>(masked){</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> cout << <span class="stringliteral">"image masked at (col="</span> << icol << <span class="stringliteral">",row="</span> << irow <<<span class="stringliteral">") with mask "</span> << mask_opt[imask] << <span class="stringliteral">" and value "</span> << ivalue << endl;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband){</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(mask_opt.size()==nodata_opt.size())<span class="comment">//one flag value for each mask</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> lineInput[iband][icol]=nodata_opt[imask];</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> lineInput[iband][icol]=nodata_opt[0];</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">else</span>{<span class="comment">//potentially more invalid values for single mask</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> inputReader.image2geo(icol,irow,x,y);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> maskReader[0].geo2image(x,y,colMask,rowMask);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> colMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(colMask);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> rowMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rowMask);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span>(rowMask>=0&&rowMask<maskReader[0].nrOfRow()&&colMask>=0&&colMask<maskReader[0].nrOfCol()){</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldRowMask[0])){</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> assert(rowMask>=0&&rowMask<maskReader[0].nrOfRow());</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// maskReader[0].readData(lineMask[0],GDT_Int32,static_cast<int>(rowMask));</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> maskReader[0].readData(lineMask[0],GDT_Float64,static_cast<int>(rowMask),mskband_opt[0]);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> exit(1);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> oldRowMask[0]=rowMask;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalue=0;ivalue<msknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> assert(msknodata_opt.size()==nodata_opt.size());</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">char</span> op=(operator_opt.size()==msknodata_opt.size())?operator_opt[ivalue]:operator_opt[0];</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">switch</span>(op){</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">case</span>(<span class="charliteral">'='</span>):</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span>(lineMask[0][colMask]==msknodata_opt[ivalue])</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">case</span>(<span class="charliteral">'<'</span>):</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(lineMask[0][colMask]<msknodata_opt[ivalue])</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">case</span>(<span class="charliteral">'>'</span>):</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span>(lineMask[0][colMask]>msknodata_opt[ivalue])</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">case</span>(<span class="charliteral">'!'</span>):</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span>(lineMask[0][colMask]!=msknodata_opt[ivalue])</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>(masked){</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<inputReader.nrOfBand();++iband)</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> lineInput[iband][icol]=nodata_opt[ivalue];</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<lineOutput.size();++iband)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> lineOutput[iband][icol]=lineInput[iband][icol];</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">//write buffer lineOutput to output file</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<outputWriter.nrOfBand();++iband){</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> outputWriter.writeData(lineOutput[iband],GDT_Float64,irow,iband);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> exit(1);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//progress bar</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(irow+1.0)/outputWriter.nrOfRow();</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> inputReader.close();</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> imask=0;imask<mask_opt.size();++imask)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> maskReader[imask].close();</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> outputWriter.close();</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d< double ></a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksetmask_8py_source.html b/doc/html/pksetmask_8py_source.html
new file mode 100644
index 0000000..4db1f73
--- /dev/null
+++ b/doc/html/pksetmask_8py_source.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pksetmask.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksetmask.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pksetmask.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classqgis_1_1pksetmask_1_1pksetmask.html"> 38</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html">pksetmask</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> MASK = <span class="stringliteral">"MASK"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> MSKNODATA = <span class="stringliteral">"MSKNODATA"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> MSKBAND = <span class="stringliteral">"MSKBAND"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> OPERATOR_OPTIONS = [<span class="stringliteral">"="</span>,<span class="stringliteral">"<"</span>,<span class="stringliteral">">"</span>,<span class="stringliteral">"!"</span>]</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> OPERATOR = <span class="stringliteral">"OPERATOR"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> NODATA = <span class="stringliteral">"NODATA"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> RTYPE = <span class="stringliteral">'RTYPE'</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> TYPE = [<span class="stringliteral">'none'</span>, <span class="stringliteral">'Byte'</span>,<span class="stringliteral">'Int16'</span>,<span class="stringliteral">'UInt16'</span>,<span class="stringliteral">'UInt32'</span>,<span class="stringliteral">'Int32'</span>,<span class="stringliteral">'Float32'</span>,<span class="stringliteral">'Float64&# [...]
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> <span class="stringliteral">"pksetmask"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#ac356f16f384fdc78b5419cdbaaac496d">name</a> = <span class="stringliteral">"apply mask to raster dataset"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a26a6204cff0e0414422bddb6d714c8d5">group</a> = <span class="stringliteral">"[pktools] raster"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a64b4d0cf98dae937536135be3220011d">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> self.addParameter(ParameterMultipleInput(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a926a151acae3b3947f8f659c08901a0e">MASK</a>, <span class="stringliteral">'Mask(s) to apply'</span>,ParameterMultipleInput.TYPE_RASTER))</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#afd621c70d1c2fc2f29a598ca94f52209">MSKNODATA</a>, <span class="stringliteral">"Mask value(s), provide value for each mask (e.g., 250;255)"</span>,<span class="stringliteral">"1"</span>))</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a72fd0200a13dd69eb8a8e8664288f8f3">MSKBAND</a>, <span class="stringliteral">"Mask band(s) to read, provide band for each mask (e.g., 0;1)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a68d2802febad55d67d4848ee6553d21e">OPERATOR</a>,<span class="stringliteral">"setmask rule"</span>,self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a0ec16c72e434e986dc7127edd22a8756">OPERATOR_OPTIONS</a>, 0))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a7db2c15757ac66baf866fcaaba9f27ac">NODATA</a>, <span class="stringliteral">"nodata value to put in image if not valid"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a1f43a43129a59344782bd62b9984045b">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterSelection(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a53adabeb756e8f6c38b739a182b4c351">RTYPE</a>, <span class="stringliteral">'Output raster type (leave as none to keep original type)'</span>, self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a4c222c8118aa51967806a48f9e67151a">TYPE</a>, 0))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#ae31305e3b79571cc6475b47cf9c4762e">EXTRA</a>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a539b2bbbabaa1ea1ac1dcdcc60a87669">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> commands = [cliPath]</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a64b4d0cf98dae937536135be3220011d">INPUT</a>)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> mask=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a926a151acae3b3947f8f659c08901a0e">MASK</a>)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> maskFiles = mask.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> maskFile <span class="keywordflow">in</span> maskFiles:</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands.append(<span class="stringliteral">'-m'</span>)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> commands.append(maskFile)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a72fd0200a13dd69eb8a8e8664288f8f3">MSKBAND</a>)))</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> mskband=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a72fd0200a13dd69eb8a8e8664288f8f3">MSKBAND</a>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> mskbandValues = mskband.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span> mskbandValue <span class="keywordflow">in</span> mskbandValues:</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(<span class="stringliteral">'-mskband'</span>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> commands.append(mskbandValue)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#afd621c70d1c2fc2f29a598ca94f52209">MSKNODATA</a>)))</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> msknodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#afd621c70d1c2fc2f29a598ca94f52209">MSKNODATA</a>)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> msknodataValues = msknodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span> msknodataValue <span class="keywordflow">in</span> msknodataValues:</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> commands.append(<span class="stringliteral">'-msknodata'</span>)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> commands.append(msknodataValue)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> band=self.getParameterValue(self.BAND)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> commands.append(<span class="stringliteral">"-p"</span>)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> commands.append(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a0ec16c72e434e986dc7127edd22a8756">OPERATOR_OPTIONS</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a68d2802febad55d67d4848ee6553d21e">OPERATOR</a>)])</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> nodata=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a7db2c15757ac66baf866fcaaba9f27ac">NODATA</a>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">'-nodata'</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(nodataValue)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span> self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a4c222c8118aa51967806a48f9e67151a">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a53adabeb756e8f6c38b739a182b4c351">RTYPE</a>)] != <span class="stringliteral">"none"</span>:</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> commands.append(<span class="stringliteral">'-ot'</span>)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a4c222c8118aa51967806a48f9e67151a">TYPE</a>[self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a53adabeb756e8f6c38b739a182b4c351">RTYPE</a>)])</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#a1f43a43129a59344782bd62b9984045b">OUTPUT</a>)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(<span class="stringliteral">"-o"</span>)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> data=self.getParameterValue(self.DATA)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksetmask_1_1pksetmask.html#ae31305e3b79571cc6475b47cf9c4762e">EXTRA</a>))</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> commands.append(extra)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a0ec16c72e434e986dc7127edd22a8756"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a0ec16c72e434e986dc7127edd22a8756">qgis.pksetmask.pksetmask.OPERATOR_OPTIONS</a></div><div class="ttdeci">list OPERATOR_OPTIONS</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00044">pksetmask.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a4c222c8118aa51967806a48f9e67151a"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a4c222c8118aa51967806a48f9e67151a">qgis.pksetmask.pksetmask.TYPE</a></div><div class="ttdeci">list TYPE</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00049">pksetmask.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a68d2802febad55d67d4848ee6553d21e"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a68d2802febad55d67d4848ee6553d21e">qgis.pksetmask.pksetmask.OPERATOR</a></div><div class="ttdeci">string OPERATOR</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00045">pksetmask.py:45</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a72fd0200a13dd69eb8a8e8664288f8f3"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a72fd0200a13dd69eb8a8e8664288f8f3">qgis.pksetmask.pksetmask.MSKBAND</a></div><div class="ttdeci">string MSKBAND</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00043">pksetmask.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a64b4d0cf98dae937536135be3220011d"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a64b4d0cf98dae937536135be3220011d">qgis.pksetmask.pksetmask.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00040">pksetmask.py:40</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a26a6204cff0e0414422bddb6d714c8d5"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a26a6204cff0e0414422bddb6d714c8d5">qgis.pksetmask.pksetmask.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00057">pksetmask.py:57</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a7db2c15757ac66baf866fcaaba9f27ac"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a7db2c15757ac66baf866fcaaba9f27ac">qgis.pksetmask.pksetmask.NODATA</a></div><div class="ttdeci">string NODATA</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00046">pksetmask.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_ae31305e3b79571cc6475b47cf9c4762e"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#ae31305e3b79571cc6475b47cf9c4762e">qgis.pksetmask.pksetmask.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00050">pksetmask.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_afd621c70d1c2fc2f29a598ca94f52209"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#afd621c70d1c2fc2f29a598ca94f52209">qgis.pksetmask.pksetmask.MSKNODATA</a></div><div class="ttdeci">string MSKNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00042">pksetmask.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_ac356f16f384fdc78b5419cdbaaac496d"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#ac356f16f384fdc78b5419cdbaaac496d">qgis.pksetmask.pksetmask.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00056">pksetmask.py:56</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a53adabeb756e8f6c38b739a182b4c351"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a53adabeb756e8f6c38b739a182b4c351">qgis.pksetmask.pksetmask.RTYPE</a></div><div class="ttdeci">string RTYPE</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00048">pksetmask.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a926a151acae3b3947f8f659c08901a0e"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a926a151acae3b3947f8f659c08901a0e">qgis.pksetmask.pksetmask.MASK</a></div><div class="ttdeci">string MASK</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00041">pksetmask.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a539b2bbbabaa1ea1ac1dcdcc60a87669"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a539b2bbbabaa1ea1ac1dcdcc60a87669">qgis.pksetmask.pksetmask.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00052">pksetmask.py:52</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html_a1f43a43129a59344782bd62b9984045b"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html#a1f43a43129a59344782bd62b9984045b">qgis.pksetmask.pksetmask.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00047">pksetmask.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pksetmask_1_1pksetmask_html"><div class="ttname"><a href="classqgis_1_1pksetmask_1_1pksetmask.html">qgis.pksetmask.pksetmask</a></div><div class="ttdef"><b>Definition:</b> <a href="pksetmask_8py_source.html#l00038">pksetmask.py:38</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksieve.html b/doc/html/pksieve.html
new file mode 100644
index 0000000..0c8b346
--- /dev/null
+++ b/doc/html/pksieve.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pksieve</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksieve </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to sieve filter raster image </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pksieve -i input [-s size] -o output </code></p>
+<p><code></code></p>
+<p><code> Options: [-c 4|8] [-b band] [-m mask] [-ot type] [-of format] [-co option]* [-ct table]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pksieve_description"></a>
+Description</h1>
+<p>The utility pksieve filters small objects (maximum size defined with the option -s) in a raster by replacing them to the largest neighbor object. In this context, objects are defined as pixels of the same value that are also connected. The connection can be defined in four directions (N-S and W-E: set option -c 4) or eight directions (N-S, W-E and diagonals NW-SE, NE-SW: set option -c 8).</p>
+<h1><a class="anchor" id="pksieve_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input image file </td></tr>
+<tr>
+<td>s </td><td>size </td><td>int </td><td>0 </td><td>raster polygons with sizes smaller than this will be merged into their largest neighbour. No sieve is performed if size = 0 </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output image file </td></tr>
+<tr>
+<td>c </td><td>connect </td><td>int </td><td>8 </td><td>the connectedness: 4 directions or 8 directions </td></tr>
+<tr>
+<td>b </td><td>band </td><td>int </td><td>0 </td><td>the band to be used from input file </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Use the first band of the specified file as a validity mask (zero is invalid, non-zero is valid). </td></tr>
+<tr>
+<td>ot </td><td>otype </td><td>std::string </td><td></td><td>Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+</table>
+Usage: pksieve -i input [-s size] -o output</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pksieve can be found <a class="el" href="md_examples_pksieve.html#examples_pksieve">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksieve_8cc_source.html b/doc/html/pksieve_8cc_source.html
new file mode 100644
index 0000000..3e97389
--- /dev/null
+++ b/doc/html/pksieve_8cc_source.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pksieve.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksieve.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pksieve.cc: program to sieve filter raster image</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "cpl_string.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "gdal_priv.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "gdal.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// #include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "ogrsf_frmts.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "gdal_alg.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "ogr_api.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input image file"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Use the first band of the specified file as a validity mask (zero is invalid, non-zero is valid)."</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output image file"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"the band to be used from input file"</span>, 0);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> connect_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"connect"</span>, <span class="stringliteral">"the connectedness: 4 directions or 8 directions"</span>, 8);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> size_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"size"</span>, <span class="stringliteral">"raster polygons with sizes smaller than this will be merged into their largest neighbour. No sieve is performed if size = 0"</span>, 0);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> otype_opt(<span class="stringliteral">"ot"</span>, <span class="stringliteral">"otype"</span>, <span class="stringliteral">"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image"</span>, <span class="stringliter [...]
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode if > 0"</span>, 0,2);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> size_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> connect_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> otype_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> exit(0);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> cout << endl;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> cout << <span class="stringliteral">"Usage: pksieve -i input [-s size] -o output"</span> << endl;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> cout << endl;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> GDALAllRegister();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> dfComplete=0.0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> GDALRasterBand *maskBand=NULL;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> cout << <span class="stringliteral">"opening mask file "</span> << mask_opt[0] << endl;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> maskBand = maskReader.getRasterBand(0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> assert(input_opt.size());</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> GDALRasterBand *inputBand;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> inputBand=inputReader.getRasterBand(band_opt[0]);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> outputWriter;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> GDALRasterBand *outputBand=NULL;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> cout << <span class="stringliteral">"opening output file "</span> << output_opt[0] << endl;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> outputWriter.open(output_opt[0],inputReader);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(colorTable_opt.size()){</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(colorTable_opt[0]!=<span class="stringliteral">"none"</span>)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> outputWriter.setColorTable(colorTable_opt[0]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (inputReader.getColorTable()!=NULL)<span class="comment">//copy colorTable from input image</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> outputWriter.setColorTable(inputReader.getColorTable());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> outputBand = outputWriter.getRasterBand(0);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">//sieve filter to remove small raster elements (overwrite input band)</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span>(size_opt[0]){</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(GDALSieveFilter((GDALRasterBandH)inputBand, (GDALRasterBandH)maskBand, (GDALRasterBandH)outputBand, size_opt[0], connect_opt[0],NULL,pfnProgress,pProgressArg)!=CE_None)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> cerr << CPLGetLastErrorMsg() << endl;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> dfComplete=1.0;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> pfnProgress(dfComplete,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> inputReader.close();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> maskReader.close();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> outputWriter.close();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstat.html b/doc/html/pkstat.html
new file mode 100644
index 0000000..4a78648
--- /dev/null
+++ b/doc/html/pkstat.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkstat</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstat </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to calculate basic statistics from raster dataset </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkstat -i input </code></p>
+<h1><a class="anchor" id="pkstat_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>name of the input raster dataset </td></tr>
+<tr>
+<td>b </td><td>band </td><td>unsigned short </td><td>0 </td><td>band(s) on which to calculate statistics </td></tr>
+<tr>
+<td>f </td><td>filename </td><td>bool </td><td>false </td><td>Shows image filename </td></tr>
+<tr>
+<td>stats </td><td>statistics </td><td>bool </td><td>false </td><td>Shows basic statistics (min,max, mean and stdDev of the raster datasets) </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>Set nodata value(s) </td></tr>
+<tr>
+<td>mean </td><td>mean </td><td>bool </td><td>false </td><td>calculate mean </td></tr>
+<tr>
+<td>median </td><td>median </td><td>bool </td><td>false </td><td>calculate median </td></tr>
+<tr>
+<td>var </td><td>var </td><td>bool </td><td>false </td><td>calculate variance </td></tr>
+<tr>
+<td>stdev </td><td>stdev </td><td>bool </td><td>false </td><td>calculate standard deviation </td></tr>
+<tr>
+<td>mm </td><td>minmax </td><td>bool </td><td>false </td><td>calculate minimum and maximum value </td></tr>
+<tr>
+<td>min </td><td>min </td><td>bool </td><td>false </td><td>calculate minimum value </td></tr>
+<tr>
+<td>max </td><td>max </td><td>bool </td><td>false </td><td>calculate maximum value </td></tr>
+<tr>
+<td>hist </td><td>hist </td><td>bool </td><td>false </td><td>calculate histogram </td></tr>
+<tr>
+<td>nbin </td><td>nbin </td><td>short </td><td></td><td>number of bins to calculate histogram </td></tr>
+<tr>
+<td>rel </td><td>relative </td><td>bool </td><td>false </td><td>use percentiles for histogram to calculate histogram </td></tr>
+<tr>
+<td>hist2d </td><td>hist2d </td><td>bool </td><td>false </td><td>calculate 2-dimensional histogram based on two images </td></tr>
+<tr>
+<td>cor </td><td>correlation </td><td>bool </td><td>false </td><td>calculate Pearson produc-moment correlation coefficient between two raster datasets (defined by -c <col1> -c <col2>) </td></tr>
+<tr>
+<td>rmse </td><td>rmse </td><td>bool </td><td>false </td><td>calculate root mean square error between two raster datasets </td></tr>
+<tr>
+<td>reg </td><td>regression </td><td>bool </td><td>false </td><td>calculate linear regression between two raster datasets and get correlation coefficient </td></tr>
+<tr>
+<td>regerr </td><td>regerr </td><td>bool </td><td>false </td><td>calculate linear regression between two raster datasets and get root mean square error </td></tr>
+<tr>
+<td>preg </td><td>preg </td><td>bool </td><td>false </td><td>calculate perpendicular regression between two raster datasets and get correlation coefficient </td></tr>
+<tr>
+<td>ulx </td><td>ulx </td><td>double </td><td></td><td>Upper left x value bounding box </td></tr>
+<tr>
+<td>uly </td><td>uly </td><td>double </td><td></td><td>Upper left y value bounding box </td></tr>
+<tr>
+<td>lrx </td><td>lrx </td><td>double </td><td></td><td>Lower right x value bounding box </td></tr>
+<tr>
+<td>lry </td><td>lry </td><td>double </td><td></td><td>Lower right y value bounding box </td></tr>
+<tr>
+<td>down </td><td>down </td><td>short </td><td>1 </td><td>Down sampling factor (for raster sample datasets only). Can be used to create grid points </td></tr>
+<tr>
+<td>rnd </td><td>rnd </td><td>unsigned int </td><td>0 </td><td>generate random numbers </td></tr>
+<tr>
+<td>scale </td><td>scale </td><td>double </td><td></td><td>Scale(s) for reading input image(s) </td></tr>
+<tr>
+<td>offset </td><td>offset </td><td>double </td><td></td><td>Offset(s) for reading input image(s) </td></tr>
+<tr>
+<td>src_min </td><td>src_min </td><td>double </td><td></td><td>start reading source from this minimum value </td></tr>
+<tr>
+<td>src_max </td><td>src_max </td><td>double </td><td></td><td>stop reading source from this maximum value </td></tr>
+<tr>
+<td>kde </td><td>kde </td><td>bool </td><td>false </td><td>Use <a class="el" href="classKernel.html">Kernel</a> density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb </td></tr>
+</table>
+Usage: pkstat -i input </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstat_8cc_source.html b/doc/html/pkstat_8cc_source.html
new file mode 100644
index 0000000..ab9e916
--- /dev/null
+++ b/doc/html/pkstat_8cc_source.html
@@ -0,0 +1,1060 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkstat.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstat.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkstat.cc: program to calculate basic statistics from raster dataset</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2015 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "algorithms/ImgRegression.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"name of the input raster dataset"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> band_opt(<span class="stringliteral">"b"</span>,<span class="stringliteral">"band"</span>,<span class="stringliteral">"band(s) on which to calculate statistics"</span>,0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> filename_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"filename"</span>, <span class="stringliteral">"Shows image filename "</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stat_opt(<span class="stringliteral">"stats"</span>, <span class="stringliteral">"statistics"</span>, <span class="stringliteral">"Shows basic statistics (min,max, mean and stdDev of the raster datasets)"</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> ulx_opt(<span class="stringliteral">"ulx"</span>, <span class="stringliteral">"ulx"</span>, <span class="stringliteral">"Upper left x value bounding box"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> uly_opt(<span class="stringliteral">"uly"</span>, <span class="stringliteral">"uly"</span>, <span class="stringliteral">"Upper left y value bounding box"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lrx_opt(<span class="stringliteral">"lrx"</span>, <span class="stringliteral">"lrx"</span>, <span class="stringliteral">"Lower right x value bounding box"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> lry_opt(<span class="stringliteral">"lry"</span>, <span class="stringliteral">"lry"</span>, <span class="stringliteral">"Lower right y value bounding box"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>,<span class="stringliteral">"nodata"</span>,<span class="stringliteral">"Set nodata value(s)"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> down_opt(<span class="stringliteral">"down"</span>, <span class="stringliteral">"down"</span>, <span class="stringliteral">"Down sampling factor (for raster sample datasets only). Can be used to create grid points"</span>, 1);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> random_opt(<span class="stringliteral">"rnd"</span>, <span class="stringliteral">"rnd"</span>, <span class="stringliteral">"generate random numbers"</span>, 0);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"scale"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"Scale(s) for reading input image(s)"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"offset"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"Offset(s) for reading input image(s)"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// Optionpk<bool> transpose_opt("t","transpose","transpose output",false);</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// Optionpk<std::string> randdist_opt("dist", "dist", "distribution for generating random numbers, see http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320 (only uniform and Gaussian supported yet)", "gaussian");</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// Optionpk<double> randa_opt("rnda", "rnda", "first parameter for random distribution (mean value in case of Gaussian)", 0);</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// Optionpk<double> randb_opt("rndb", "rndb", "second parameter for random distribution (standard deviation in case of Gaussian)", 1);</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> mean_opt(<span class="stringliteral">"mean"</span>,<span class="stringliteral">"mean"</span>,<span class="stringliteral">"calculate mean"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> median_opt(<span class="stringliteral">"median"</span>,<span class="stringliteral">"median"</span>,<span class="stringliteral">"calculate median"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> var_opt(<span class="stringliteral">"var"</span>,<span class="stringliteral">"var"</span>,<span class="stringliteral">"calculate variance"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> skewness_opt(<span class="stringliteral">"skew"</span>,<span class="stringliteral">"skewness"</span>,<span class="stringliteral">"calculate skewness"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> kurtosis_opt(<span class="stringliteral">"kurt"</span>,<span class="stringliteral">"kurtosis"</span>,<span class="stringliteral">"calculate kurtosis"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stdev_opt(<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"calculate standard deviation"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> sum_opt(<span class="stringliteral">"sum"</span>,<span class="stringliteral">"sum"</span>,<span class="stringliteral">"calculate sum of column"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> minmax_opt(<span class="stringliteral">"mm"</span>,<span class="stringliteral">"minmax"</span>,<span class="stringliteral">"calculate minimum and maximum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> min_opt(<span class="stringliteral">"min"</span>,<span class="stringliteral">"min"</span>,<span class="stringliteral">"calculate minimum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> max_opt(<span class="stringliteral">"max"</span>,<span class="stringliteral">"max"</span>,<span class="stringliteral">"calculate maximum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_min_opt(<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"start reading source from this minimum value"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_max_opt(<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"stop reading source from this maximum value"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> histogram_opt(<span class="stringliteral">"hist"</span>,<span class="stringliteral">"hist"</span>,<span class="stringliteral">"calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> histogram2d_opt(<span class="stringliteral">"hist2d"</span>,<span class="stringliteral">"hist2d"</span>,<span class="stringliteral">"calculate 2-dimensional histogram based on two images"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nbin_opt(<span class="stringliteral">"nbin"</span>,<span class="stringliteral">"nbin"</span>,<span class="stringliteral">"number of bins to calculate histogram"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> relative_opt(<span class="stringliteral">"rel"</span>,<span class="stringliteral">"relative"</span>,<span class="stringliteral">"use percentiles for histogram to calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> kde_opt(<span class="stringliteral">"kde"</span>,<span class="stringliteral">"kde"</span>,<span class="stringliteral">"Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> correlation_opt(<span class="stringliteral">"cor"</span>,<span class="stringliteral">"correlation"</span>,<span class="stringliteral">"calculate Pearson produc-moment correlation coefficient between two raster datasets (defined by -c <col1> -c <col2>)"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> rmse_opt(<span class="stringliteral">"rmse"</span>,<span class="stringliteral">"rmse"</span>,<span class="stringliteral">"calculate root mean square error between two raster datasets"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> reg_opt(<span class="stringliteral">"reg"</span>,<span class="stringliteral">"regression"</span>,<span class="stringliteral">"calculate linear regression between two raster datasets and get correlation coefficient"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> regerr_opt(<span class="stringliteral">"regerr"</span>,<span class="stringliteral">"regerr"</span>,<span class="stringliteral">"calculate linear regression between two raster datasets and get root mean square error"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> preg_opt(<span class="stringliteral">"preg"</span>,<span class="stringliteral">"preg"</span>,<span class="stringliteral">"calculate perpendicular regression between two raster datasets and get correlation coefficient"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode when positive"</span>, 0,2);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> ulx_opt.setHide(1);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> uly_opt.setHide(1);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> lrx_opt.setHide(1);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> lry_opt.setHide(1);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> down_opt.setHide(1);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> random_opt.setHide(1);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> src_min_opt.setHide(1);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> src_max_opt.setHide(1);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> kde_opt.setHide(1);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// range_opt.setHide(1);</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// transpose_opt.setHide(1);</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">//mandatory options</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">//optional options</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> filename_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> stat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> mean_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> median_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> var_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> stdev_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> minmax_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> histogram_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> nbin_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> relative_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> histogram2d_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> correlation_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> rmse_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> reg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> regerr_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> preg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">//advanced options</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ulx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> uly_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> lrx_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> lry_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> down_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> src_min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> src_max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> kde_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> exit(0);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> cout << endl;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> cout << <span class="stringliteral">"Usage: pkstat -i input"</span> << endl;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cout << endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">while</span>(src_min_opt.size()<band_opt.size())</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">while</span>(src_max_opt.size()<band_opt.size())</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbin=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">double</span> minX=0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">double</span> minY=0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">double</span> maxX=0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">double</span> maxY=0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">double</span> meanValue=0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">double</span> stdDev=0;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">double</span> progress=0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> srand(time(NULL));</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <a class="code" href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a> imgreg;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> std::vector<double> histogramOutput;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">double</span> nsample=0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span>(scale_opt.size()){</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">while</span>(scale_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> scale_opt.push_back(scale_opt[0]);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>(offset_opt.size()){</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">while</span>(offset_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> offset_opt.push_back(offset_opt[0]);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(input_opt.empty()){</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> std::cerr << <span class="stringliteral">"No image dataset provided (use option -i). Use --help for help information"</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> exit(0);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<input_opt.size();++ifile){</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> imgReader.open(input_opt[ifile]);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">catch</span>(std::string errorstring){</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> std::cout << errorstring << std::endl;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> exit(0);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(filename_opt[0])</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> std::cout << <span class="stringliteral">" --input "</span> << input_opt[ifile] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> imgReader.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">int</span> nband=band_opt.size();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(!inodata)</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> imgReader.GDALSetNoDataValue(nodata_opt[0],iband);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">if</span>(offset_opt.size()>ifile)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> imgReader.setOffset(offset_opt[ifile],band_opt[iband]);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(scale_opt.size()>ifile)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> imgReader.setScale(scale_opt[ifile],band_opt[iband]);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// if(stat_opt[0]||mean_opt[0]||var_opt[0]||stdev_opt[0]){</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// assert(band_opt[iband]<imgReader.nrOfBand());</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">// GDALProgressFunc pfnProgress;</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">// void* pProgressData;</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// GDALRasterBand* rasterBand;</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// rasterBand=imgReader.getRasterBand(band_opt[iband]);</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// if(mean_opt[0])</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// std::cout << "--mean " << meanValue << " ";</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// if(stdev_opt[0])</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// std::cout << "--stdDev " << stdDev << " ";</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// if(var_opt[0])</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// std::cout << "--var " << stdDev*stdDev << " ";</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// if(stat_opt[0])</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// std::cout << "-min " << minValue << " -max " << maxValue << " --mean " << meanValue << " --stdDev " << stdDev << " ";</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>(minmax_opt[0]||min_opt[0]||max_opt[0]){</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> assert(band_opt[iband]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>((ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size())&&(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">double</span> uli,ulj,lri,lrj;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> imgReader.geo2image(ulx_opt[0],uly_opt[0],uli,ulj);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> imgReader.geo2image(lrx_opt[0],lry_opt[0],lri,lrj);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> imgReader.getMinMax(static_cast<int>(uli),static_cast<int>(lri),static_cast<int>(ulj),static_cast<int>(lrj),band_opt[iband],minValue,maxValue);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> imgReader.getMinMax(minValue,maxValue,band_opt[iband],<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(minmax_opt[0])</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> std::cout << <span class="stringliteral">"-min "</span> << minValue << <span class="stringliteral">" -max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(min_opt[0])</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> std::cout << <span class="stringliteral">"-min "</span> << minValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span>(max_opt[0])</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> std::cout << <span class="stringliteral">"-max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span>(histogram_opt[0]){<span class="comment">//aggregate results from multiple inputs, but only calculate for first selected band</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> assert(band_opt[0]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> nbin=(nbin_opt.size())? nbin_opt[0]:0;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> imgReader.getMinMax(minValue,maxValue,band_opt[0]);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(src_min_opt.size())</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> minValue=src_min_opt[0];</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span>(src_max_opt.size())</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> maxValue=src_max_opt[0];</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span>(minValue>=maxValue)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> imgReader.getMinMax(minValue,maxValue,band_opt[0]);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> cout << <span class="stringliteral">"number of valid pixels in image: "</span> << imgReader.getNvalid(band_opt[0]) << endl;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> nsample+=imgReader.getHistogram(histogramOutput,minValue,maxValue,nbin,band_opt[0],kde_opt[0]);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">//only output for last input file</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span>(ifile==input_opt.size()-1){</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> std::cout.precision(10);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> bin=0;bin<nbin;++bin){</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">double</span> binValue=0;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span>(nbin==maxValue-minValue+1)</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> binValue=minValue+bin;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> binValue=minValue+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxValue-minValue)*(bin+0.5)/nbin;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> std::cout << binValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>(relative_opt[0]||kde_opt[0])</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> std::cout << 100.0*<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(histogramOutput[bin])/static_cast<double>(nsample) << std::endl;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> std::cout << static_cast<double>(histogramOutput[bin]) << std::endl;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span>(histogram2d_opt[0]&&input_opt.size()<2){</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> assert(band_opt.size()>1);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> imgReader.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> imgReader.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> minX=src_min_opt[0];</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> minY=src_min_opt[1];</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> maxX=src_max_opt[0];</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> maxY=src_max_opt[1];</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> nbin=(nbin_opt.size())? nbin_opt[0]:0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">if</span>(nbin<=1){</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> std::cerr << <span class="stringliteral">"Warning: number of bins not defined, calculating bins from min and max value"</span> << std::endl;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(minX>=maxX)</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> imgReader.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span>(minY>=maxY)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> imgReader.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> minValue=(minX<minY)? minX:minY;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> maxValue=(maxX>maxY)? maxX:maxY;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> std::cout << <span class="stringliteral">"min and max values: "</span> << minValue << <span class="stringliteral">", "</span> << maxValue << std::endl;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> nbin=maxValue-minValue+1;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> assert(nbin>1);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">//kernel density estimation as in http://en.wikipedia.org/wiki/Kernel_density_estimation</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span>(kde_opt[0]){</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> assert(band_opt[0]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> assert(band_opt[1]<imgReader.nrOfBand());</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> GDALProgressFunc pfnProgress;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordtype">double</span> stdDev1=0;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordtype">double</span> stdDev2=0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> rasterBand=imgReader.getRasterBand(band_opt[0]);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev1,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> rasterBand=imgReader.getRasterBand(band_opt[1]);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev2,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">double</span> estimatedSize=1.0*imgReader.getNvalid(band_opt[0])/down_opt[0]/down_opt[0];</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(random_opt[0]>0)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> estimatedSize*=random_opt[0]/100.0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> sigma=1.06*sqrt(stdDev1*stdDev2)*pow(estimatedSize,-0.2);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> assert(nbin);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">if</span>(sigma>0)</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> std::cout << <span class="stringliteral">"calculating 2d kernel density estimate with sigma "</span> << sigma << <span class="stringliteral">" for bands "</span> << band_opt[0] << <span class="stringliteral">" and "</span> << band_opt[1] << std::endl;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> std::cout << <span class="stringliteral">"calculating 2d histogram for bands "</span> << band_opt[0] << <span class="stringliteral">" and "</span> << band_opt[1] << std::endl;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> std::cout << <span class="stringliteral">"nbin: "</span> << nbin << std::endl;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> vector< vector<double> > output;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span>(maxX<=minX)</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> imgReader.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>(maxY<=minY)</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> imgReader.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span>(maxX<=minX){</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> std::ostringstream s;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minX>=maxX)"</span>;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span>(maxY<=minY){</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> std::ostringstream s;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minY>=maxY)"</span>;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> output.resize(nbin);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nbin;++i){</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> output[i].resize(nbin);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<nbin;++j)</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> output[i][j]=0;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> }</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">int</span> binX=0;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">int</span> binY=0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> vector<double> inputX(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> vector<double> inputY(imgReader.nrOfCol());</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> nvalid=0;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader.nrOfRow();++irow){</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span>(irow%down_opt[0])</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> imgReader.readData(inputX,GDT_Float64,irow,band_opt[0]);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> imgReader.readData(inputY,GDT_Float64,irow,band_opt[1]);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">if</span>(icol%down_opt[0])</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span>(random_opt[0]>0){</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> p*=100.0;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">if</span>(p>random_opt[0])</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span>(imgReader.isNoData(inputX[icol]))</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>(imgReader.isNoData(inputY[icol]))</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> ++nvalid;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(inputX[icol]>=maxX)</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> binX=nbin-1;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputX[icol]<=minX)</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> binX=0;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> binX=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputX[icol]-minX)/(maxX-minX)*nbin);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(inputY[icol]>=maxY)</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> binY=nbin-1;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputY[icol]<=minX)</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> binY=0;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> binY=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputY[icol]-minY)/(maxY-minY)*nbin);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> assert(binX>=0);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> assert(binX<output.size());</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> assert(binY>=0);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> assert(binY<output[binX].size());</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(sigma>0){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment">//create kde for Gaussian basis function</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment">//todo: speed up by calculating first and last bin with non-zero contriubtion...</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinX=0;ibinX<nbin;++ibinX){</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordtype">double</span> centerX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*ibinX/nbin;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordtype">double</span> pdfX=gsl_ran_gaussian_pdf(inputX[icol]-centerX, sigma);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinY=0;ibinY<nbin;++ibinY){</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="comment">//calculate \integral_ibinX^(ibinX+1)</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordtype">double</span> centerY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*ibinY/nbin;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">double</span> pdfY=gsl_ran_gaussian_pdf(inputY[icol]-centerY, sigma);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> output[ibinX][binY]+=pdfX*pdfY;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> }</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> }</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> ++output[binX][binY];</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> }</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> cout << <span class="stringliteral">"number of valid pixels: "</span> << nvalid << endl;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binX=0;binX<nbin;++binX){</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> cout << endl;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binY=0;binY<nbin;++binY){</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">double</span> binValueX=0;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(nbin==maxX-minX+1)</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> binValueX=minX+binX;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> binValueX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*(binX+0.5)/nbin;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">double</span> binValueY=0;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(nbin==maxY-minY+1)</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> binValueY=minY+binY;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> binValueY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*(binY+0.5)/nbin;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">double</span> value=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(output[binX][binY]);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span>(relative_opt[0])</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> value*=100.0/nvalid;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> cout << binValueX << <span class="stringliteral">" "</span> << binValueY << <span class="stringliteral">" "</span> << value << std::endl;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="comment">// double value=static_cast<double>(output[binX][binY])/nvalid;</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="comment">// cout << (maxX-minX)*bin/(nbin-1)+minX << " " << (maxY-minY)*bin/(nbin-1)+minY << " " << value << std::endl;</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span>(reg_opt[0]&&input_opt.size()<2){</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span>(band_opt.size()<2)</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordtype">double</span> r2=imgreg.getR2(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -r2 "</span> << r2 << std::endl;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">if</span>(regerr_opt[0]&&input_opt.size()<2){</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">if</span>(band_opt.size()<2)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">double</span> err=imgreg.getRMSE(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -rmse "</span> << err << std::endl;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(rmse_opt[0]&&input_opt.size()<2){</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(band_opt.size()<2)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordtype">double</span> err=imgreg.getRMSE(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> std::cout << <span class="stringliteral">" -rmse "</span> << err << std::endl;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">if</span>(preg_opt[0]&&input_opt.size()<2){</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span>(band_opt.size()<2)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordtype">double</span> r2=imgreg.pgetR2(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -r2 "</span> << r2 << std::endl;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> imgReader.close();</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">if</span>(reg_opt[0]&&(input_opt.size()>1)){</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">while</span>(band_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">while</span>(src_min_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> }</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">while</span>(src_max_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader1(input_opt[0]);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader2(input_opt[1]);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> imgReader1.setOffset(offset_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> imgReader1.setScale(scale_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> imgReader2.setOffset(offset_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> imgReader2.setScale(scale_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">if</span>(!inodata){</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> imgReader1.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> imgReader2.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordtype">double</span> r2=imgreg.getR2(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -r2 "</span> << r2 << std::endl;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> imgReader1.close();</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> imgReader2.close();</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">if</span>(preg_opt[0]&&(input_opt.size()>1)){</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">while</span>(band_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">while</span>(src_min_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">while</span>(src_max_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader1(input_opt[0]);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader2(input_opt[1]);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> imgReader1.setOffset(offset_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> imgReader1.setScale(scale_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> imgReader2.setOffset(offset_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> imgReader2.setScale(scale_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">if</span>(!inodata){</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> imgReader1.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> imgReader2.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">double</span> r2=imgreg.pgetR2(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -r2 "</span> << r2 << std::endl;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> imgReader1.close();</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> imgReader2.close();</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">if</span>(regerr_opt[0]&&(input_opt.size()>1)){</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">while</span>(band_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">while</span>(src_min_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">while</span>(src_max_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader1(input_opt[0]);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader2(input_opt[1]);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> imgReader1.setOffset(offset_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> imgReader1.setScale(scale_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> imgReader2.setOffset(offset_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> imgReader2.setScale(scale_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">if</span>(!inodata){</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> }</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> imgReader1.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> imgReader2.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordtype">double</span> err=imgreg.getRMSE(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> std::cout << <span class="stringliteral">"-c0 "</span> << c0 << <span class="stringliteral">" -c1 "</span> << c1 << <span class="stringliteral">" -rmse "</span> << err << std::endl;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> imgReader1.close();</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> imgReader2.close();</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span>(rmse_opt[0]&&(input_opt.size()>1)){</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> imgreg.setDown(down_opt[0]);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> imgreg.setThreshold(random_opt[0]);</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordtype">double</span> c0=0;<span class="comment">//offset</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordtype">double</span> c1=1;<span class="comment">//scale</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">while</span>(band_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">while</span>(src_min_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> }</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">while</span>(src_max_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader1(input_opt[0]);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader2(input_opt[1]);</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> imgReader1.setOffset(offset_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> imgReader1.setScale(scale_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> imgReader2.setOffset(offset_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> imgReader2.setScale(scale_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">if</span>(!inodata){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> imgReader1.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> imgReader2.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> }</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordtype">double</span> err=imgreg.getRMSE(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> std::cout << <span class="stringliteral">"-rmse "</span> << err << std::endl;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> imgReader1.close();</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> imgReader2.close();</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">if</span>(histogram2d_opt[0]&&(input_opt.size()>1)){</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">while</span>(band_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> band_opt.push_back(band_opt[0]);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">while</span>(src_min_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">while</span>(src_max_opt.size()<input_opt.size())</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader1(input_opt[0]);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> imgReader2(input_opt[1]);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">if</span>(offset_opt.size())</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> imgReader1.setOffset(offset_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">if</span>(scale_opt.size())</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> imgReader1.setScale(scale_opt[0],band_opt[0]);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> imgReader2.setOffset(offset_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> imgReader2.setScale(scale_opt[1],band_opt[1]);</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> inodata=0;inodata<nodata_opt.size();++inodata){</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span>(!inodata){</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];<span class="comment">//only single no data can be set in GDALRasterBand (used for ComputeStatistics)</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> }</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> imgReader1.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> imgReader2.pushNoDataValue(nodata_opt[inodata]);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> imgReader1.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> imgReader2.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> cout << <span class="stringliteral">"minX: "</span> << minX << endl;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> cout << <span class="stringliteral">"maxX: "</span> << maxX << endl;</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> cout << <span class="stringliteral">"minY: "</span> << minY << endl;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> cout << <span class="stringliteral">"maxY: "</span> << maxY << endl;</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> }</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> minX=src_min_opt[0];</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> minY=src_min_opt[1];</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> maxX=src_max_opt[0];</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> maxY=src_max_opt[1];</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> }</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> nbin=(nbin_opt.size())? nbin_opt[0]:0;</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">if</span>(nbin<=1){</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> std::cerr << <span class="stringliteral">"Warning: number of bins not defined, calculating bins from min and max value"</span> << std::endl;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">// imgReader1.getMinMax(minX,maxX,band_opt[0]);</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="comment">// imgReader2.getMinMax(minY,maxY,band_opt[0]);</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span>(minX>=maxX)</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> imgReader1.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">if</span>(minY>=maxY)</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> imgReader2.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> minValue=(minX<minY)? minX:minY;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> maxValue=(maxX>maxY)? maxX:maxY;</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> std::cout << <span class="stringliteral">"min and max values: "</span> << minValue << <span class="stringliteral">", "</span> << maxValue << std::endl;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> nbin=maxValue-minValue+1;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> }</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> assert(nbin>1);</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="comment">//kernel density estimation as in http://en.wikipedia.org/wiki/Kernel_density_estimation</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">if</span>(kde_opt[0]){</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> GDALProgressFunc pfnProgress;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordtype">void</span>* pProgressData;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> GDALRasterBand* rasterBand;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordtype">double</span> stdDev1=0;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keywordtype">double</span> stdDev2=0;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> rasterBand=imgReader1.getRasterBand(band_opt[0]);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev1,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> rasterBand=imgReader2.getRasterBand(band_opt[0]);</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev2,pfnProgress,pProgressData);</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="comment">//todo: think of smarter way how to estimate size (nodata!)</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordtype">double</span> estimatedSize=1.0*imgReader.getNvalid(band_opt[0])/down_opt[0]/down_opt[0];</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">if</span>(random_opt[0]>0)</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> estimatedSize*=random_opt[0]/100.0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> sigma=1.06*sqrt(stdDev1*stdDev2)*pow(estimatedSize,-0.2);</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> }</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> assert(nbin);</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">if</span>(sigma>0)</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> std::cout << <span class="stringliteral">"calculating 2d kernel density estimate with sigma "</span> << sigma << <span class="stringliteral">" for datasets "</span> << input_opt[0] << <span class="stringliteral">" and "</span> << input_opt[1] << std::endl;</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> std::cout << <span class="stringliteral">"calculating 2d histogram for datasets "</span> << input_opt[0] << <span class="stringliteral">" and "</span> << input_opt[1] << std::endl;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> std::cout << <span class="stringliteral">"nbin: "</span> << nbin << std::endl;</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> vector< vector<double> > output;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">if</span>(maxX<=minX)</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> imgReader1.getMinMax(minX,maxX,band_opt[0]);</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">if</span>(maxY<=minY)</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> imgReader2.getMinMax(minY,maxY,band_opt[1]);</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(maxX<=minX){</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> std::ostringstream s;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minX>=maxX)"</span>;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">if</span>(maxY<=minY){</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> std::ostringstream s;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> s<<<span class="stringliteral">"Error: could not calculate distribution (minY>=maxY)"</span>;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">throw</span>(s.str());</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> }</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> cout << <span class="stringliteral">"minX: "</span> << minX << endl;</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> cout << <span class="stringliteral">"maxX: "</span> << maxX << endl;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> cout << <span class="stringliteral">"minY: "</span> << minY << endl;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> cout << <span class="stringliteral">"maxY: "</span> << maxY << endl;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> output.resize(nbin);</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nbin;++i){</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> output[i].resize(nbin);</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<nbin;++j)</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> output[i][j]=0;</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordtype">int</span> binX=0;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordtype">int</span> binY=0;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> vector<double> inputX(imgReader1.nrOfCol());</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> vector<double> inputY(imgReader2.nrOfCol());</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordtype">double</span> nvalid=0;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordtype">double</span> geoX=0;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordtype">double</span> geoY=0;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordtype">double</span> icol1=0;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordtype">double</span> irow1=0;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordtype">double</span> icol2=0;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="keywordtype">double</span> irow2=0;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<imgReader1.nrOfRow();++irow){</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keywordflow">if</span>(irow%down_opt[0])</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> irow1=irow;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> imgReader1.image2geo(icol1,irow1,geoX,geoY);</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> imgReader2.geo2image(geoX,geoY,icol2,irow2);</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> irow2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(irow2);</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> imgReader1.readData(inputX,GDT_Float64,irow1,band_opt[0]);</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> imgReader2.readData(inputY,GDT_Float64,irow2,band_opt[1]);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<imgReader.nrOfCol();++icol){</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">if</span>(icol%down_opt[0])</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> icol1=icol;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">if</span>(random_opt[0]>0){</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="keywordtype">double</span> p=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rand())/(RAND_MAX);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> p*=100.0;</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">if</span>(p>random_opt[0])</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">continue</span>;<span class="comment">//do not select for now, go to next column</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">if</span>(imgReader1.isNoData(inputX[icol]))</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> imgReader1.image2geo(icol1,irow1,geoX,geoY);</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> imgReader2.geo2image(geoX,geoY,icol2,irow2);</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> icol2=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(icol2);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordflow">if</span>(imgReader2.isNoData(inputY[icol2]))</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="comment">// ++nvalid;</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">if</span>(inputX[icol1]>=maxX)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> binX=nbin-1;</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputX[icol]<=minX)</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> binX=0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> binX=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputX[icol1]-minX)/(maxX-minX)*nbin);</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">if</span>(inputY[icol2]>=maxY)</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> binY=nbin-1;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(inputY[icol2]<=minY)</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> binY=0;</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> binY=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(inputY[icol2]-minY)/(maxY-minY)*nbin);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> assert(binX>=0);</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> assert(binX<output.size());</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> assert(binY>=0);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> assert(binY<output[binX].size());</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">if</span>(sigma>0){</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment">//create kde for Gaussian basis function</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment">//todo: speed up by calculating first and last bin with non-zero contriubtion...</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinX=0;ibinX<nbin;++ibinX){</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordtype">double</span> centerX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*ibinX/nbin;</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordtype">double</span> pdfX=gsl_ran_gaussian_pdf(inputX[icol1]-centerX, sigma);</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibinY=0;ibinY<nbin;++ibinY){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="comment">//calculate \integral_ibinX^(ibinX+1)</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordtype">double</span> centerY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*ibinY/nbin;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="keywordtype">double</span> pdfY=gsl_ran_gaussian_pdf(inputY[icol2]-centerY, sigma);</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> output[ibinX][binY]+=pdfX*pdfY;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> nvalid+=pdfX*pdfY;</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> }</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> }</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> }</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> ++output[binX][binY];</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> ++nvalid;</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> }</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> }</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> }</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> cout << <span class="stringliteral">"number of valid pixels: "</span> << nvalid << endl;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binX=0;binX<nbin;++binX){</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> cout << endl;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binY=0;binY<nbin;++binY){</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordtype">double</span> binValueX=0;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span>(nbin==maxX-minX+1)</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> binValueX=minX+binX;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> binValueX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*(binX+0.5)/nbin;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordtype">double</span> binValueY=0;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">if</span>(nbin==maxY-minY+1)</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> binValueY=minY+binY;</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> binValueY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*(binY+0.5)/nbin;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keywordtype">double</span> value=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(output[binX][binY]);</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">if</span>(relative_opt[0]||kde_opt[0])</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> value*=100.0/nvalid;</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> cout << binValueX << <span class="stringliteral">" "</span> << binValueY << <span class="stringliteral">" "</span> << value << std::endl;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="comment">// double value=static_cast<double>(output[binX][binY])/nvalid;</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="comment">// cout << (maxX-minX)*bin/(nbin-1)+minX << " " << (maxY-minY)*bin/(nbin-1)+minY << " " << value << std::endl;</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> }</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> imgReader1.close();</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> imgReader2.close();</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> }</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">if</span>(!histogram_opt[0]||histogram2d_opt[0])</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> }</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">// int nband=(band_opt.size()) ? band_opt.size() : imgReader.nrOfBand();</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// const char* pszMessage;</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// void* pProgressArg=NULL;</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment">// GDALProgressFunc pfnProgress=GDALTermProgress;</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">// double progress=0;</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// srand(time(NULL));</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment">// statfactory::StatFactory stat;</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment">// imgregression::ImgRegression imgreg;</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">// pfnProgress(progress,pszMessage,pProgressArg);</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">// for(irow=0;irow<classReader.nrOfRow();++irow){</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">// if(irow%down_opt[0])</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// // classReader.readData(classBuffer,GDT_Int32,irow);</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="comment">// classReader.readData(classBuffer,GDT_Float64,irow);</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment">// double x,y;//geo coordinates</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment">// double iimg,jimg;//image coordinates in img image</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment">// for(icol=0;icol<classReader.nrOfCol();++icol){</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="comment">// if(icol%down_opt[0])</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="comment">// if(rand_opt[0]>0){</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">// gsl_rng* r=stat.getRandomGenerator(time(NULL));</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="comment">// //todo: init random number generator using time...</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="comment">// if(verbose_opt[0])</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment">// std::cout << "generating " << rand_opt[0] << " random numbers: " << std::endl;</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment">// for(unsigned int i=0;i<rand_opt[0];++i)</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment">// std::cout << i << " " << stat.getRandomValue(r,randdist_opt[0],randa_opt[0],randb_opt[0]) << std::endl;</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment">// imgreg.setDown(down_opt[0]);</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment">// imgreg.setThreshold(threshold_opt[0]);</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment">// double c0=0;//offset</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="comment">// double c1=1;//scale</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="comment">// double err=uncertNodata_opt[0];//start with high initial value in case we do not have first ob err=imgreg.getRMSE(imgReaderModel1,imgReader,c0,c1,verbose_opt[0]);</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="comment">// int nband=band_opt.size();</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment">// if(band_opt[0]<0)</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment">// nband=imgReader.nrOfBand();</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment">// for(int iband=0;iband<nband;++iband){</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment">// unsigned short band_opt[iband]=(band_opt[0]<0)? iband : band_opt[iband];</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">// if(minmax_opt[0]||min_opt[0]||max_opt[0]){</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment">// assert(band_opt[iband]<imgReader.nrOfBand());</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment">// if((ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size())&&(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment">// double uli,ulj,lri,lrj;</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// imgReader.geo2image(ulx_opt[0],uly_opt[0],uli,ulj);</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment">// imgReader.geo2image(lrx_opt[0],lry_opt[0],lri,lrj);</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment">// imgReader.getMinMax(static_cast<int>(uli),static_cast<int>(lri),static_cast<int>(ulj),static_cast<int>(lrj),band_opt[iband],minValue,maxValue);</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment">// imgReader.getMinMax(minValue,maxValue,band_opt[iband],true);</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment">// if(minmax_opt[0])</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment">// std::cout << "-min " << minValue << " -max " << maxValue << " ";</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment">// else{</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment">// if(min_opt[0])</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">// std::cout << "-min " << minValue << " ";</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="comment">// if(max_opt[0])</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">// std::cout << "-max " << maxValue << " ";</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment">// if(relative_opt[0])</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">// hist_opt[0]=true;</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">// if(hist_opt[0]){</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">// assert(band_opt[0]<imgReader.nrOfBand());</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment">// unsigned int nbin=(nbin_opt.size())? nbin_opt[0]:0;</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">// std::vector<unsigned long int> output;</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment">// minValue=0;</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">// maxValue=0;</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment">// //todo: optimize such that getMinMax is only called once...</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">// imgReader.getMinMax(minValue,maxValue,band_opt[0]);</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">// if(src_min_opt.size())</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">// minValue=src_min_opt[0];</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment">// if(src_max_opt.size())</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="comment">// maxValue=src_max_opt[0];</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">// unsigned long int nsample=imgReader.getHistogram(output,minValue,maxValue,nbin,band_opt[0]);</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment">// std::cout.precision(10);</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">// for(int bin=0;bin<nbin;++bin){</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">// double binValue=0;</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">// if(nbin==maxValue-minValue+1)</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment">// binValue=minValue+bin;</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="comment">// binValue=minValue+static_cast<double>(maxValue-minValue)*(bin+0.5)/nbin;</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment">// std::cout << binValue << " ";</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="comment">// if(relative_opt[0])</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">// std::cout << 100.0*static_cast<double>(output[bin])/static_cast<double>(nsample) << std::endl;</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">// std::cout << static_cast<double>(output[bin]) << std::endl;</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">// }</span></div>
+<div class="ttc" id="classimgregression_1_1ImgRegression_html"><div class="ttname"><a href="classimgregression_1_1ImgRegression.html">imgregression::ImgRegression</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgRegression_8h_source.html#l00030">ImgRegression.h:30</a></div></div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstatascii.html b/doc/html/pkstatascii.html
new file mode 100644
index 0000000..ee2f981
--- /dev/null
+++ b/doc/html/pkstatascii.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkstatascii</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstatascii </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to calculate basic statistics from text file </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkstatascii -i input [-c column]* </code></p>
+<p><code></code></p>
+<p><code> Options: [-size] [-rnd number [-dist function] [-rnda value -rndb value]] [-mean] [-median] [-var] [-skew] [-stdev] [-sum] [-mm] [-min] [-max] [-hist [-nbin value] [-rel] [-kde]] [-hist2d [-nbin value] [-rel] [-kde]] [-cor] [-rmse] [-reg] [-regerr]</code></p>
+<p><code> Advanced options: [-srcmin value] [-srcmax value] [-fs separator] [-r startrow [-r endrow]] [-o [-t]] [–comment character]</code></p>
+<p><code></code></p>
+<h1><a class="anchor" id="pkstatascii_description"></a>
+Description</h1>
+<p>The utility pkstatascii calculates basic statistics of a data series in a text file.</p>
+<h1><a class="anchor" id="pkstatascii_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>name of the input text file </td></tr>
+<tr>
+<td>c </td><td>column </td><td>int </td><td>0 </td><td>column nr, starting from 0 </td></tr>
+<tr>
+<td>size </td><td>size </td><td>bool </td><td>false </td><td>sample size </td></tr>
+<tr>
+<td>rnd </td><td>rnd </td><td>unsigned int </td><td>0 </td><td>generate random numbers </td></tr>
+<tr>
+<td>dist </td><td>dist </td><td>std::string </td><td>gaussian </td><td>distribution for generating random numbers, see <a href="http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320">http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320</a> (only uniform and Gaussian supported yet) </td></tr>
+<tr>
+<td>rnda </td><td>rnda </td><td>double </td><td>0 </td><td>first parameter for random distribution (mean value in case of Gaussian) </td></tr>
+<tr>
+<td>rndb </td><td>rndb </td><td>double </td><td>1 </td><td>second parameter for random distribution (standard deviation in case of Gaussian) </td></tr>
+<tr>
+<td>mean </td><td>mean </td><td>bool </td><td>false </td><td>calculate median </td></tr>
+<tr>
+<td>median </td><td>median </td><td>bool </td><td>false </td><td>calculate median </td></tr>
+<tr>
+<td>var </td><td>var </td><td>bool </td><td>false </td><td>calculate variance </td></tr>
+<tr>
+<td>stdev </td><td>stdev </td><td>bool </td><td>false </td><td>calculate standard deviation </td></tr>
+<tr>
+<td>skew </td><td>skewness </td><td>bool </td><td>false </td><td>calculate skewness </td></tr>
+<tr>
+<td>kurt </td><td>kurtosis </td><td>bool </td><td>false </td><td>calculate kurtosis </td></tr>
+<tr>
+<td>sum </td><td>sum </td><td>bool </td><td>false </td><td>calculate sum of column </td></tr>
+<tr>
+<td>mm </td><td>minmax </td><td>bool </td><td>false </td><td>calculate minimum and maximum value </td></tr>
+<tr>
+<td>min </td><td>min </td><td>bool </td><td>false </td><td>calculate minimum value </td></tr>
+<tr>
+<td>max </td><td>max </td><td>bool </td><td>false </td><td>calculate maximum value </td></tr>
+<tr>
+<td>hist </td><td>hist </td><td>bool </td><td>false </td><td>calculate histogram </td></tr>
+<tr>
+<td>nbin </td><td>nbin </td><td>short </td><td></td><td>number of bins to calculate histogram </td></tr>
+<tr>
+<td>rel </td><td>relative </td><td>bool </td><td>false </td><td>use percentiles for histogram to calculate histogram </td></tr>
+<tr>
+<td>kde </td><td>kde </td><td>bool </td><td>false </td><td>Use <a class="el" href="classKernel.html">Kernel</a> density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb </td></tr>
+<tr>
+<td>hist2d </td><td>hist2d </td><td>bool </td><td>false </td><td>calculate 2-dimensional histogram based on two columns </td></tr>
+<tr>
+<td>cor </td><td>correlation </td><td>bool </td><td>false </td><td>calculate Pearson produc-moment correlation coefficient between two columns (defined by -c <col1> -c <col2> </td></tr>
+<tr>
+<td>rmse </td><td>rmse </td><td>bool </td><td>false </td><td>calculate root mean square error between two columns (defined by -c <col1> -c <col2> </td></tr>
+<tr>
+<td>reg </td><td>regression </td><td>bool </td><td>false </td><td>calculate linear regression between two columns and get correlation coefficient (defined by -c <col1> -c <col2> </td></tr>
+<tr>
+<td>regerr </td><td>regerr </td><td>bool </td><td>false </td><td>calculate linear regression between two columns and get root mean square error (defined by -c <col1> -c <col2> </td></tr>
+<tr>
+<td>src_min </td><td>src_min </td><td>double </td><td></td><td>start reading source from this minimum value </td></tr>
+<tr>
+<td>src_max </td><td>src_max </td><td>double </td><td></td><td>stop reading source from this maximum value </td></tr>
+<tr>
+<td>fs </td><td>fs </td><td>char </td><td></td><td>field separator. </td></tr>
+<tr>
+<td>r </td><td>range </td><td>int </td><td>0 </td><td>rows to start/end reading. Use -r 1 -r 10 to read first 10 rows where first row is header. Use 0 to read all rows with no header. </td></tr>
+<tr>
+<td>o </td><td>output </td><td>bool </td><td>false </td><td>output the selected columns </td></tr>
+<tr>
+<td>t </td><td>transpose </td><td>bool </td><td>false </td><td>transpose input ascii vector (use in combination with –output) </td></tr>
+<tr>
+<td>comment </td><td>comment </td><td>char </td><td># </td><td>comment character </td></tr>
+</table>
+Usage: pkstatascii -i input [-c column]* </li>
+</ul>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstatascii_8cc_source.html b/doc/html/pkstatascii_8cc_source.html
new file mode 100644
index 0000000..290bd15
--- /dev/null
+++ b/doc/html/pkstatascii_8cc_source.html
@@ -0,0 +1,488 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkstatascii.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstatascii.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkstatascii.cc: program to calculate basic statistics from text file</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "fileclasses/FileReaderAscii.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>,<span class="stringliteral">"input"</span>,<span class="stringliteral">"name of the input text file"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<char></a> fs_opt(<span class="stringliteral">"fs"</span>,<span class="stringliteral">"fs"</span>,<span class="stringliteral">"field separator."</span>,<span class="charliteral">' '</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<char></a> comment_opt(<span class="stringliteral">"comment"</span>,<span class="stringliteral">"comment"</span>,<span class="stringliteral">"comment character"</span>,<span class="charliteral">'#'</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> output_opt(<span class="stringliteral">"o"</span>,<span class="stringliteral">"output"</span>,<span class="stringliteral">"output the selected columns"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> transpose_opt(<span class="stringliteral">"t"</span>,<span class="stringliteral">"transpose"</span>,<span class="stringliteral">"transpose input ascii vector (use in combination with --output)"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> col_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"column"</span>, <span class="stringliteral">"column nr, starting from 0"</span>, 0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> range_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"range"</span>, <span class="stringliteral">"rows to start/end reading. Use -r 1 -r 10 to read first 10 rows where first row is header. Use 0 to read all rows with no header."</span>, 0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> size_opt(<span class="stringliteral">"size"</span>,<span class="stringliteral">"size"</span>,<span class="stringliteral">"sample size"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> rand_opt(<span class="stringliteral">"rnd"</span>, <span class="stringliteral">"rnd"</span>, <span class="stringliteral">"generate random numbers"</span>, 0);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> randdist_opt(<span class="stringliteral">"dist"</span>, <span class="stringliteral">"dist"</span>, <span class="stringliteral">"distribution for generating random numbers, see http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320 (only uniform and Gaussian supported yet)"</span>, <span class="stringlite [...]
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> randa_opt(<span class="stringliteral">"rnda"</span>, <span class="stringliteral">"rnda"</span>, <span class="stringliteral">"first parameter for random distribution (mean value in case of Gaussian)"</span>, 0);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> randb_opt(<span class="stringliteral">"rndb"</span>, <span class="stringliteral">"rndb"</span>, <span class="stringliteral">"second parameter for random distribution (standard deviation in case of Gaussian)"</span>, 1);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> mean_opt(<span class="stringliteral">"mean"</span>,<span class="stringliteral">"mean"</span>,<span class="stringliteral">"calculate median"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> median_opt(<span class="stringliteral">"median"</span>,<span class="stringliteral">"median"</span>,<span class="stringliteral">"calculate median"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> var_opt(<span class="stringliteral">"var"</span>,<span class="stringliteral">"var"</span>,<span class="stringliteral">"calculate variance"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> skewness_opt(<span class="stringliteral">"skew"</span>,<span class="stringliteral">"skewness"</span>,<span class="stringliteral">"calculate skewness"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> kurtosis_opt(<span class="stringliteral">"kurt"</span>,<span class="stringliteral">"kurtosis"</span>,<span class="stringliteral">"calculate kurtosis"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stdev_opt(<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"calculate standard deviation"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> sum_opt(<span class="stringliteral">"sum"</span>,<span class="stringliteral">"sum"</span>,<span class="stringliteral">"calculate sum of column"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> minmax_opt(<span class="stringliteral">"mm"</span>,<span class="stringliteral">"minmax"</span>,<span class="stringliteral">"calculate minimum and maximum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> min_opt(<span class="stringliteral">"min"</span>,<span class="stringliteral">"min"</span>,<span class="stringliteral">"calculate minimum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> max_opt(<span class="stringliteral">"max"</span>,<span class="stringliteral">"max"</span>,<span class="stringliteral">"calculate maximum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_min_opt(<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"start reading source from this minimum value"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_max_opt(<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"stop reading source from this maximum value"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> histogram_opt(<span class="stringliteral">"hist"</span>,<span class="stringliteral">"hist"</span>,<span class="stringliteral">"calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> histogram2d_opt(<span class="stringliteral">"hist2d"</span>,<span class="stringliteral">"hist2d"</span>,<span class="stringliteral">"calculate 2-dimensional histogram based on two columns"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> nbin_opt(<span class="stringliteral">"nbin"</span>,<span class="stringliteral">"nbin"</span>,<span class="stringliteral">"number of bins to calculate histogram"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> relative_opt(<span class="stringliteral">"rel"</span>,<span class="stringliteral">"relative"</span>,<span class="stringliteral">"use percentiles for histogram to calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> kde_opt(<span class="stringliteral">"kde"</span>,<span class="stringliteral">"kde"</span>,<span class="stringliteral">"Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> correlation_opt(<span class="stringliteral">"cor"</span>,<span class="stringliteral">"correlation"</span>,<span class="stringliteral">"calculate Pearson produc-moment correlation coefficient between two columns (defined by -c <col1> -c <col2>"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> rmse_opt(<span class="stringliteral">"rmse"</span>,<span class="stringliteral">"rmse"</span>,<span class="stringliteral">"calculate root mean square error between two columns (defined by -c <col1> -c <col2>"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> reg_opt(<span class="stringliteral">"reg"</span>,<span class="stringliteral">"regression"</span>,<span class="stringliteral">"calculate linear regression between two columns and get correlation coefficient (defined by -c <col1> -c <col2>"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> regerr_opt(<span class="stringliteral">"regerr"</span>,<span class="stringliteral">"regerr"</span>,<span class="stringliteral">"calculate linear regression between two columns and get root mean square error (defined by -c <col1> -c <col2>"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"verbose mode when positive"</span>, 0,2);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> src_min_opt.setHide(1);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> src_max_opt.setHide(1);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> fs_opt.setHide(1);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> range_opt.setHide(1);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> output_opt.setHide(1);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> transpose_opt.setHide(1);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> comment_opt.setHide(1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">//mandatory options</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> col_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">//optional options</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> size_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> rand_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> randdist_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> randa_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> randb_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> mean_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> median_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> var_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> stdev_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> skewness_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> kurtosis_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> sum_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> minmax_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> histogram_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> nbin_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> relative_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> kde_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> histogram2d_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> correlation_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> rmse_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> reg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> regerr_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">//advanced options</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> src_min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> src_max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> fs_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> range_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> transpose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> comment_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> exit(0);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> cout << endl;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> cout << <span class="stringliteral">"Usage: pkstatascii -i input [-c column]*"</span> << endl;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cout << endl;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(src_min_opt.size()){</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">while</span>(src_min_opt.size()<col_opt.size())</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> src_min_opt.push_back(src_min_opt[0]);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span>(src_max_opt.size()){</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">while</span>(src_max_opt.size()<col_opt.size())</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> src_max_opt.push_back(src_max_opt[0]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">if</span>(rand_opt[0]>0){</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gsl_rng* r=stat.getRandomGenerator(time(NULL));</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">//todo: init random number generator using time...</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> std::cout << <span class="stringliteral">"generating "</span> << rand_opt[0] << <span class="stringliteral">" random numbers: "</span> << std::endl;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0;i<rand_opt[0];++i)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> std::cout << i << <span class="stringliteral">" "</span> << stat.getRandomValue(r,randdist_opt[0],randa_opt[0],randb_opt[0]) << std::endl;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> vector< vector<double> > dataVector(col_opt.size());</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> vector< vector<double> > statVector(col_opt.size());</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(!input_opt.size())</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> exit(0);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <a class="code" href="classFileReaderAscii.html">FileReaderAscii</a> asciiReader(input_opt[0]);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> asciiReader.setFieldSeparator(fs_opt[0]);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> asciiReader.setComment(comment_opt[0]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> asciiReader.setMinRow(range_opt[0]);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(range_opt.size()>1)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> asciiReader.setMaxRow(range_opt[1]);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> asciiReader.readData(dataVector,col_opt);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> assert(dataVector.size());</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbin=0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(nbin_opt.size())</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> nbin=nbin_opt[0];</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span>(histogram_opt[0]){</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> stat.minmax(dataVector[0],dataVector[0].begin(),dataVector[0].end(),minValue,maxValue);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span>(src_min_opt.size())</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> minValue=src_min_opt[0];</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span>(src_max_opt.size())</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> maxValue=src_max_opt[0];</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span>(nbin<1){</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> std::cerr << <span class="stringliteral">"Warning: number of bins not defined, calculating bins from min and max value"</span> << std::endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> nbin=maxValue-minValue+1;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">double</span> minX=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordtype">double</span> minY=0;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">double</span> maxX=0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">double</span> maxY=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(histogram2d_opt[0]){</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> assert(col_opt.size()==2);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(nbin<1){</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> std::cerr << <span class="stringliteral">"Warning: number of bins not defined, calculating bins from min and max value"</span> << std::endl;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> stat.minmax(dataVector[0],dataVector[0].begin(),dataVector[0].end(),minX,maxX);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> stat.minmax(dataVector[1],dataVector[1].begin(),dataVector[1].end(),minY,maxY);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>(src_min_opt.size())</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> minX=src_min_opt[0];</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span>(src_min_opt.size()>1)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> minY=src_min_opt[1];</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span>(src_max_opt.size())</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> maxX=src_max_opt[0];</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">if</span>(src_max_opt.size()>1)</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> maxY=src_max_opt[1];</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> minValue=(minX<minY)? minX:minY;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> maxValue=(maxX>maxY)? maxX:maxY;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> std::cout << <span class="stringliteral">"min and max values: "</span> << minValue << <span class="stringliteral">", "</span> << maxValue << std::endl;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> nbin=maxValue-minValue+1;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<col_opt.size();++icol){</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(!dataVector[icol].size()){</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> std::cerr << <span class="stringliteral">"Warning: dataVector["</span> << icol << <span class="stringliteral">"] is empty"</span> << std::endl;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(size_opt[0])</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> cout << <span class="stringliteral">"sample size column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << dataVector[icol].size() << endl;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>(mean_opt[0])</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> cout << <span class="stringliteral">"mean value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.mean(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span>(var_opt[0])</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> cout << <span class="stringliteral">"variance value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.var(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(stdev_opt[0])</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> cout << <span class="stringliteral">"standard deviation column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << sqrt(stat.var(dataVector[icol])) << endl;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span>(skewness_opt[0])</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> cout << <span class="stringliteral">"skewness value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.skewness(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span>(kurtosis_opt[0])</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> cout << <span class="stringliteral">"kurtosis value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.kurtosis(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span>(sum_opt[0]){</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> cout << setprecision(2);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> cout << fixed << <span class="stringliteral">"sum column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << (stat.sum(dataVector[icol])) << endl;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(median_opt[0])</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> cout << <span class="stringliteral">"median value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.median(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(minmax_opt[0]){</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> cout << <span class="stringliteral">"min value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.mymin(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> cout << <span class="stringliteral">"max value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.mymax(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(min_opt[0])</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> cout << <span class="stringliteral">"min value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.mymin(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span>(max_opt[0])</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> cout << <span class="stringliteral">"max value column "</span> << col_opt[icol] << <span class="stringliteral">": "</span> << stat.mymax(dataVector[icol]) << endl;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(histogram_opt[0]){</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">//todo: support kernel density function and estimate sigma as in practical estimate of the bandwith in http://en.wikipedia.org/wiki/Kernel_density_estimation</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>(kde_opt[0]){<span class="comment">//.size()){</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// if(kde_opt[0]>0)</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// sigma=kde_opt[0];</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> sigma=1.06*sqrt(stat.var(dataVector[icol]))*pow(dataVector[icol].size(),-0.2);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> assert(nbin);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span>(sigma>0)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> std::cout << <span class="stringliteral">"calculating kernel density estimate with sigma "</span> << sigma << <span class="stringliteral">" for col "</span> << icol << std::endl;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> std::cout << <span class="stringliteral">"calculating histogram for col "</span> << icol << std::endl;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// cout << "debug0" << endl;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// cout << "dataVector.size(): " << dataVector.size() << endl;</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// cout << "statVector.size(): " << statVector.size() << endl;</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// double theMinValue=0;</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// double theMaxValue=0;</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment">// stat.minmax(dataVector[icol],dataVector[icol].begin(),dataVector[icol].end(),theMinValue,theMaxValue);</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">// if(minValue<maxValue&&minValue>theMinValue)</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">// theMinValue=minValue;</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">// if(minValue<maxValue&&maxValue<theMaxValue)</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">// theMaxValue=maxValue;</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">// //todo: check...</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">// minValue=theMinValue;</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">// maxValue=theMaxValue;</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">// if(maxValue<=minValue){</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">// std::ostringstream s;</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">// s<<"Error: could not calculate distribution (min>=max)";</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">// throw(s.str());</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">// assert(nbin);</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// assert(dataVector[icol].size());</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">// if(statVector[icol].size()!=nbin){</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="comment">// statVector[icol].resize(nbin);</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">// for(int i=0;i<nbin;statVector[icol][i++]=0);</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// typename std::vector<double>::const_iterator it;</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// for(it=dataVector[icol].begin();it!=dataVector[icol].end();++it){</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// if(*it<minValue)</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// if(*it>maxValue)</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">// if(stat.isNoData(*it))</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">// continue;</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">// int theBin=0;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// if(*it==maxValue)</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment">// theBin=nbin-1;</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">// else if(*it>minValue && *it<maxValue)</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">// theBin=static_cast<int>(static_cast<double>((nbin-1)*(*it)-minValue)/(maxValue-minValue));</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">// assert(theBin<statVector[icol].size());</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment">// ++statVector[icol][theBin];</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// // if(*it==maxValue)</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment">// // ++statVector[icol][nbin-1];</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment">// // else if(*it>=minValue && *it<maxValue)</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">// // ++statVector[icol][static_cast<int>(static_cast<double>((*it)-minValue)/(maxValue-minValue)*nbin)];</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// exit(0);</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment">//end test</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> stat.distribution(dataVector[icol],dataVector[icol].begin(),dataVector[icol].end(),statVector[icol],nbin,minValue,maxValue,sigma);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> std::cout << <span class="stringliteral">"min and max values: "</span> << minValue << <span class="stringliteral">", "</span> << maxValue << std::endl;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">if</span>(correlation_opt[0]){</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> assert(dataVector.size()==2);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> cout << <span class="stringliteral">"correlation between columns "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << <span class="stringliteral">": "</span> << stat.correlation(dataVector[0],dataVector[1]) << endl;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span>(rmse_opt[0]){</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> assert(dataVector.size()==2);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> cout << <span class="stringliteral">"root mean square error between columns "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << <span class="stringliteral">": "</span> << stat.rmse(dataVector[0],dataVector[1]) << endl;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>(reg_opt[0]){</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> assert(dataVector.size()==2);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordtype">double</span> c0=0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">double</span> c1=0;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">double</span> r2=stat.linear_regression(dataVector[0],dataVector[1],c0,c1);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> cout << <span class="stringliteral">"linear regression between columns: "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << <span class="stringliteral">": "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> << [...]
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span>(regerr_opt[0]){</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> assert(dataVector.size()==2);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordtype">double</span> c0=0;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">double</span> c1=0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">double</span> err=stat.linear_regression_err(dataVector[0],dataVector[1],c0,c1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> cout << <span class="stringliteral">"linear regression between columns: "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << <span class="stringliteral">": "</span> << c0 << <span class="stringliteral">"+"</span> << c1 << <span class="stringliteral">" * x "</span> <&l [...]
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> cout << c0 << <span class="stringliteral">" "</span> << c1 << <span class="stringliteral">" "</span> << err << endl;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(histogram_opt[0]){</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<statVector.begin()->size();++irow){</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">double</span> binValue=0;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">if</span>(nbin==maxValue-minValue+1)</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> binValue=minValue+irow;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> binValue=minValue+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxValue-minValue)*(irow+0.5)/nbin;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> std::cout << binValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// std::cout << minValue+static_cast<double>(maxValue-minValue)*(irow+0.5)/nbin << " ";</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<col_opt.size();++icol){</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">if</span>(relative_opt[0])</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> std::cout << 100.0*<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(statVector[icol][irow])/static_cast<double>(dataVector[icol].size());</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> std::cout << statVector[icol][irow];</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span>(icol<col_opt.size()-1)</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> cout << endl;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(histogram2d_opt[0]){</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> assert(nbin);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> assert(dataVector.size()==2);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> assert(dataVector[0].size()==dataVector[1].size());</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment">//kernel density estimation as in http://en.wikipedia.org/wiki/Kernel_density_estimation</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">if</span>(kde_opt[0]){</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">// if(kde_opt[0]>0)</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="comment">// sigma=kde_opt[0];</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> sigma=1.06*sqrt(sqrt(stat.var(dataVector[0]))*sqrt(stat.var(dataVector[1])))*pow(dataVector[0].size(),-0.2);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> assert(nbin);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span>(verbose_opt[0]){</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">if</span>(sigma>0)</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> std::cout << <span class="stringliteral">"calculating 2d kernel density estimate with sigma "</span> << sigma << <span class="stringliteral">" for cols "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << std::endl;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> std::cout << <span class="stringliteral">"calculating 2d histogram for cols "</span> << col_opt[0] << <span class="stringliteral">" and "</span> << col_opt[1] << std::endl;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> std::cout << <span class="stringliteral">"nbin: "</span> << nbin << std::endl;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> std::vector< std::vector<double> > histVector;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> stat.distribution2d(dataVector[0],dataVector[1],histVector,nbin,minX,maxX,minY,maxY,sigma);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binX=0;binX<nbin;++binX){</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> binY=0;binY<nbin;++binY){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordtype">double</span> binValueX=0;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>(nbin==maxX-minX+1)</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> binValueX=minX+binX;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> binValueX=minX+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxX-minX)*(binX+0.5)/nbin;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">double</span> binValueY=0;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span>(nbin==maxY-minY+1)</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> binValueY=minY+binY;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> binValueY=minY+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxY-minY)*(binY+0.5)/nbin;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordtype">double</span> value=0;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> value=<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(histVector[binX][binY])/dataVector[0].size();</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> std::cout << binValueX << <span class="stringliteral">" "</span> << binValueY << <span class="stringliteral">" "</span> << value << std::endl;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// std::cout << minX+static_cast<double>(maxX-minX)*(binX+0.5)/nbin << " " << minY+static_cast<double>(maxY-minY)*(binY+0.5)/nbin << " " << value << std::endl;</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>(output_opt[0]){</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span>(transpose_opt[0]){</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<col_opt.size();++icol){</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<dataVector.begin()->size();++irow){</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> cout << dataVector[icol][irow];</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span>(irow<dataVector.begin()->size()-1)</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> cout << endl;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<dataVector.begin()->size();++irow){</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<col_opt.size();++icol){</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> cout << dataVector[icol][irow];</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span>(icol<col_opt.size()-1)</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> cout << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> cout << endl;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="ttc" id="classFileReaderAscii_html"><div class="ttname"><a href="classFileReaderAscii.html">FileReaderAscii</a></div><div class="ttdef"><b>Definition:</b> <a href="FileReaderAscii_8h_source.html#l00030">FileReaderAscii.h:30</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstatogr.html b/doc/html/pkstatogr.html
new file mode 100644
index 0000000..d203cec
--- /dev/null
+++ b/doc/html/pkstatogr.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pkstatogr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstatogr </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>program to calculate basic statistics from vector file </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pkstatogr -i input [-n attribute]* </code></p>
+<p><code></code></p>
+<p><code> Options: [-ln layer]* [-n attribute]* [srcnodata]* [src_min] [src_max] [-s] [-mm] [-min] [-max] [-mean] [-median] [-stdev] [-hist] [-nbin] [-rel] [-kde] </code></p>
+<h1><a class="anchor" id="pkstatogr_description"></a>
+Description</h1>
+<p>The utility pkstatogr calculates basic statistics on attributes of a vector file. Examples of the basic statistics include: minimum, maximum, median, mean and standard deviation. Histograms (in percentage or absolute values) can also be calculated. The attribute of interest can be selected using the option -n|–fname. Values defined by the -nodata option, or not withing the limits set by the options -src_min and -src_max are ignored for the statistics. </p>
+<h1><a class="anchor" id="pkstatogr_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>Input OGR vector file </td></tr>
+<tr>
+<td>n </td><td>fname </td><td>std::string </td><td></td><td>Fields on which to calculate statistics </td></tr>
+<tr>
+<td>ln </td><td>lname </td><td>std::string </td><td></td><td>Layer name(s) in sample (leave empty to select all) </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>double </td><td></td><td>Set nodata value(s) </td></tr>
+<tr>
+<td>src_min </td><td>src_min </td><td>double </td><td></td><td>Set minimum value for histogram </td></tr>
+<tr>
+<td>src_max </td><td>src_max </td><td>double </td><td></td><td>Set maximum value for histogram </td></tr>
+<tr>
+<td>s </td><td>size </td><td>bool </td><td>false </td><td>Sample size (number of points) </td></tr>
+<tr>
+<td>mm </td><td>minmax </td><td>bool </td><td>false </td><td>Calculate minimum and maximum value </td></tr>
+<tr>
+<td>min </td><td>min </td><td>bool </td><td>false </td><td>Calculate minimum value </td></tr>
+<tr>
+<td>max </td><td>max </td><td>bool </td><td>false </td><td>Calculate maximum value </td></tr>
+<tr>
+<td>mean </td><td>mean </td><td>bool </td><td>false </td><td>Calculate mean value </td></tr>
+<tr>
+<td>median </td><td>median </td><td>bool </td><td>false </td><td>Calculate median value </td></tr>
+<tr>
+<td>stdev </td><td>stdev </td><td>bool </td><td>false </td><td>Calculate standard deviation </td></tr>
+<tr>
+<td>hist </td><td>hist </td><td>bool </td><td>false </td><td>Calculate histogram </td></tr>
+<tr>
+<td>nbin </td><td>nbin </td><td>unsigned int </td><td></td><td>Number of bins </td></tr>
+<tr>
+<td>rel </td><td>relative </td><td>bool </td><td>false </td><td>Use percentiles for histogram to calculate histogram </td></tr>
+<tr>
+<td>kde </td><td>kde </td><td>bool </td><td>false </td><td>Use <a class="el" href="classKernel.html">Kernel</a> density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb </td></tr>
+</table>
+Usage: pkstatogr -i input [-n attribute]*</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pkstatogr can be found <a class="el" href="md_examples_pkstatogr.html#examples_pkstatogr">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pkstatogr_8cc_source.html b/doc/html/pkstatogr_8cc_source.html
new file mode 100644
index 0000000..5ec4b24
--- /dev/null
+++ b/doc/html/pkstatogr_8cc_source.html
@@ -0,0 +1,283 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pkstatogr.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pkstatogr.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pkstatogr.cc: program to calculate basic statistics from vector file</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2012 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <fstream></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "algorithms/StatFactory.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"Input OGR vector file"</span>, <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> layer_opt(<span class="stringliteral">"ln"</span>, <span class="stringliteral">"lname"</span>, <span class="stringliteral">"Layer name(s) in sample (leave empty to select all)"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> fieldname_opt(<span class="stringliteral">"n"</span>, <span class="stringliteral">"fname"</span>, <span class="stringliteral">"Fields on which to calculate statistics"</span>, <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> nodata_opt(<span class="stringliteral">"nodata"</span>,<span class="stringliteral">"nodata"</span>,<span class="stringliteral">"Set nodata value(s)"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_min_opt(<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"src_min"</span>,<span class="stringliteral">"Set minimum value for histogram"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> src_max_opt(<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"src_max"</span>,<span class="stringliteral">"Set maximum value for histogram"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> size_opt(<span class="stringliteral">"s"</span>,<span class="stringliteral">"size"</span>,<span class="stringliteral">"Sample size (number of points)"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> minmax_opt(<span class="stringliteral">"mm"</span>,<span class="stringliteral">"minmax"</span>,<span class="stringliteral">"Calculate minimum and maximum value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> min_opt(<span class="stringliteral">"min"</span>,<span class="stringliteral">"min"</span>,<span class="stringliteral">"Calculate minimum value"</span>,0);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> max_opt(<span class="stringliteral">"max"</span>,<span class="stringliteral">"max"</span>,<span class="stringliteral">"Calculate maximum value"</span>,0);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> mean_opt(<span class="stringliteral">"mean"</span>,<span class="stringliteral">"mean"</span>,<span class="stringliteral">"Calculate mean value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> median_opt(<span class="stringliteral">"median"</span>,<span class="stringliteral">"median"</span>,<span class="stringliteral">"Calculate median value"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> stdev_opt(<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"stdev"</span>,<span class="stringliteral">"Calculate standard deviation"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> histogram_opt(<span class="stringliteral">"hist"</span>,<span class="stringliteral">"hist"</span>,<span class="stringliteral">"Calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nbin_opt(<span class="stringliteral">"nbin"</span>, <span class="stringliteral">"nbin"</span>, <span class="stringliteral">"Number of bins"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> relative_opt(<span class="stringliteral">"rel"</span>,<span class="stringliteral">"relative"</span>,<span class="stringliteral">"Use percentiles for histogram to calculate histogram"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> kde_opt(<span class="stringliteral">"kde"</span>,<span class="stringliteral">"kde"</span>,<span class="stringliteral">"Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"Verbose level"</span>, 0,2);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> doProcess=input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> fieldname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> layer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> src_min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> src_max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> size_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> minmax_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> min_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> max_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> mean_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> median_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> stdev_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> histogram_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> nbin_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> relative_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> kde_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> cout << predefinedString << endl;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> exit(0);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> cout << endl;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> cout << <span class="stringliteral">"Usage: pkstatogr -i input [-n attribute]*"</span> << endl;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> cout << endl;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << endl;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> imgReader;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> imgReader.open(input_opt[0]);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> inputReader(input_opt[0]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> vector<double> theData;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a> stat;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">//todo: implement ALL</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> stat.setNoDataValues(nodata_opt);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">//support multiple layers</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">int</span> nlayerRead=inputReader.getDataSource()->GetLayerCount();</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> cout << <span class="stringliteral">"number of layers: "</span> << nlayerRead << endl;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<nlayerRead;++ilayer){</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> OGRLayer *readLayer=inputReader.getLayer(ilayer);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">string</span> currentLayername=readLayer->GetName();</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span>(layer_opt.size())</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> cout << <span class="stringliteral">"processing layer "</span> << currentLayername << endl;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(layer_opt.size())</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> cout << <span class="stringliteral">" --lname "</span> << currentLayername;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifield=0;ifield<fieldname_opt.size();++ifield){</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> cout << <span class="stringliteral">"field: "</span> << ifield << endl;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> theData.clear();</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> inputReader.readData(theData,OFTReal,fieldname_opt[ifield],ilayer,verbose_opt[0]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> vector<double> binData;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">double</span> minValue=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">double</span> maxValue=0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> stat.minmax(theData,theData.begin(),theData.end(),minValue,maxValue);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(src_min_opt.size())</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> minValue=src_min_opt[0];</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(src_max_opt.size())</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> maxValue=src_max_opt[0];</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbin=(nbin_opt.size())? nbin_opt[0]:0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(histogram_opt[0]){</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(kde_opt[0]){</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// if(kde_opt[0]>0)</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// sigma=kde_opt[0];</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// else</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> sigma=1.06*sqrt(stat.var(theData))*pow(theData.size(),-0.2);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(nbin<1)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> nbin=(maxValue-minValue+1);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> stat.distribution(theData,theData.begin(),theData.end(),binData,nbin,minValue,maxValue,sigma);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> cerr << <span class="stringliteral">"Warning: all identical values in data"</span> << endl;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> exit(1);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// int nbin=(nbin_opt[0]>1)? nbin_opt[0] : 2;</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> cout << <span class="stringliteral">" --fname "</span> << fieldname_opt[ifield];</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">double</span> theMean=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">double</span> theVar=0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> stat.meanVar(theData,theMean,theVar);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(mean_opt[0])</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> cout << <span class="stringliteral">" --mean "</span> << theMean;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(stdev_opt[0])</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> cout << <span class="stringliteral">" --stdev "</span> << sqrt(theVar);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(minmax_opt[0]||min_opt[0]||max_opt[0]){</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(minmax_opt[0])</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> cout << <span class="stringliteral">" --min "</span> << minValue << <span class="stringliteral">" --max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(min_opt[0])</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> cout << <span class="stringliteral">" --min "</span> << minValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(max_opt[0])</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> cout << <span class="stringliteral">" --max "</span> << maxValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(median_opt[0])</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> cout << <span class="stringliteral">" -median "</span> << stat.median(theData);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">if</span>(size_opt[0])</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> cout << <span class="stringliteral">" -size "</span> << theData.size();</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> cout << endl;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(histogram_opt[0]){</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibin=0;ibin<nbin;++ibin){</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">double</span> binValue=0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(nbin==maxValue-minValue+1)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> binValue=minValue+ibin;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> binValue=minValue+<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(maxValue-minValue)*(ibin+0.5)/nbin;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> cout << binValue << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span>(relative_opt[0]||kde_opt[0])</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> cout << 100.0*<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(binData[ibin])/theData.size() << endl;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> cout << binData[ibin] << endl;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(mean_opt[0])</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> cout << <span class="stringliteral">" --mean "</span> << theData.back();</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span>(stdev_opt[0])</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> cout << <span class="stringliteral">" --stdev "</span> << <span class="stringliteral">"0"</span>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span>(min_opt[0])</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> cout << <span class="stringliteral">" -min "</span> << theData.back();</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(max_opt[0])</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> cout << <span class="stringliteral">" -max "</span> << theData.back();</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>(median_opt[0])</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> cout << <span class="stringliteral">" -median "</span> << theData.back();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(size_opt[0])</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> cout << <span class="stringliteral">" -size "</span> << theData.size();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> cout << endl;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> cerr << <span class="stringliteral">"Warning: all identical values in data"</span> << endl;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> imgReader.close();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classstatfactory_1_1StatFactory_html"><div class="ttname"><a href="classstatfactory_1_1StatFactory.html">statfactory::StatFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="StatFactory_8h_source.html#l00043">StatFactory.h:43</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm.html b/doc/html/pksvm.html
new file mode 100644
index 0000000..f8ab3ec
--- /dev/null
+++ b/doc/html/pksvm.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: pksvm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksvm </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>classify raster image using Support Vector Machine </p>
+<h2>SYNOPSIS</h2>
+<p><code> Usage: pksvm -t training [-i input -o output] [-cv value] </code></p>
+<p><code></code></p>
+<p><code> Options: [-tln layer]* [-c name -r value]* [-of GDALformat|-f OGRformat] [-co NAME=VALUE]* [-ct filename] [-label attribute] [-prior value]* [-g gamma] [-cc cost] [-m filename [-msknodata value]*] [-nodata value]</code></p>
+<p><code> Advanced options: [-b band] [-s band] [-e band] [-bal size]* [-min] [-bag value] [-bs value] [-comb rule] [-cb filename] [-prob filename] [-pim priorimage] [–offset value] [–scale value] [-svmt type] [-kt type] [-kd value] [-c0 value] [-nu value] [-eloss value] [-cache value] [-etol value] [-shrink] [-extent vector] </code></p>
+<h1><a class="anchor" id="pksvm_description"></a>
+Description</h1>
+<p>The utility pksvm implements a support vector machine (SVM) to solve a supervised classification problem. The implementation is based on the open source C++ library libSVM (<a href="http://www.csie.ntu.edu.tw/~cjlin/libsvm">http://www.csie.ntu.edu.tw/~cjlin/libsvm</a>). Both raster and vector files are supported as input. The output will contain the classification result, either in raster or vector format, corresponding to the format of the input. A training sample must be provided as [...]
+<h1><a class="anchor" id="pksvm_options"></a>
+Options</h1>
+<ul>
+<li>use either <code>-short</code> or <code>--long</code> options (both <code>--long=value</code> and <code>--long value</code> are supported)</li>
+<li>short option <code>-h</code> shows basic options only, long option <code>--help</code> shows all options <table class="doxtable">
+<tr>
+<th>short</th><th>long</th><th>type</th><th>default</th><th>description </th></tr>
+<tr>
+<td>t </td><td>training </td><td>std::string </td><td></td><td>Training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) </td></tr>
+<tr>
+<td>i </td><td>input </td><td>std::string </td><td></td><td>input image </td></tr>
+<tr>
+<td>o </td><td>output </td><td>std::string </td><td></td><td>Output classification image </td></tr>
+<tr>
+<td>cv </td><td>cv </td><td>unsigned short </td><td>0 </td><td>N-fold cross validation mode </td></tr>
+<tr>
+<td>cmf </td><td>cmf </td><td>std::string </td><td>ascii </td><td>Format for confusion matrix (ascii or latex) </td></tr>
+<tr>
+<td>tln </td><td>tln </td><td>std::string </td><td></td><td>Training layer name(s) </td></tr>
+<tr>
+<td>c </td><td>class </td><td>std::string </td><td></td><td>List of class names. </td></tr>
+<tr>
+<td>r </td><td>reclass </td><td>short </td><td></td><td>List of class values (use same order as in class opt). </td></tr>
+<tr>
+<td>of </td><td>oformat </td><td>std::string </td><td></td><td>Output image format (see also gdal_translate). Empty string: inherit from input image </td></tr>
+<tr>
+<td>f </td><td>f </td><td>std::string </td><td>SQLite </td><td>Output ogr format for active training sample </td></tr>
+<tr>
+<td>co </td><td>co </td><td>std::string </td><td></td><td>Creation option for output file. Multiple options can be specified. </td></tr>
+<tr>
+<td>ct </td><td>ct </td><td>std::string </td><td></td><td>Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid) </td></tr>
+<tr>
+<td>label </td><td>label </td><td>std::string </td><td>label </td><td>Attribute name for class label in training vector file. </td></tr>
+<tr>
+<td>prior </td><td>prior </td><td>double </td><td>0 </td><td>Prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ). Used for input only (ignored for cross validation) </td></tr>
+<tr>
+<td>g </td><td>gamma </td><td>float </td><td>1 </td><td>Gamma in kernel function </td></tr>
+<tr>
+<td>cc </td><td>ccost </td><td>float </td><td>1000 </td><td>The parameter C of C_SVC, epsilon_SVR, and nu_SVR </td></tr>
+<tr>
+<td>m </td><td>mask </td><td>std::string </td><td></td><td>Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. </td></tr>
+<tr>
+<td>msknodata </td><td>msknodata </td><td>short </td><td>0 </td><td>Mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image. </td></tr>
+<tr>
+<td>nodata </td><td>nodata </td><td>unsigned short </td><td>0 </td><td>Nodata value to put where image is masked as nodata </td></tr>
+<tr>
+<td>b </td><td>band </td><td>short </td><td></td><td>Band index (starting from 0, either use band option or use start to end) </td></tr>
+<tr>
+<td>s </td><td>start </td><td>double </td><td>0 </td><td>Start band sequence number </td></tr>
+<tr>
+<td>e </td><td>end </td><td>double </td><td>0 </td><td>End band sequence number (set to 0 to include all bands) </td></tr>
+<tr>
+<td>bal </td><td>balance </td><td>unsigned int </td><td>0 </td><td>Balance the input data to this number of samples for each class </td></tr>
+<tr>
+<td>min </td><td>min </td><td>int </td><td>0 </td><td>If number of training pixels is less then min, do not take this class into account (0: consider all classes) </td></tr>
+<tr>
+<td>bag </td><td>bag </td><td>unsigned short </td><td>1 </td><td>Number of bootstrap aggregations </td></tr>
+<tr>
+<td>bagsize </td><td>bagsize </td><td>int </td><td>100 </td><td>Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively </td></tr>
+<tr>
+<td>comb </td><td>comb </td><td>unsigned short </td><td>0 </td><td>How to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option. </td></tr>
+<tr>
+<td>cb </td><td>classbag </td><td>std::string </td><td></td><td>Output for each individual bootstrap aggregation </td></tr>
+<tr>
+<td>prob </td><td>prob </td><td>std::string </td><td></td><td>Probability image. </td></tr>
+<tr>
+<td>pim </td><td>priorimg </td><td>std::string </td><td></td><td>Prior probability image (multi-band img with band for each class </td></tr>
+<tr>
+<td></td><td>offset </td><td>double </td><td>0 </td><td>Offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] </td></tr>
+<tr>
+<td></td><td>scale </td><td>double </td><td>0 </td><td>Scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale<a href="use 0 if scale min and max in each band to -1.0 and 1.0">band</a> </td></tr>
+<tr>
+<td>svmt </td><td>svmtype </td><td>std::string </td><td>C_SVC </td><td>Type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) </td></tr>
+<tr>
+<td>kt </td><td>kerneltype </td><td>std::string </td><td>radial </td><td>Type of kernel function (linear,polynomial,radial,sigmoid) </td></tr>
+<tr>
+<td>kd </td><td>kd </td><td>unsigned short </td><td>3 </td><td>Degree in kernel function </td></tr>
+<tr>
+<td>c0 </td><td>coef0 </td><td>float </td><td>0 </td><td>Coef0 in kernel function </td></tr>
+<tr>
+<td>nu </td><td>nu </td><td>float </td><td>0.5 </td><td>The parameter nu of nu_SVC, one_class SVM, and nu_SVR </td></tr>
+<tr>
+<td>eloss </td><td>eloss </td><td>float </td><td>0.1 </td><td>The epsilon in loss function of epsilon_SVR </td></tr>
+<tr>
+<td>cache </td><td>cache </td><td>int </td><td>100 </td><td><a class="el" href="classCache.html">Cache</a> memory size in MB </td></tr>
+<tr>
+<td>etol </td><td>etol </td><td>float </td><td>0.001 </td><td>The tolerance of termination criterion </td></tr>
+<tr>
+<td>shrink </td><td>shrink </td><td>bool </td><td>false </td><td>Whether to use the shrinking heuristics </td></tr>
+<tr>
+<td>pe </td><td>probest </td><td>bool </td><td>true </td><td>Whether to train a SVC or SVR model for probability estimates </td></tr>
+<tr>
+<td>entropy </td><td>entropy </td><td>std::string </td><td></td><td>Entropy image (measure for uncertainty of classifier output </td></tr>
+<tr>
+<td>active </td><td>active </td><td>std::string </td><td></td><td>Ogr output for active training sample. </td></tr>
+<tr>
+<td>na </td><td>nactive </td><td>unsigned int </td><td>1 </td><td>Number of active training points </td></tr>
+<tr>
+<td>random </td><td>random </td><td>bool </td><td>true </td><td>Randomize training data for balancing and bagging </td></tr>
+<tr>
+<td>e </td><td>extent </td><td>std::string </td><td></td><td>get boundary to classify from extent from polygons in vector file </td></tr>
+</table>
+Usage: pksvm -t training [-i input -o output] [-cv value]</li>
+</ul>
+<h1>Examples </h1>
+<p>Some examples how to use pksvm can be found <a class="el" href="md_examples_pksvm.html#examples_pksvm">here</a> </p>
+</div></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm_8cc_source.html b/doc/html/pksvm_8cc_source.html
new file mode 100644
index 0000000..3469744
--- /dev/null
+++ b/doc/html/pksvm_8cc_source.html
@@ -0,0 +1,1397 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/apps/pksvm.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_53adf0b982dc8545998aae3f283a5a58.html">apps</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksvm.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pksvm.cc: classify raster image using Support Vector Machine</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <map></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <algorithm></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "imageclasses/ImgReaderGdal.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "imageclasses/ImgWriterGdal.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "imageclasses/ImgReaderOgr.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "imageclasses/ImgWriterOgr.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "base/PosValue.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "algorithms/ConfusionMatrix.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "algorithms/svm.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="comment">/******************************************************************************/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">namespace </span>svm{</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">enum</span> SVM_TYPE {C_SVC=0, nu_SVC=1,one_class=2, epsilon_SVR=3, nu_SVR=4};</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">enum</span> KERNEL_TYPE {linear=0,polynomial=1,radial=2,sigmoid=3};</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor">#define Malloc(type,n) (type *)malloc((n)*sizeof(type))</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">using namespace </span>std;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> vector<double> priors;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//--------------------------- command line options ------------------------------------</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> input_opt(<span class="stringliteral">"i"</span>, <span class="stringliteral">"input"</span>, <span class="stringliteral">"input image"</span>); </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> training_opt(<span class="stringliteral">"t"</span>, <span class="stringliteral">"training"</span>, <span class="stringliteral">"Training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option). Use multiple training [...]
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> tlayer_opt(<span class="stringliteral">"tln"</span>, <span class="stringliteral">"tln"</span>, <span class="stringliteral">"Training layer name(s)"</span>);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> label_opt(<span class="stringliteral">"label"</span>, <span class="stringliteral">"label"</span>, <span class="stringliteral">"Attribute name for class label in training vector file."</span>,<span class="stringliteral">"label"</span>); </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> balance_opt(<span class="stringliteral">"bal"</span>, <span class="stringliteral">"balance"</span>, <span class="stringliteral">"Balance the input data to this number of samples for each class"</span>, 0);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> random_opt(<span class="stringliteral">"random"</span>, <span class="stringliteral">"random"</span>, <span class="stringliteral">"Randomize training data for balancing and bagging"</span>, <span class="keyword">true</span>, 2);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> minSize_opt(<span class="stringliteral">"min"</span>, <span class="stringliteral">"min"</span>, <span class="stringliteral">"If number of training pixels is less then min, do not take this class into account (0: consider all classes)"</span>, 0);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> band_opt(<span class="stringliteral">"b"</span>, <span class="stringliteral">"band"</span>, <span class="stringliteral">"Band index (starting from 0, either use band option or use start to end)"</span>);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bstart_opt(<span class="stringliteral">"s"</span>, <span class="stringliteral">"start"</span>, <span class="stringliteral">"Start band sequence number"</span>,0); </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> bend_opt(<span class="stringliteral">"e"</span>, <span class="stringliteral">"end"</span>, <span class="stringliteral">"End band sequence number (set to 0 to include all bands)"</span>, 0); </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> offset_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"offset"</span>, <span class="stringliteral">"Offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]"</span>, 0.0);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> scale_opt(<span class="stringliteral">"\0"</span>, <span class="stringliteral">"scale"</span>, <span class="stringliteral">"Scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)"</span>, 0.0);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="classOptionpk.html">Optionpk<double></a> priors_opt(<span class="stringliteral">"prior"</span>, <span class="stringliteral">"prior"</span>, <span class="stringliteral">"Prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ). Used for input only (ignored for cross validation)"</span>, 0.0); </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> priorimg_opt(<span class="stringliteral">"pim"</span>, <span class="stringliteral">"priorimg"</span>, <span class="stringliteral">"Prior probability image (multi-band img with band for each class"</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> cv_opt(<span class="stringliteral">"cv"</span>, <span class="stringliteral">"cv"</span>, <span class="stringliteral">"N-fold cross validation mode"</span>,0);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> cmformat_opt(<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"cmf"</span>,<span class="stringliteral">"Format for confusion matrix (ascii or latex)"</span>,<span class="stringliteral">"ascii"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> svm_type_opt(<span class="stringliteral">"svmt"</span>, <span class="stringliteral">"svmtype"</span>, <span class="stringliteral">"Type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR)"</span>,<span class="stringliteral">"C_SVC"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> kernel_type_opt(<span class="stringliteral">"kt"</span>, <span class="stringliteral">"kerneltype"</span>, <span class="stringliteral">"Type of kernel function (linear,polynomial,radial,sigmoid) "</span>,<span class="stringliteral">"radial"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> kernel_degree_opt(<span class="stringliteral">"kd"</span>, <span class="stringliteral">"kd"</span>, <span class="stringliteral">"Degree in kernel function"</span>,3);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> gamma_opt(<span class="stringliteral">"g"</span>, <span class="stringliteral">"gamma"</span>, <span class="stringliteral">"Gamma in kernel function"</span>,1.0);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> coef0_opt(<span class="stringliteral">"c0"</span>, <span class="stringliteral">"coef0"</span>, <span class="stringliteral">"Coef0 in kernel function"</span>,0);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> ccost_opt(<span class="stringliteral">"cc"</span>, <span class="stringliteral">"ccost"</span>, <span class="stringliteral">"The parameter C of C_SVC, epsilon_SVR, and nu_SVR"</span>,1000);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> nu_opt(<span class="stringliteral">"nu"</span>, <span class="stringliteral">"nu"</span>, <span class="stringliteral">"The parameter nu of nu_SVC, one_class SVM, and nu_SVR"</span>,0.5);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_loss_opt(<span class="stringliteral">"eloss"</span>, <span class="stringliteral">"eloss"</span>, <span class="stringliteral">"The epsilon in loss function of epsilon_SVR"</span>,0.1);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> cache_opt(<span class="stringliteral">"cache"</span>, <span class="stringliteral">"cache"</span>, <span class="stringliteral">"Cache memory size in MB"</span>,100);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <a class="code" href="classOptionpk.html">Optionpk<float></a> epsilon_tol_opt(<span class="stringliteral">"etol"</span>, <span class="stringliteral">"etol"</span>, <span class="stringliteral">"The tolerance of termination criterion"</span>,0.001);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> shrinking_opt(<span class="stringliteral">"shrink"</span>, <span class="stringliteral">"shrink"</span>, <span class="stringliteral">"Whether to use the shrinking heuristics"</span>,<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> prob_est_opt(<span class="stringliteral">"pe"</span>, <span class="stringliteral">"probest"</span>, <span class="stringliteral">"Whether to train a SVC or SVR model for probability estimates"</span>,<span class="keyword">true</span>,2);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// Optionpk<bool> weight_opt("wi", "wi", "Set the parameter C of class i to weight*C, for C_SVC",true);</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> comb_opt(<span class="stringliteral">"comb"</span>, <span class="stringliteral">"comb"</span>, <span class="stringliteral">"How to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option."</span>,0); </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> bag_opt(<span class="stringliteral">"bag"</span>, <span class="stringliteral">"bag"</span>, <span class="stringliteral">"Number of bootstrap aggregations"</span>, 1);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> bagSize_opt(<span class="stringliteral">"bagsize"</span>, <span class="stringliteral">"bagsize"</span>, <span class="stringliteral">"Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively"</span>, 100);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classBag_opt(<span class="stringliteral">"cb"</span>, <span class="stringliteral">"classbag"</span>, <span class="stringliteral">"Output for each individual bootstrap aggregation"</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> mask_opt(<span class="stringliteral">"m"</span>, <span class="stringliteral">"mask"</span>, <span class="stringliteral">"Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata."</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> msknodata_opt(<span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"msknodata"</span>, <span class="stringliteral">"Mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image."</ [...]
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned short></a> nodata_opt(<span class="stringliteral">"nodata"</span>, <span class="stringliteral">"nodata"</span>, <span class="stringliteral">"Nodata value to put where image is masked as nodata"</span>, 0);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> output_opt(<span class="stringliteral">"o"</span>, <span class="stringliteral">"output"</span>, <span class="stringliteral">"Output classification image"</span>); </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> oformat_opt(<span class="stringliteral">"of"</span>, <span class="stringliteral">"oformat"</span>, <span class="stringliteral">"Output image format (see also gdal_translate). Empty string: inherit from input image"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> option_opt(<span class="stringliteral">"co"</span>, <span class="stringliteral">"co"</span>, <span class="stringliteral">"Creation option for output file. Multiple options can be specified."</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> colorTable_opt(<span class="stringliteral">"ct"</span>, <span class="stringliteral">"ct"</span>, <span class="stringliteral">"Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid)"</span>); </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> prob_opt(<span class="stringliteral">"prob"</span>, <span class="stringliteral">"prob"</span>, <span class="stringliteral">"Probability image."</span>); </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> entropy_opt(<span class="stringliteral">"entropy"</span>, <span class="stringliteral">"entropy"</span>, <span class="stringliteral">"Entropy image (measure for uncertainty of classifier output"</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> active_opt(<span class="stringliteral">"active"</span>, <span class="stringliteral">"active"</span>, <span class="stringliteral">"Ogr output for active training sample."</span>,<span class="stringliteral">""</span>,2); </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> ogrformat_opt(<span class="stringliteral">"f"</span>, <span class="stringliteral">"f"</span>, <span class="stringliteral">"Output ogr format for active training sample"</span>,<span class="stringliteral">"SQLite"</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <a class="code" href="classOptionpk.html">Optionpk<unsigned int></a> nactive_opt(<span class="stringliteral">"na"</span>, <span class="stringliteral">"nactive"</span>, <span class="stringliteral">"Number of active training points"</span>,1);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> classname_opt(<span class="stringliteral">"c"</span>, <span class="stringliteral">"class"</span>, <span class="stringliteral">"List of class names."</span>); </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> classvalue_opt(<span class="stringliteral">"r"</span>, <span class="stringliteral">"reclass"</span>, <span class="stringliteral">"List of class values (use same order as in class opt)."</span>); </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="classOptionpk.html">Optionpk<string></a> extent_opt(<span class="stringliteral">"extent"</span>, <span class="stringliteral">"extent"</span>, <span class="stringliteral">"get boundary to classify from extent from polygons in vector file"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <a class="code" href="classOptionpk.html">Optionpk<short></a> verbose_opt(<span class="stringliteral">"v"</span>, <span class="stringliteral">"verbose"</span>, <span class="stringliteral">"Verbose level"</span>,0,2);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> band_opt.setHide(1);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> bstart_opt.setHide(1);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> bend_opt.setHide(1);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> balance_opt.setHide(1);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> minSize_opt.setHide(1);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> bag_opt.setHide(1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> bagSize_opt.setHide(1);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> comb_opt.setHide(1);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> classBag_opt.setHide(1);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> prob_opt.setHide(1);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> priorimg_opt.setHide(1);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> offset_opt.setHide(1);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> scale_opt.setHide(1);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> svm_type_opt.setHide(1);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> kernel_type_opt.setHide(1);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> kernel_degree_opt.setHide(1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> coef0_opt.setHide(1);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> nu_opt.setHide(1);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> epsilon_loss_opt.setHide(1);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> cache_opt.setHide(1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> epsilon_tol_opt.setHide(1);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> shrinking_opt.setHide(1);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> prob_est_opt.setHide(1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> entropy_opt.setHide(1);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> active_opt.setHide(1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> nactive_opt.setHide(1);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> random_opt.setHide(1);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> extent_opt.setHide(1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> verbose_opt.setHide(2);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> doProcess=training_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> input_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> output_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> cv_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> cmformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> tlayer_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> classname_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> classvalue_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> oformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> ogrformat_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> option_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> colorTable_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> label_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> priors_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> gamma_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> ccost_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> mask_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> msknodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> nodata_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// Advanced options</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> band_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> bstart_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> bend_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> balance_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> minSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> bag_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> bagSize_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> comb_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> classBag_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> prob_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> priorimg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> offset_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> scale_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> svm_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> kernel_type_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> kernel_degree_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> coef0_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> nu_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> epsilon_loss_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> cache_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> epsilon_tol_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> shrinking_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> prob_est_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> entropy_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> active_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> nactive_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> verbose_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> random_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> extent_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> predefinedString){</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> std::cout << predefinedString << std::endl;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> exit(0);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>(!doProcess){</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> cout << endl;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> cout << <span class="stringliteral">"Usage: pksvm -t training [-i input -o output] [-cv value]"</span> << endl;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> cout << endl;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> exit(0);<span class="comment">//help was invoked, stop processing</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span>(entropy_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> entropy_opt.clear();</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(active_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> active_opt.clear();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span>(priorimg_opt[0]==<span class="stringliteral">""</span>)</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> priorimg_opt.clear();</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> std::map<std::string, svm::SVM_TYPE> svmMap;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> svmMap[<span class="stringliteral">"C_SVC"</span>]=svm::C_SVC;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> svmMap[<span class="stringliteral">"nu_SVC"</span>]=svm::nu_SVC;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> svmMap[<span class="stringliteral">"one_class"</span>]=svm::one_class;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> svmMap[<span class="stringliteral">"epsilon_SVR"</span>]=svm::epsilon_SVR;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> svmMap[<span class="stringliteral">"nu_SVR"</span>]=svm::nu_SVR;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> std::map<std::string, svm::KERNEL_TYPE> kernelMap;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> kernelMap[<span class="stringliteral">"linear"</span>]=svm::linear;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> kernelMap[<span class="stringliteral">"polynomial"</span>]=svm::polynomial;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> kernelMap[<span class="stringliteral">"radial"</span>]=svm::radial;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> kernelMap[<span class="stringliteral">"sigmoid;"</span>]=svm::sigmoid;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> assert(training_opt.size());</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">if</span>(input_opt.size())</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> std::cout << <span class="stringliteral">"input filename: "</span> << input_opt[0] << std::endl;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> std::cout << <span class="stringliteral">"mask filename: "</span> << mask_opt[0] << std::endl;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> std::cout << <span class="stringliteral">"training vector file: "</span> << std::endl;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifile=0;ifile<training_opt.size();++ifile)</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> std::cout << training_opt[ifile] << std::endl;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> std::cout << <span class="stringliteral">"verbose: "</span> << verbose_opt[0] << std::endl;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nbag=(training_opt.size()>1)?training_opt.size():bag_opt[0];</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> std::cout << <span class="stringliteral">"number of bootstrap aggregations: "</span> << nbag << std::endl;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> extentReader;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> OGRLayer *readLayer;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> OGRFeature *readFeature;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> OGRPoint thePoint;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">double</span> ulx=0;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">double</span> uly=0;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">double</span> lrx=0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">double</span> lry=0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> extentReader.open(extent_opt[0]);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> readLayer = extentReader.getDataSource()->GetLayer(0);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span>(!(extentReader.getExtent(ulx,uly,lrx,lry))){</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> cerr << <span class="stringliteral">"Error: could not get extent from "</span> << extent_opt[0] << endl;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> exit(1);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> activeWriter;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> prob_est_opt[0]=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReader(training_opt[0]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> activeWriter.open(active_opt[0],ogrformat_opt[0]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> activeWriter.createLayer(active_opt[0],trainingReader.getProjection(),wkbPoint,NULL);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> activeWriter.copyFields(trainingReader);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> vector<PosValue> activePoints(nactive_opt[0]);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iactive=0;iactive<activePoints.size();++iactive){</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> activePoints[iactive].value=1.0;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> activePoints[iactive].posx=0.0;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> activePoints[iactive].posy=0.0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> }</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalSamples=0;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nactive=0;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> vector<struct svm_model*> svm(nbag);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> vector<struct svm_parameter> param(nbag);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordtype">short</span> nclass=0;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordtype">int</span> nband=0;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">int</span> startBand=2;<span class="comment">//first two bands represent X and Y pos</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">//normalize priors from command line</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(priors_opt.size()>1){<span class="comment">//priors from argument list</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> priors.resize(priors_opt.size());</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordtype">double</span> normPrior=0;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<priors_opt.size();++iclass){</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> priors[iclass]=priors_opt[iclass];</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> normPrior+=priors[iclass];</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//normalize</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<priors_opt.size();++iclass)</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> priors[iclass]/=normPrior;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">//sort bands</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> std::sort(band_opt.begin(),band_opt.end());</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> map<string,short> classValueMap;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> vector<std::string> nameVector;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span>(classname_opt.size()){</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> assert(classname_opt.size()==classvalue_opt.size());</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<classname_opt.size();++iclass)</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> classValueMap[classname_opt[iclass]]=classvalue_opt[iclass];</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> }</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment">//----------------------------------- Training -------------------------------</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <a class="code" href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a> cm;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> vector< vector<double> > offset(nbag);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> vector< vector<double> > scale(nbag);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> map<string,Vector2d<float> > trainingMap;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> vector< Vector2d<float> > trainingPixels;<span class="comment">//[class][sample][band]</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> vector<string> fields;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> vector<struct svm_problem> prob(nbag);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> vector<struct svm_node *> x_space(nbag);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">//organize training data</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>(ibag<training_opt.size()){<span class="comment">//if bag contains new training pixels</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> trainingMap.clear();</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> trainingPixels.clear();</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> std::cout << <span class="stringliteral">"reading imageVector file "</span> << training_opt[0] << std::endl;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> trainingReaderBag(training_opt[ibag]);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span>(band_opt.size())</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,bstart_opt[0],bend_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>(trainingMap.size()<2){</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">string</span> errorstring=<span class="stringliteral">"Error: could not read at least two classes from training file, did you provide class labels in training sample (see option label)?"</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">throw</span>(errorstring);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> trainingReaderBag.close();</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> exit(1);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">catch</span>(std::exception& e){</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> std::cerr << <span class="stringliteral">"Error: "</span>;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> std::cerr << e.what() << std::endl;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> std::cerr << CPLGetLastErrorMsg() << std::endl; </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> exit(1);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> }</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> exit(1);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment">//convert map to vector</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment">// short iclass=0;</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> std::cout << <span class="stringliteral">"training pixels: "</span> << std::endl;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">//delete small classes</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>((mapit->second).size()<minSize_opt[0]){</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> trainingMap.erase(mapit);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> trainingPixels.push_back(mapit->second);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> std::cout << mapit->first << <span class="stringliteral">": "</span> << (mapit->second).size() << <span class="stringliteral">" samples"</span> << std::endl;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> ++mapit;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> }</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(!ibag){</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> nclass=trainingPixels.size();</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(classname_opt.size())</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> assert(nclass==classname_opt.size());</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> nband=trainingPixels[0][0].size()-2;<span class="comment">//X and Y//trainingPixels[0][0].size();</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> assert(nclass==trainingPixels.size());</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> assert(nband==trainingPixels[0][0].size()-2);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment">//do not remove outliers here: could easily be obtained through ogr2ogr -where 'B2<110' output.shp input.shp</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment">//balance training data</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span>(balance_opt[0]>0){</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">while</span>(balance_opt.size()<nclass)</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> balance_opt.push_back(balance_opt.back());</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> srand(time(NULL));</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> totalSamples=0;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span>(trainingPixels[iclass].size()>balance_opt[iclass]){</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">while</span>(trainingPixels[iclass].size()>balance_opt[iclass]){</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">int</span> index=rand()%trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> trainingPixels[iclass].erase(trainingPixels[iclass].begin()+index);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordtype">int</span> oldsize=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=trainingPixels[iclass].size();isample<balance_opt[iclass];++isample){</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">int</span> index = rand()%oldsize;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> trainingPixels[iclass].push_back(trainingPixels[iclass][index]);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> totalSamples+=trainingPixels[iclass].size();</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> }</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment">//set scale and offset</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> offset[ibag].resize(nband);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> scale[ibag].resize(nband);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span>(offset_opt.size()>1)</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> assert(offset_opt.size()==nband);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span>(scale_opt.size()>1)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> assert(scale_opt.size()==nband);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> std::cout << <span class="stringliteral">"scaling for band"</span> << iband << std::endl;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> offset[ibag][iband]=(offset_opt.size()==1)?offset_opt[0]:offset_opt[iband];</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> scale[ibag][iband]=(scale_opt.size()==1)?scale_opt[0]:scale_opt[iband];</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">//search for min and maximum</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">if</span>(scale[ibag][iband]<=0){</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordtype">float</span> theMin=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordtype">float</span> theMax=trainingPixels[0][0][iband+startBand];</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingPixels[iclass].size();++isample){</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">if</span>(theMin>trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> theMin=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span>(theMax<trainingPixels[iclass][isample][iband+startBand])</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> theMax=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> offset[ibag][iband]=theMin+(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> scale[ibag][iband]=(theMax-theMin)/2.0;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> std::cout << <span class="stringliteral">"Extreme image values for band "</span> << iband << <span class="stringliteral">": ["</span> << theMin << <span class="stringliteral">","</span> << theMax << <span class="stringliteral">"]"</span> << std::endl;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> std::cout << <span class="stringliteral">"Using offset, scale: "</span> << offset[ibag][iband] << <span class="stringliteral">", "</span> << scale[ibag][iband] << std::endl;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> std::cout << <span class="stringliteral">"scaled values for band "</span> << iband << <span class="stringliteral">": ["</span> << (theMin-offset[ibag][iband])/scale[ibag][iband] << <span class="stringliteral">","</span> << (theMax-offset[ibag][iband])/scale[ibag][iband] << <span class="stringliteral">"]"</span> << [...]
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">else</span>{<span class="comment">//use same offset and scale </span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> offset[ibag].resize(nband);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> scale[ibag].resize(nband);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> offset[ibag][iband]=offset[0][iband];</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> scale[ibag][iband]=scale[0][iband];</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> }</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">if</span>(!ibag){</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">if</span>(priors_opt.size()==1){<span class="comment">//default: equal priors for each class</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> priors.resize(nclass);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> priors[iclass]=1.0/nclass;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> assert(priors_opt.size()==1||priors_opt.size()==nclass);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="comment">//set bagsize for each class if not done already via command line</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">while</span>(bagSize_opt.size()<nclass)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> bagSize_opt.push_back(bagSize_opt.back());</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1){</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> std::cout << <span class="stringliteral">"number of bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> std::cout << <span class="stringliteral">"number of classes: "</span> << nclass << std::endl;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">if</span>(priorimg_opt.empty()){</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> std::cout << <span class="stringliteral">"priors:"</span>;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> std::cout << <span class="stringliteral">" "</span> << priors[iclass];</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> map<string,Vector2d<float> >::iterator mapit=trainingMap.begin();</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordtype">bool</span> doSort=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">while</span>(mapit!=trainingMap.end()){</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> nameVector.push_back(mapit->first);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">if</span>(classValueMap.size()){</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">//check if name in training is covered by classname_opt (values can not be 0)</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">if</span>(classValueMap[mapit->first]>0){</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span>(cm.getClassIndex(type2string<short>(classValueMap[mapit->first]))<0){</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> cm.pushBackClassName(type2string<short>(classValueMap[mapit->first]),doSort);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> std::cerr << <span class="stringliteral">"Error: names in classname option are not complete, please check names in training vector and make sure classvalue is > 0"</span> << std::endl;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> exit(1);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> cm.pushBackClassName(mapit->first,doSort);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> ++mapit;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> }</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">catch</span>(<a class="code" href="classBadConversion.html">BadConversion</a> conversionString){</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> std::cerr << <span class="stringliteral">"Error: did you provide class pairs names (-c) and integer values (-r) for each class in training vector?"</span> << std::endl;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> exit(1);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span>(classname_opt.empty()){</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">//std::cerr << "Warning: no class name and value pair provided for all " << nclass << " classes, using string2type<int> instead!" << std::endl;</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> std::cout << iclass << <span class="stringliteral">" "</span> << cm.getClass(iclass) << <span class="stringliteral">" -> "</span> << string2type<short>(cm.getClass(iclass)) << std::endl;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> classValueMap[cm.getClass(iclass)]=string2type<short>(cm.getClass(iclass));</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> }</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// if(priors_opt.size()==nameVector.size()){</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">// std::cerr << "Warning: please check if priors are provided in correct order!!!" << std::endl;</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// for(int iclass=0;iclass<nameVector.size();++iclass)</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="comment">// std::cerr << nameVector[iclass] << " " << priors_opt[iclass] << std::endl;</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }<span class="comment">//if(!ibag)</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="comment">//Calculate features of training set</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> vector< Vector2d<float> > trainingFeatures(nclass);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordtype">int</span> nctraining=0;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> std::cout << <span class="stringliteral">"calculating features for class "</span> << iclass << std::endl;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">if</span>(random_opt[0])</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> srand(time(NULL));</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> nctraining=(bagSize_opt[iclass]<100)? trainingPixels[iclass].size()/100.0*bagSize_opt[iclass] : trainingPixels[iclass].size();<span class="comment">//bagSize_opt[iclass] given in % of training size</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">if</span>(nctraining<=0)</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> nctraining=1;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> assert(nctraining<=trainingPixels[iclass].size());</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">int</span> index=0;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(bagSize_opt[iclass]<100)</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> random_shuffle(trainingPixels[iclass].begin(),trainingPixels[iclass].end());</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> std::cout << <span class="stringliteral">"nctraining (class "</span> << iclass << <span class="stringliteral">"): "</span> << nctraining << std::endl;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> trainingFeatures[iclass].resize(nctraining);</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<nctraining;++isample){</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment">//scale pixel values according to scale and offset!!!</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordtype">float</span> value=trainingPixels[iclass][isample][iband+startBand];</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> trainingFeatures[iclass][isample].push_back((value-offset[ibag][iband])/scale[ibag][iband]);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> }</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> }</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> assert(trainingFeatures[iclass].size()==nctraining);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFeatures=trainingFeatures[0][0].size();</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> std::cout << <span class="stringliteral">"number of features: "</span> << nFeatures << std::endl;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ntraining=0;</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> ntraining+=trainingFeatures[iclass].size();</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> std::cout << <span class="stringliteral">"training size over all classes: "</span> << ntraining << std::endl;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> prob[ibag].l=ntraining;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> prob[ibag].y = Malloc(<span class="keywordtype">double</span>,prob[ibag].l);</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> prob[ibag].x = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a> *,prob[ibag].l);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> x_space[ibag] = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>,(nFeatures+1)*ntraining);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> spaceIndex=0;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">int</span> lIndex=0;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> isample=0;isample<trainingFeatures[iclass].size();++isample){</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> prob[ibag].x[lIndex]=&(x_space[ibag][spaceIndex]);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifeature=0;ifeature<nFeatures;++ifeature){</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> x_space[ibag][spaceIndex].index=ifeature+1;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> x_space[ibag][spaceIndex].value=trainingFeatures[iclass][isample][ifeature];</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> ++spaceIndex;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> x_space[ibag][spaceIndex++].index=-1;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> prob[ibag].y[lIndex]=iclass;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> ++lIndex;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> assert(lIndex==prob[ibag].l);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment">//set SVM parameters through command line options</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> param[ibag].svm_type = svmMap[svm_type_opt[0]];</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> param[ibag].kernel_type = kernelMap[kernel_type_opt[0]];</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> param[ibag].degree = kernel_degree_opt[0];</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> param[ibag].gamma = (gamma_opt[0]>0)? gamma_opt[0] : 1.0/nFeatures;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> param[ibag].coef0 = coef0_opt[0];</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> param[ibag].nu = nu_opt[0];</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> param[ibag].cache_size = cache_opt[0];</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> param[ibag].C = ccost_opt[0];</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> param[ibag].eps = epsilon_tol_opt[0];</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> param[ibag].p = epsilon_loss_opt[0];</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> param[ibag].shrinking = (shrinking_opt[0])? 1 : 0;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> param[ibag].probability = (prob_est_opt[0])? 1 : 0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> param[ibag].nr_weight = 0;<span class="comment">//not used: I use priors and balancing</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> param[ibag].weight_label = NULL;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> param[ibag].weight = NULL;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> param[ibag].verbose=(verbose_opt[0]>1)? <span class="keyword">true</span>:<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> std::cout << <span class="stringliteral">"checking parameters"</span> << std::endl;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> svm_check_parameter(&prob[ibag],¶m[ibag]);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> std::cout << <span class="stringliteral">"parameters ok, training"</span> << std::endl;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> svm[ibag]=svm_train(&prob[ibag],¶m[ibag]);</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> std::cout << <span class="stringliteral">"SVM is now trained"</span> << std::endl;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span>(cv_opt[0]>1){</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> std::cout << <span class="stringliteral">"Cross validating"</span> << std::endl;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordtype">double</span> *target = Malloc(<span class="keywordtype">double</span>,prob[ibag].l);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> svm_cross_validation(&prob[ibag],¶m[ibag],cv_opt[0],target);</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> assert(param[ibag].svm_type != EPSILON_SVR&¶m[ibag].svm_type != NU_SVR);<span class="comment">//only for regression</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<prob[ibag].l;i++){</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="keywordtype">string</span> refClassName=nameVector[prob[ibag].y[i]];</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordtype">string</span> className=nameVector[target[i]];</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> cm.incrementResult(type2string<short>(classValueMap[refClassName]),type2string<short>(classValueMap[className]),1.0/nbag);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> cm.incrementResult(cm.getClass(prob[ibag].y[i]),cm.getClass(target[i]),1.0/nbag);</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> }</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> free(target);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">// *NOTE* Because svm_model contains pointers to svm_problem, you can</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment">// not free the memory used by svm_problem if you are still using the</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment">// svm_model produced by svm_train(). </span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> }<span class="comment">//for ibag</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">if</span>(cv_opt[0]>1){</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> assert(cm.nReference());</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> cm.setFormat(cmformat_opt[0]);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> cm.reportSE95(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> std::cout << cm << std::endl;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="comment">// cout << "class #samples userAcc prodAcc" << endl;</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="comment">// double se95_ua=0;</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="comment">// double se95_pa=0;</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="comment">// double se95_oa=0;</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="comment">// double dua=0;</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">// double dpa=0;</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="comment">// double doa=0;</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="comment">// for(short iclass=0;iclass<cm.nClasses();++iclass){</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment">// dua=cm.ua(cm.getClass(iclass),&se95_ua);</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="comment">// dpa=cm.pa(cm.getClass(iclass),&se95_pa);</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="comment">// cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment">// std::cout << "Kappa: " << cm.kappa() << std::endl;</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="comment">// doa=cm.oa(&se95_oa);</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="comment">// std::cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << std::endl;</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="comment">//--------------------------------- end of training -----------------------------------</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">if</span>(input_opt.empty())</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> exit(0);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* pszMessage;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordtype">void</span>* pProgressArg=NULL;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> GDALProgressFunc pfnProgress=GDALTermProgress;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordtype">float</span> progress=0;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">if</span>(!verbose_opt[0])</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="comment">//-------------------------------- open image file ------------------------------------</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordtype">bool</span> inputIsRaster=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <a class="code" href="classImgReaderOgr.html">ImgReaderOgr</a> imgReaderOgr;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> imgReaderOgr.open(input_opt[0]);</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> imgReaderOgr.close();</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> inputIsRaster=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span>(inputIsRaster){</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> testImage;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> std::cout << <span class="stringliteral">"opening image "</span> << input_opt[0] << std::endl; </div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> testImage.open(input_opt[0]);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> }</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> exit(2);</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> }</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> priorReader;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> std::cout << <span class="stringliteral">"opening prior image "</span> << priorimg_opt[0] << std::endl;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> priorReader.open(priorimg_opt[0]);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> assert(priorReader.nrOfCol()==testImage.nrOfCol());</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> assert(priorReader.nrOfRow()==testImage.nrOfRow());</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> exit(2);</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> }</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> exit(1);</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> }</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> }</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">int</span> nrow=testImage.nrOfRow();</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordtype">int</span> ncol=testImage.nrOfCol();</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">if</span>(option_opt.findSubstring(<span class="stringliteral">"INTERLEAVE="</span>)==option_opt.end()){</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordtype">string</span> theInterleave=<span class="stringliteral">"INTERLEAVE="</span>;</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> theInterleave+=testImage.getInterleave();</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> option_opt.push_back(theInterleave);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> vector<char> classOut(ncol);<span class="comment">//classified line for writing to image file</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="comment">// assert(nband==testImage.nrOfBand());</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> classImageBag;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> classImageOut;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> probImage;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> entropyImage;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordtype">string</span> imageType=testImage.getImageType();</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keywordflow">if</span>(oformat_opt.size())<span class="comment">//default</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> imageType=oformat_opt[0];</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> assert(output_opt.size());</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> std::cout << <span class="stringliteral">"opening class image for writing output "</span> << output_opt[0] << std::endl;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> classImageBag.open(classBag_opt[0],ncol,nrow,nbag,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> classImageBag.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> classImageBag.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> classImageBag.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> }</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> classImageOut.open(output_opt[0],ncol,nrow,1,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> classImageOut.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> classImageOut.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> classImageOut.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">if</span>(colorTable_opt.size())</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> classImageOut.setColorTable(colorTable_opt[0],0);</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span>(prob_opt.size()){</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> probImage.open(prob_opt[0],ncol,nrow,nclass,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> probImage.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> probImage.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> probImage.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> }</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">if</span>(entropy_opt.size()){</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> entropyImage.open(entropy_opt[0],ncol,nrow,1,GDT_Byte,imageType,option_opt);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> entropyImage.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> entropyImage.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> entropyImage.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> }</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> }</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <a class="code" href="classImgWriterGdal.html">ImgWriterGdal</a> maskWriter;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> maskWriter.open(<span class="stringliteral">"/vsimem/mask.tif"</span>,ncol,nrow,1,GDT_Float32,imageType,option_opt);</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> maskWriter.GDALSetNoDataValue(nodata_opt[0]);</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> maskWriter.copyGeoTransform(testImage);</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> maskWriter.setProjection(testImage.getProjection());</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> vector<double> burnValues(1,1);<span class="comment">//burn value is 1 (single band)</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> maskWriter.rasterizeOgr(extentReader,burnValues);</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> maskWriter.close();</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> }</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> exit(2);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> exit(1);</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> }</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> mask_opt.clear();</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> mask_opt.push_back(<span class="stringliteral">"/vsimem/mask.tif"</span>);</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> }</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <a class="code" href="classImgReaderGdal.html">ImgReaderGdal</a> maskReader;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="keywordflow">if</span>(verbose_opt[0]>=1)</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> std::cout << <span class="stringliteral">"opening mask image file "</span> << mask_opt[0] << std::endl;</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> maskReader.open(mask_opt[0]);</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> }</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> error){</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> cerr << error << std::endl;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> exit(2);</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> }</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> exit(1);</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> }</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iline=0;iline<nrow;++iline){</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> vector<float> buffer(ncol);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> vector<short> lineMask;</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <a class="code" href="classVector2d.html">Vector2d<float></a> linePrior;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> linePrior.resize(nclass,ncol);<span class="comment">//prior prob for each class</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <a class="code" href="classVector2d.html">Vector2d<float></a> hpixel(ncol);</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <a class="code" href="classVector2d.html">Vector2d<float></a> probOut(nclass,ncol);<span class="comment">//posterior prob for each (internal) class</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> vector<float> entropy(ncol);</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <a class="code" href="classVector2d.html">Vector2d<char></a> classBag;<span class="comment">//classified line for writing to image file</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> classBag.resize(nbag,ncol);</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">if</span>(band_opt.size()){</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<band_opt.size();++iband){</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> std::cout << <span class="stringliteral">"reading band "</span> << band_opt[iband] << std::endl;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> assert(band_opt[iband]>=0);</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> assert(band_opt[iband]<testImage.nrOfBand());</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> testImage.readData(buffer,GDT_Float32,iline,band_opt[iband]);</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> hpixel[icol].push_back(buffer[icol]);</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> }</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=bstart_opt[0];iband<bstart_opt[0]+nband;++iband){</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> std::cout << <span class="stringliteral">"reading band "</span> << iband << std::endl;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> assert(iband>=0);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> assert(iband<testImage.nrOfBand());</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> testImage.readData(buffer,GDT_Float32,iline,iband);</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol)</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> hpixel[icol].push_back(buffer[icol]);</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> }</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> }</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> cerr << <span class="stringliteral">"Error reading "</span> << input_opt[0] << <span class="stringliteral">": "</span> << theError << std::endl;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> exit(3);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> exit(3);</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> }</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> assert(nband==hpixel[0].size());</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> std::cout << <span class="stringliteral">"used bands: "</span> << nband << std::endl;</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">//read prior</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">if</span>(verbose_opt.size()>1)</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> std::cout << <span class="stringliteral">"Reading "</span> << priorimg_opt[0] << <span class="stringliteral">" band "</span> << iclass << <span class="stringliteral">" line "</span> << iline << std::endl;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> priorReader.readData(linePrior[iclass],GDT_Float32,iline,iclass);</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> }</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> theError){</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> std::cerr << <span class="stringliteral">"Error reading "</span> << priorimg_opt[0] << <span class="stringliteral">": "</span> << theError << std::endl;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> exit(3);</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> }</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> exit(3);</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> }</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> }</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordtype">double</span> oldRowMask=-1;<span class="comment">//keep track of row mask to optimize number of line readings</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment">//process per pixel</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> icol=0;icol<ncol;++icol){</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> assert(hpixel[icol].size()==nband);</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordtype">bool</span> doClassify=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="keywordtype">bool</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordtype">double</span> geox=0;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordtype">double</span> geoy=0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">if</span>(extent_opt.size()){</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> doClassify=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> testImage.image2geo(icol,iline,geox,geoy);</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment">//check enveloppe first</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">if</span>(uly>=geoy&&lry<=geoy&&ulx<=geox&&lrx>=geox){</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> doClassify=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> }</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment">// if(doClassify){</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment">// thePoint.setX(geox);</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment">// thePoint.setY(geoy);</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment">// readLayer->ResetReading();</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">// while( (readFeature = readLayer->GetNextFeature()) != NULL ){</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment">// OGRGeometry *poGeometry;</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// poGeometry = readFeature->GetGeometryRef();</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// assert(poGeometry!=NULL);</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment">// //check if point is on surface</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">// if(thePoint.Within(poGeometry)){</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// doClassify=true;</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment">// break;</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> }</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="keywordflow">if</span>(mask_opt.size()){</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">//read mask</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="keywordtype">double</span> colMask=0;</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="keywordtype">double</span> rowMask=0;</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> testImage.image2geo(icol,iline,geox,geoy);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> maskReader.geo2image(geox,geoy,colMask,rowMask);</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> colMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(colMask);</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> rowMask=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rowMask);</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">if</span>(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="keywordflow">if</span>(static_cast<int>(rowMask)!=<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(oldRowMask)){</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> assert(rowMask>=0&&rowMask<maskReader.nrOfRow());</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="comment">// maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> }</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorstring){</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> cerr << errorstring << endl;</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> exit(1);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> }</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">catch</span>(...){</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> cerr << <span class="stringliteral">"error catched"</span> << std::endl;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> exit(3);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> }</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> oldRowMask=rowMask;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> }</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keywordtype">short</span> theMask=0;</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> ivalue=0;ivalue<msknodata_opt.size();++ivalue){</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">if</span>(msknodata_opt[ivalue]>=0){<span class="comment">//values set in msknodata_opt are invalid</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordflow">if</span>(lineMask[colMask]==msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> theMask=lineMask[colMask];</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> }</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> }</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">else</span>{<span class="comment">//only values set in msknodata_opt are valid</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">if</span>(lineMask[colMask]!=-msknodata_opt[ivalue]){</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> theMask=lineMask[colMask];</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> masked=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> masked=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> }</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">if</span>(masked){</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> classBag[ibag][icol]=theMask;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> classOut[icol]=theMask;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> }</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordtype">bool</span> valid=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<hpixel[icol].size();++iband){</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">if</span>(hpixel[icol][iband]){</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> valid=<span class="keyword">true</span>;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> }</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">if</span>(!valid)</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> doClassify=<span class="keyword">false</span>;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> probOut[iclass][icol]=0;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">if</span>(!doClassify){</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> classBag[ibag][icol]=nodata_opt[0];</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> classOut[icol]=nodata_opt[0];</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordflow">continue</span>;<span class="comment">//next column</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> std::cout << <span class="stringliteral">"begin classification "</span> << std::endl;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">//----------------------------------- classification -------------------</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> vector<double> result(nclass);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> *x;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> x = (<span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> *) malloc((nband+1)*<span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a>));</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> x[iband].index=iband+1;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> x[iband].value=(hpixel[icol][iband]-offset[ibag][iband])/scale[ibag][iband];</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> x[nband].index=-1;<span class="comment">//to end svm feature vector</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordtype">double</span> predict_label=0;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> vector<float> prValues(nclass);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordtype">float</span> maxP=0;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">if</span>(!prob_est_opt[0]){</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> predict_label = svm_predict(svm[ibag],x);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">if</span>(iclass==static_cast<short>(predict_label))</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> result[iclass]=1;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> result[iclass]=0;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> }</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> }</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> assert(svm_check_probability_model(svm[ibag]));</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> predict_label = svm_predict_probability(svm[ibag],x,&(result[0]));</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> }</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">//calculate posterior prob of bag </span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">//search for max prob within bag</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> maxP=0;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> classBag[ibag][icol]=0;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordtype">double</span> normPrior=0;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span>(priorimg_opt.size()){</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> normPrior+=linePrior[iclass][icol];</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> }</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> priors[iclass]=linePrior[iclass][icol]/normPrior;<span class="comment">//todo: check if correct for all cases... (automatic classValueMap and manual input for names and values)</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">switch</span>(comb_opt[0]){</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordflow">case</span>(0):<span class="comment">//sum rule</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> probOut[iclass][icol]+=result[iclass]*priors[iclass];<span class="comment">//add probabilities for each bag</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">case</span>(1):<span class="comment">//product rule</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> probOut[iclass][icol]*=pow(static_cast<float>(priors[iclass]),static_cast<float>(1.0-nbag)/nbag)*result[iclass];<span class="comment">//multiply probabilities for each bag</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="keywordflow">case</span>(2):<span class="comment">//max rule</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">if</span>(priors[iclass]*result[iclass]>probOut[iclass][icol])</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> probOut[iclass][icol]=priors[iclass]*result[iclass];</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordflow">if</span>(classBag_opt.size()){</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment">//search for max prob within bag</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment">// if(prValues[iclass]>maxP){</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment">// maxP=prValues[iclass];</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment">// classBag[ibag][icol]=iclass;</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">if</span>(result[iclass]>maxP){</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> maxP=result[iclass];</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> classBag[ibag][icol]=iclass;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> }</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> free(x);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> }<span class="comment">//ibag</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">//search for max class prob</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordtype">float</span> maxBag1=0;<span class="comment">//max probability</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordtype">float</span> maxBag2=0;<span class="comment">//second max probability</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordtype">float</span> normBag=0;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">if</span>(probOut[iclass][icol]>maxBag1){</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> maxBag1=probOut[iclass][icol];</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> classOut[icol]=classValueMap[nameVector[iclass]];</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(probOut[iclass][icol]>maxBag2)</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> maxBag2=probOut[iclass][icol];</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> normBag+=probOut[iclass][icol];</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> }</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment">//normalize probOut and convert to percentage</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> entropy[icol]=0;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordtype">float</span> prv=probOut[iclass][icol];</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> prv/=normBag;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> entropy[icol]-=prv*log(prv)/log(2.0);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> prv*=100.0;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> probOut[iclass][icol]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(prv+0.5);</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment">// assert(classValueMap[nameVector[iclass]]<probOut.size());</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="comment">// assert(classValueMap[nameVector[iclass]]>=0);</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">// probOut[classValueMap[nameVector[iclass]]][icol]=static_cast<short>(prv+0.5);</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> entropy[icol]/=log(static_cast<double>(nclass))/log(2.0);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> entropy[icol]=<span class="keyword">static_cast<</span><span class="keywordtype">short</span><span class="keyword">></span>(100*entropy[icol]+0.5);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">if</span>(entropy[icol]>activePoints.back().value){</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> activePoints.back().value=entropy[icol];<span class="comment">//replace largest value (last)</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> activePoints.back().posx=icol;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> activePoints.back().posy=iline;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> std::sort(activePoints.begin(),activePoints.end(),<a class="code" href="classDecrease__PosValue.html">Decrease_PosValue</a>());<span class="comment">//sort in descending order (largest first, smallest last)</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> std::cout << activePoints.back().posx << <span class="stringliteral">" "</span> << activePoints.back().posy << <span class="stringliteral">" "</span> << activePoints.back().value << std::endl;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> }</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> }<span class="comment">//icol</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">//----------------------------------- write output ------------------------------------------</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag)</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> classImageBag.writeData(classBag[ibag],GDT_Byte,iline,ibag);</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordflow">if</span>(prob_opt.size()){</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> probImage.writeData(probOut[iclass],GDT_Float32,iline,iclass);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="keywordflow">if</span>(entropy_opt.size()){</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> entropyImage.writeData(entropy,GDT_Float32,iline);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> classImageOut.writeData(classOut,GDT_Byte,iline);</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordflow">if</span>(!verbose_opt[0]){</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(iline+1.0)/classImageOut.nrOfRow();</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">//write active learning points</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keywordflow">if</span>(active_opt.size()){</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iactive=0;iactive<activePoints.size();++iactive){</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> std::map<string,double> pointMap;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<testImage.nrOfBand();++iband){</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> testImage.readData(value,GDT_Float64,static_cast<int>(activePoints[iactive].posx),static_cast<int>(activePoints[iactive].posy),iband);</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> ostringstream fs;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> fs << <span class="stringliteral">"B"</span> << iband;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> pointMap[fs.str()]=value;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> }</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> pointMap[label_opt[0]]=0;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordtype">double</span> x, y;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> testImage.image2geo(activePoints[iactive].posx,activePoints[iactive].posy,x,y);</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> std::string fieldname=<span class="stringliteral">"id"</span>;<span class="comment">//number of the point</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> activeWriter.addPoint(x,y,pointMap,fieldname,++nactive);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> }</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> testImage.close();</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">if</span>(mask_opt.size())</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> maskReader.close();</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">if</span>(priorimg_opt.size())</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> priorReader.close();</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">if</span>(prob_opt.size())</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> probImage.close();</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">if</span>(entropy_opt.size())</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> entropyImage.close();</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">if</span>(classBag_opt.size())</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> classImageBag.close();</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> classImageOut.close();</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> }</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordflow">else</span>{<span class="comment">//classify vector file</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> cm.clearResults();</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">//notice that fields have already been set by readDataImageOgr (taking into account appropriate bands)</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ivalidation=0;ivalidation<input_opt.size();++ivalidation){</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> assert(output_opt.size()==input_opt.size());</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> std::cout << <span class="stringliteral">"opening img reader "</span> << input_opt[ivalidation] << std::endl;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> imgReaderOgr.open(input_opt[ivalidation]);</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <a class="code" href="classImgWriterOgr.html">ImgWriterOgr</a> imgWriterOgr;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> std::cout << <span class="stringliteral">"opening img writer and copying fields from img reader"</span> << output_opt[ivalidation] << std::endl;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> imgWriterOgr.open(output_opt[ivalidation],imgReaderOgr);</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> }</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> cout << <span class="stringliteral">"number of layers in input ogr file: "</span> << imgReaderOgr.getLayerCount() << endl;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilayer=0;ilayer<imgReaderOgr.getLayerCount();++ilayer){</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> cout << <span class="stringliteral">"processing input layer "</span> << ilayer << endl;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">if</span>(verbose_opt[0])</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> std::cout << <span class="stringliteral">"creating field class"</span> << std::endl;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> imgWriterOgr.createField(<span class="stringliteral">"class"</span>,OFTInteger,ilayer);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> imgWriterOgr.createField(<span class="stringliteral">"class"</span>,OFTString,ilayer);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> }</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFeatures=imgReaderOgr.getFeatureCount(ilayer);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ifeature=0;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> progress=0;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> OGRFeature *poFeature;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordflow">while</span>( (poFeature = imgReaderOgr.getLayer(ilayer)->GetNextFeature()) != NULL ){</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> std::cout << <span class="stringliteral">"feature "</span> << ifeature << std::endl;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordflow">if</span>( poFeature == NULL ){</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> cout << <span class="stringliteral">"Warning: could not read feature "</span> << ifeature << <span class="stringliteral">" in layer "</span> << imgReaderOgr.getLayerName(ilayer) << endl;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> }</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> OGRFeature *poDstFeature = NULL;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> poDstFeature=imgWriterOgr.createFeature(ilayer);</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordflow">if</span>( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>,</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> poFeature->GetFID(), imgWriterOgr.getLayerName(ilayer).c_str() );</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> }</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> vector<float> validationPixel;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> vector<float> validationFeature;</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> imgReaderOgr.readData(validationPixel,OFTReal,fields,poFeature,ilayer);</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> assert(validationPixel.size()==nband);</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> vector<float> probOut(nclass);<span class="comment">//posterior prob for each class</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass)</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> probOut[iclass]=0;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iband=0;iband<nband;++iband){</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> validationFeature.push_back((validationPixel[iband]-offset[ibag][iband])/scale[ibag][iband]);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> std::cout << <span class="stringliteral">" "</span> << validationFeature.back();</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> }</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="keywordflow">if</span>(verbose_opt[0]==2)</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> std::cout << std::endl;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> vector<double> result(nclass);</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> *x;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> x = (<span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> *) malloc((validationFeature.size()+1)*<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>));</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<validationFeature.size();++i){</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> x[i].index=i+1;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> x[i].value=validationFeature[i];</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> }</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> x[validationFeature.size()].index=-1;<span class="comment">//to end svm feature vector</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="keywordtype">double</span> predict_label=0;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">if</span>(!prob_est_opt[0]){</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> predict_label = svm_predict(svm[ibag],x);</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="keywordflow">if</span>(iclass==static_cast<short>(predict_label))</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> result[iclass]=1;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> result[iclass]=0;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> }</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> assert(svm_check_probability_model(svm[ibag]));</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> predict_label = svm_predict_probability(svm[ibag],x,&(result[0]));</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> }</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> std::cout << <span class="stringliteral">"predict_label: "</span> << predict_label << std::endl;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=0;iclass<result.size();++iclass)</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> std::cout << result[iclass] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> std::cout << std::endl;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">//calculate posterior prob of bag </span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="keywordflow">switch</span>(comb_opt[0]){</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="keywordflow">case</span>(0):<span class="comment">//sum rule</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> probOut[iclass]+=result[iclass]*priors[iclass];<span class="comment">//add probabilities for each bag</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordflow">case</span>(1):<span class="comment">//product rule</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> probOut[iclass]*=pow(static_cast<float>(priors[iclass]),static_cast<float>(1.0-nbag)/nbag)*result[iclass];<span class="comment">//multiply probabilities for each bag</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordflow">case</span>(2):<span class="comment">//max rule</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">if</span>(priors[iclass]*result[iclass]>probOut[iclass])</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> probOut[iclass]=priors[iclass]*result[iclass];</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> }</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> }</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> free(x);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> }<span class="comment">//for ibag</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> </div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">//search for max class prob</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="keywordtype">float</span> maxBag=0;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keywordtype">float</span> normBag=0;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">string</span> classOut=<span class="stringliteral">"Unclassified"</span>;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<nclass;++iclass){</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordflow">if</span>(verbose_opt[0]>1)</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> std::cout << probOut[iclass] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordflow">if</span>(probOut[iclass]>maxBag){</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> maxBag=probOut[iclass];</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> classOut=nameVector[iclass];</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> }</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> }</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment">//look for class name</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordflow">if</span>(verbose_opt[0]>1){</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> std::cout << <span class="stringliteral">"->"</span> << classValueMap[classOut] << std::endl;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> std::cout << <span class="stringliteral">"->"</span> << classOut << std::endl;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> }</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> poDstFeature->SetField(<span class="stringliteral">"class"</span>,classValueMap[classOut]);</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> poDstFeature->SetField(<span class="stringliteral">"class"</span>,classOut.c_str());</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> poDstFeature->SetFID( poFeature->GetFID() );</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> }</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordtype">int</span> labelIndex=poFeature->GetFieldIndex(label_opt[0].c_str());</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="keywordflow">if</span>(labelIndex>=0){</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="keywordtype">string</span> classRef=poFeature->GetFieldAsString(labelIndex);</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="keywordflow">if</span>(classRef!=<span class="stringliteral">"0"</span>){</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="keywordflow">if</span>(classValueMap.size())</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> cm.incrementResult(type2string<short>(classValueMap[classRef]),type2string<short>(classValueMap[classOut]),1);</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> cm.incrementResult(classRef,classOut,1);</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> }</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> }</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> CPLErrorReset();</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="keywordflow">if</span>(output_opt.size()){</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="keywordflow">if</span>(imgWriterOgr.createFeature(poDstFeature,ilayer) != OGRERR_NONE){</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> CPLError( CE_Failure, CPLE_AppDefined,</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="stringliteral">"Unable to translate feature %d from layer %s.\n"</span>,</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> poFeature->GetFID(), imgWriterOgr.getLayerName(ilayer).c_str() );</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> }</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> ++ifeature;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="keywordflow">if</span>(!verbose_opt[0]){</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> progress=<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(ifeature+1.0)/nFeatures;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> pfnProgress(progress,pszMessage,pProgressArg);</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> }</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> OGRFeature::DestroyFeature( poFeature );</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> OGRFeature::DestroyFeature( poDstFeature );</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> }<span class="comment">//get next feature</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> }<span class="comment">//next layer</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> imgReaderOgr.close();</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">if</span>(output_opt.size())</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> imgWriterOgr.close();</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="keywordflow">if</span>(cm.nReference()){</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> std::cout << cm << std::endl;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> cout << <span class="stringliteral">"class #samples userAcc prodAcc"</span> << endl;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keywordtype">double</span> se95_ua=0;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="keywordtype">double</span> se95_pa=0;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordtype">double</span> se95_oa=0;</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="keywordtype">double</span> dua=0;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordtype">double</span> dpa=0;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keywordtype">double</span> doa=0;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="keywordflow">for</span>(<span class="keywordtype">short</span> iclass=0;iclass<cm.nClasses();++iclass){</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> dua=cm.ua_pct(cm.getClass(iclass),&se95_ua);</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> dpa=cm.pa_pct(cm.getClass(iclass),&se95_pa);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> cout << cm.getClass(iclass) << <span class="stringliteral">" "</span> << cm.nReference(cm.getClass(iclass)) << <span class="stringliteral">" "</span> << dua << <span class="stringliteral">" ("</span> << se95_ua << <span class="stringliteral">")"</span> << <span class="stringliteral">" "</span> << dp [...]
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> std::cout << <span class="stringliteral">"Kappa: "</span> << cm.kappa() << std::endl;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> doa=cm.oa(&se95_oa);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> std::cout << <span class="stringliteral">"Overall Accuracy: "</span> << 100*doa << <span class="stringliteral">" ("</span> << 100*se95_oa << <span class="stringliteral">")"</span> << std::endl;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> }</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="keywordflow">if</span>(active_opt.size())</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> activeWriter.close();</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="keywordflow">if</span>(extent_opt.size())</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> extentReader.close();</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> }</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="keywordflow">catch</span>(<span class="keywordtype">string</span> errorString){</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> std::cerr << <span class="stringliteral">"Error: errorString"</span> << std::endl;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ibag=0;ibag<nbag;++ibag){</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">// svm_destroy_param[ibag](¶m[ibag]);</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> svm_destroy_param(¶m[ibag]);</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> free(prob[ibag].y);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> free(prob[ibag].x);</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> free(x_space[ibag]);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> svm_free_and_destroy_model(&(svm[ibag]));</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> }</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> }</div>
+<div class="ttc" id="classImgReaderGdal_html"><div class="ttname"><a href="classImgReaderGdal.html">ImgReaderGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderGdal_8h_source.html#l00033">ImgReaderGdal.h:33</a></div></div>
+<div class="ttc" id="classImgWriterGdal_html"><div class="ttname"><a href="classImgWriterGdal.html">ImgWriterGdal</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterGdal_8h_source.html#l00032">ImgWriterGdal.h:32</a></div></div>
+<div class="ttc" id="classBadConversion_html"><div class="ttname"><a href="classBadConversion.html">BadConversion</a></div><div class="ttdoc">throw this class when syntax error in command line option </div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00045">Optionpk.h:45</a></div></div>
+<div class="ttc" id="classDecrease__PosValue_html"><div class="ttname"><a href="classDecrease__PosValue.html">Decrease_PosValue</a></div><div class="ttdef"><b>Definition:</b> <a href="PosValue_8h_source.html#l00034">PosValue.h:34</a></div></div>
+<div class="ttc" id="classVector2d_html"><div class="ttname"><a href="classVector2d.html">Vector2d</a></div><div class="ttdef"><b>Definition:</b> <a href="Vector2d_8h_source.html#l00031">Vector2d.h:31</a></div></div>
+<div class="ttc" id="classImgReaderOgr_html"><div class="ttname"><a href="classImgReaderOgr.html">ImgReaderOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgReaderOgr_8h_source.html#l00035">ImgReaderOgr.h:35</a></div></div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+<div class="ttc" id="classconfusionmatrix_1_1ConfusionMatrix_html"><div class="ttname"><a href="classconfusionmatrix_1_1ConfusionMatrix.html">confusionmatrix::ConfusionMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfusionMatrix_8h_source.html#l00032">ConfusionMatrix.h:32</a></div></div>
+<div class="ttc" id="structsvm__node_html"><div class="ttname"><a href="structsvm__node.html">svm_node</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00012">svm.h:12</a></div></div>
+<div class="ttc" id="classImgWriterOgr_html"><div class="ttname"><a href="classImgWriterOgr.html">ImgWriterOgr</a></div><div class="ttdef"><b>Definition:</b> <a href="ImgWriterOgr_8h_source.html#l00035">ImgWriterOgr.h:35</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm_8py_source.html b/doc/html/pksvm_8py_source.html
new file mode 100644
index 0000000..97ffab4
--- /dev/null
+++ b/doc/html/pksvm_8py_source.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pksvm.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pksvm.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pksvm.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">from</span> pktoolsAlgorithm <span class="keyword">import</span> pktoolsAlgorithm</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterMultipleInput</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterVector</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterRaster</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterExtent</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classqgis_1_1pksvm_1_1pksvm.html"> 39</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pksvm_1_1pksvm.html">pksvm</a>(pktoolsAlgorithm):</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> INPUT = <span class="stringliteral">"INPUT"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> TRAINING = <span class="stringliteral">"TRAINING"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ITERATE = <span class="stringliteral">"ITERATE"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> LABEL = <span class="stringliteral">"LABEL"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"># CV = "CV"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> GAMMA = <span class="stringliteral">"GAMMA"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> COST = <span class="stringliteral">"COST"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> OUTPUT = <span class="stringliteral">"OUTPUT"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> MASK = <span class="stringliteral">"MASK"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> MSKNODATA = <span class="stringliteral">"MSKNODATA"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"># NODATA = "NODATA"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"># SVM_TYPE_OPTIONS = ["C_SVC", "nu_SVC,one_class", "epsilon_SVR", "nu_SVR"]</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"># KERNEL_TYPE_OPTIONS = ["linear", "polynomial", "radial", "sigmoid"]</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> EXTRA = <span class="stringliteral">'EXTRA'</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">def </span>cliName(self):</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> <span class="stringliteral">"pksvm"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">def </span>defineCharacteristics(self):</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#aa5c7d4dda4c1b0316e26dfb3c8f4cf8f">name</a> = <span class="stringliteral">"Support vector machine"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a33cc5cc741eadc78c3fa6687592cd810">group</a> = <span class="stringliteral">"[pktools] supervised classification"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a70980660386dbf0e5a4abbaee81b20b7">INPUT</a>, <span class="stringliteral">'Input layer raster data set'</span>,ParameterRaster))</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> self.addParameter(ParameterVector(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a52e9137080458d2fa51683e03d046418">TRAINING</a>, <span class="stringliteral">'Training vector file.'</span>))</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.addParameter(ParameterBoolean(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a655f6139a543113d1dd2ad8b11f773b9">ITERATE</a>, <span class="stringliteral">"Iterate over all layers"</span>,<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a426fe91136cb5f3e7ebbeba2c4199501">LABEL</a>, <span class="stringliteral">"Attribute name for class label in training vector file"</span>,<span class="stringliteral">"label"</span>))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#ab6c3b8cccb265ca1cfadeaa79fed04a1">GAMMA</a>, <span class="stringliteral">"Gamma in kernel function"</span>,0,100,1.0))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> self.addParameter(ParameterNumber(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#ab3ec104ab7505d3115c8aa868b4f8cba">COST</a>, <span class="stringliteral">"The parameter C of C_SVC"</span>,0,100000,1000.0))</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> self.addParameter(ParameterRaster(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a614bbc0b875b73667749b0e58d89fc54">MASK</a>, <span class="stringliteral">"Mask raster dataset"</span>,optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a63e8acd9ffce30910af0eed869439190">MSKNODATA</a>, <span class="stringliteral">"Mask value(s) not to consider for classification (e.g., 0;255)"</span>,<span class="stringliteral">"0"</span>))</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> self.addOutput(OutputRaster(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#aeb7332c0838e46bfe82b647cb5085700">OUTPUT</a>, <span class="stringliteral">"Output raster data set"</span>))</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> self.addParameter(ParameterString(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#aead41106feadc1f8d3078aa839df4f79">EXTRA</a>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">'Additional parameters'</span>, <span class="stringliteral">'-of GTiff'</span>, optional=<span class="keyword">True</span>))</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"># self.addParameter(ParameterSelection(self.KERNEL_TYPE,"Type of kernel function (linear,polynomial,radial,sigmoid)",self.KERNEL_TYPE_OPTIONS, 2))</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"># self.addParameter(ParameterSelection(self.SVM_TYPE,"Type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR)",self.SVM_TYPE_OPTIONS, 0))</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">def </span>processAlgorithm(self, progress):</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> cliPath = <span class="stringliteral">'"'</span> + os.path.join(pktoolsUtils.pktoolsPath(), self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#ac0504ade82ce87e0d386db1a50812bf9">cliName</a>()) + <span class="stringliteral">'"'</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> commands = [cliPath]</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> input=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a70980660386dbf0e5a4abbaee81b20b7">INPUT</a>)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> input != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> commands.append(<span class="stringliteral">'-i'</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> commands.append(<span class="stringliteral">'"'</span> + input + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> commands.append(<span class="stringliteral">'-t'</span>)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> training=self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a52e9137080458d2fa51683e03d046418">TRAINING</a>)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> if(str(training).find(<span class="stringliteral">'|'</span>)>0):</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a655f6139a543113d1dd2ad8b11f773b9">ITERATE</a>):</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> trainingname=str(training)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> commands.append(trainingname[:trainingname.find(<span class="stringliteral">'|'</span>)])</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> trainingname=str(training).replace(<span class="stringliteral">"|layername"</span>,<span class="stringliteral">" -ln"</span>)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> commands.append(trainingname)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> commands.append(training)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> commands.append(<span class="stringliteral">'-label'</span>)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a426fe91136cb5f3e7ebbeba2c4199501">LABEL</a>)))</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"># if self.getParameterValue(self.CV):</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"># commands.append("-cv 2")</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> commands.append(<span class="stringliteral">'-g'</span>)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#ab6c3b8cccb265ca1cfadeaa79fed04a1">GAMMA</a>)))</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> commands.append(<span class="stringliteral">'-cc'</span>)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> commands.append(str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#ab3ec104ab7505d3115c8aa868b4f8cba">COST</a>)))</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> mask = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a614bbc0b875b73667749b0e58d89fc54">MASK</a>))</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> mask != <span class="stringliteral">"None"</span>:</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> commands.append(<span class="stringliteral">'-m'</span>)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> commands.append(mask)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> msknodata=str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#a63e8acd9ffce30910af0eed869439190">MSKNODATA</a>))</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> msknodataValues = msknodata.split(<span class="stringliteral">';'</span>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">for</span> msknodataValue <span class="keywordflow">in</span> msknodataValues:</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> commands.append(<span class="stringliteral">'-msknodata'</span>)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> commands.append(msknodataValue)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> extra = str(self.getParameterValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#aead41106feadc1f8d3078aa839df4f79">EXTRA</a>))</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> len(extra) > 0:</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> commands.append(extra)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> output=self.getOutputValue(self.<a class="code" href="classqgis_1_1pksvm_1_1pksvm.html#aeb7332c0838e46bfe82b647cb5085700">OUTPUT</a>)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> output != <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> commands.append(<span class="stringliteral">'-o'</span>)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> commands.append(<span class="stringliteral">'"'</span> + output + <span class="stringliteral">'"'</span>)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> pktoolsUtils.runpktools(commands, progress)</div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a52e9137080458d2fa51683e03d046418"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a52e9137080458d2fa51683e03d046418">qgis.pksvm.pksvm.TRAINING</a></div><div class="ttdeci">string TRAINING</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00042">pksvm.py:42</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_aead41106feadc1f8d3078aa839df4f79"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#aead41106feadc1f8d3078aa839df4f79">qgis.pksvm.pksvm.EXTRA</a></div><div class="ttdeci">string EXTRA</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00055">pksvm.py:55</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a614bbc0b875b73667749b0e58d89fc54"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a614bbc0b875b73667749b0e58d89fc54">qgis.pksvm.pksvm.MASK</a></div><div class="ttdeci">string MASK</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00049">pksvm.py:49</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_ab6c3b8cccb265ca1cfadeaa79fed04a1"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#ab6c3b8cccb265ca1cfadeaa79fed04a1">qgis.pksvm.pksvm.GAMMA</a></div><div class="ttdeci">string GAMMA</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00046">pksvm.py:46</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a655f6139a543113d1dd2ad8b11f773b9"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a655f6139a543113d1dd2ad8b11f773b9">qgis.pksvm.pksvm.ITERATE</a></div><div class="ttdeci">string ITERATE</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00043">pksvm.py:43</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a63e8acd9ffce30910af0eed869439190"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a63e8acd9ffce30910af0eed869439190">qgis.pksvm.pksvm.MSKNODATA</a></div><div class="ttdeci">string MSKNODATA</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00050">pksvm.py:50</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a33cc5cc741eadc78c3fa6687592cd810"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a33cc5cc741eadc78c3fa6687592cd810">qgis.pksvm.pksvm.group</a></div><div class="ttdeci">group</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00062">pksvm.py:62</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_ab3ec104ab7505d3115c8aa868b4f8cba"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#ab3ec104ab7505d3115c8aa868b4f8cba">qgis.pksvm.pksvm.COST</a></div><div class="ttdeci">string COST</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00047">pksvm.py:47</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_aa5c7d4dda4c1b0316e26dfb3c8f4cf8f"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#aa5c7d4dda4c1b0316e26dfb3c8f4cf8f">qgis.pksvm.pksvm.name</a></div><div class="ttdeci">name</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00061">pksvm.py:61</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a426fe91136cb5f3e7ebbeba2c4199501"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a426fe91136cb5f3e7ebbeba2c4199501">qgis.pksvm.pksvm.LABEL</a></div><div class="ttdeci">string LABEL</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00044">pksvm.py:44</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html">qgis.pksvm.pksvm</a></div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00039">pksvm.py:39</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_a70980660386dbf0e5a4abbaee81b20b7"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#a70980660386dbf0e5a4abbaee81b20b7">qgis.pksvm.pksvm.INPUT</a></div><div class="ttdeci">string INPUT</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00041">pksvm.py:41</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_aeb7332c0838e46bfe82b647cb5085700"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#aeb7332c0838e46bfe82b647cb5085700">qgis.pksvm.pksvm.OUTPUT</a></div><div class="ttdeci">string OUTPUT</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00048">pksvm.py:48</a></div></div>
+<div class="ttc" id="classqgis_1_1pksvm_1_1pksvm_html_ac0504ade82ce87e0d386db1a50812bf9"><div class="ttname"><a href="classqgis_1_1pksvm_1_1pksvm.html#ac0504ade82ce87e0d386db1a50812bf9">qgis.pksvm.pksvm.cliName</a></div><div class="ttdeci">def cliName</div><div class="ttdef"><b>Definition:</b> <a href="pksvm_8py_source.html#l00057">pksvm.py:57</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm__gui_2main_8cpp_source.html b/doc/html/pksvm__gui_2main_8cpp_source.html
new file mode 100644
index 0000000..919427a
--- /dev/null
+++ b/doc/html/pksvm__gui_2main_8cpp_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pksvm_gui/main.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html">pksvm_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">main.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">main.cpp: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <QApplication></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> QApplication a(argc, argv);</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <a class="code" href="classMainWindow.html">MainWindow</a> w;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> w.show();</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span> a.exec();</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm__gui_2mainwindow_8cpp_source.html b/doc/html/pksvm__gui_2mainwindow_8cpp_source.html
new file mode 100644
index 0000000..5010894
--- /dev/null
+++ b/doc/html/pksvm__gui_2mainwindow_8cpp_source.html
@@ -0,0 +1,353 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pksvm_gui/mainwindow.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html">pksvm_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.cpp: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "mainwindow.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "ui_mainwindow.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <QFileDialog></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QStandardItemModel></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <QMessageBox></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <QProcess></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> MainWindow::MainWindow(QWidget *parent) :</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> QMainWindow(parent),</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> ui(new Ui::<a class="code" href="classMainWindow.html">MainWindow</a>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> ui->setupUi(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> QStringList svmlist;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> svmlist << <span class="stringliteral">"C_SVC"</span> << <span class="stringliteral">"nu_SVC"</span> << <span class="stringliteral">"one_class"</span> << <span class="stringliteral">"epsilon_SVR"</span> << <span class="stringliteral">"nu_SVR"</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> ui->svmtype->addItems(svmlist);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> QStringList kernellist;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> kernellist << <span class="stringliteral">"radial"</span> << <span class="stringliteral">"linear"</span> << <span class="stringliteral">"polynomial"</span> << <span class="stringliteral">"sigmoid"</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> ui->kerneltype->addItems(kernellist);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> setDefaults();</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> MainWindow::~MainWindow()</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">delete</span> ui;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> MainWindow::setDefaults()</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//tab training</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">//m_training="d:\\osgeo\\course\\openstreetmap\\training2.sqlite";</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// ui->training->setText(m_training);</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> ui->cv->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> ui->training->clear();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ui->tln->clear();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ui->label->setText(<span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> QStringList labels;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> setClassTable(labels);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ui->nclass->clear();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">//tab input/output</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> ui->input->clear();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ui->msknodata->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> ui->output->clear();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> ui->nodata->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> ui->ct->clear();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">//tab classifier</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> ui->coef0->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> ui->nu->setText(<span class="stringliteral">"0.5"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> ui->kd->setText(<span class="stringliteral">"3"</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> ui->label->setText(<span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> ui->cv->setText(<span class="stringliteral">"0"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> ui->gamma->setText(<span class="stringliteral">"1"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> ui->ccost->setText(<span class="stringliteral">"1000"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> MainWindow::on_actionTraining_triggered()</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> QString qstraining = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Training"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ui->training->setText(qstraining);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> this->on_training_returnPressed();</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> MainWindow::on_actionMask_triggered()</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> QString qsmask = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Mask"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ui->mask->setText(qsmask);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">void</span> MainWindow::on_actionOutput_triggered()</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> QString qsoutput = QFileDialog::getSaveFileName(<span class="keyword">this</span>,<span class="stringliteral">"Output image"</span>,<span class="stringliteral">""</span>,<span class="stringliteral">"*.*"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ui->output->setText(qsoutput);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> MainWindow::on_actionInput_triggered()</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> QString qsinput = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Input"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> ui->input->setText(qsinput);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">void</span> MainWindow::on_actionColor_table_triggered()</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> QString qsct = QFileDialog::getOpenFileName(<span class="keyword">this</span>, <span class="stringliteral">"Color table"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> ui->ct->setText(qsct);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_input_clicked()</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_mask_clicked()</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> on_actionMask_triggered();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_output_clicked()</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_training_clicked()</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> on_actionTraining_triggered();</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> MainWindow::on_toolButton_ct_clicked()</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> on_actionColor_table_triggered();</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">void</span> MainWindow::on_training_returnPressed()</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//eventually read classes from vector file to fill in table...</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">void</span> MainWindow::setClassTable(<span class="keyword">const</span> QStringList &labels)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> QStandardItemModel *model = <span class="keyword">new</span> QStandardItemModel(labels.size(),4,<span class="keyword">this</span>); <span class="comment">//nlabel rows and 4 columns</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> model->setHorizontalHeaderItem(0, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"label name"</span>)));</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> model->setHorizontalHeaderItem(1, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"class nr"</span>)));</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> model->setHorizontalHeaderItem(2, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"prior prob"</span>)));</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> model->setHorizontalHeaderItem(3, <span class="keyword">new</span> QStandardItem(QString(<span class="stringliteral">"balance (optional)"</span>)));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ilabel=0;ilabel<labels.size();++ilabel){</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> QStandardItem *firstCol = <span class="keyword">new</span> QStandardItem(QString(labels[ilabel]));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> model->setItem(ilabel,0,firstCol);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> QStandardItem *secondCol = <span class="keyword">new</span> QStandardItem(QString::number(ilabel+1));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> model->setItem(ilabel,1,secondCol);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> QStandardItem *thirdCol = <span class="keyword">new</span> QStandardItem(QString::number(1.0/labels.size()));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> model->setItem(ilabel,2,thirdCol);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> ui->tableView_labels->setModel(model);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_run_clicked()</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> ui->commandLineEdit->clear();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> ui->consoleEdit->clear();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> QString program = <span class="stringliteral">"pksvm"</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(ui->training->text().isEmpty())</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> MainWindow::on_actionTraining_triggered();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(ui->training->text().isEmpty()){</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> QString qsError=<span class="stringliteral">"No training vector file selected"</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(!ui->input->text().isEmpty()){</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty())</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> MainWindow::on_actionOutput_triggered();</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(ui->output->text().isEmpty()){</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> QString qsError=<span class="stringliteral">"No training vector file selected"</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">throw</span>(qsError);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// QList<QCheckBox*> qcheckBoxList = this->findChildren<QCheckBox *>();</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// for(QList<QCheckBox*>::ConstIterator qcbit=qcheckBoxList.begin();qcbit!=qcheckBoxList.end();++qcbit){</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// if((*qcbit)->isChecked()){</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// QString qsOption;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// qsOption+=" --";</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// qsOption+=(*qcbit)->objectName();</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// program+=qsOption;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// }</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> QStringList qslBalance;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> QString qsOption;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> qsOption+=<span class="stringliteral">" --class "</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,0)).toString();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> qsOption+=<span class="stringliteral">" --reclass "</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,1)).toString();</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> qsOption+=<span class="stringliteral">" --prior "</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,2)).toString();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> program+=qsOption;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(ui->tableView_labels->model()->columnCount()>3){</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> QString qsbalance=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,3)).toString();</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(!qsbalance.isEmpty())</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> qslBalance << qsbalance;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(qslBalance.size()){</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> QString qsOption;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> qsOption+=<span class="stringliteral">" --balance "</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(qslBalance.size()==ui->tableView_labels->model()->rowCount())</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> qsOption+=qslBalance[irow];</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> qsOption+=qslBalance[0];</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> program+=qsOption;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> QList<QComboBox*> qcomboBoxList = this->findChildren<QComboBox *>();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span>(QList<QComboBox*>::ConstIterator qcbit=qcomboBoxList.begin();qcbit!=qcomboBoxList.end();++qcbit){</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> QString qsOption;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> qsOption+=(*qcbit)->objectName();</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> program+=qsOption;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> program+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> program+=(*qcbit)->currentText();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">for</span>(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span>(!((*qlbit)->text().isEmpty())){</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> QString qsOption;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> qsOption+=<span class="stringliteral">" --"</span>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> qsOption+=(*qlbit)->objectName();</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> qsOption+=<span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> qsOption+=(*qlbit)->text();</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> program+=qsOption;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> ui->commandLineEdit->setText(program);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// QProcess *myProcess = new QProcess(parent);</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> QProcess *myProcess = <span class="keyword">new</span> QProcess(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> myProcess->start(program);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> myProcess->setProcessChannelMode(QProcess::MergedChannels);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> this->setCursor(Qt::WaitCursor);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> myProcess->waitForFinished(-1);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> this->setCursor(Qt::ArrowCursor);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> QString p_stderr = myProcess->readAllStandardError();</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(!p_stderr.isEmpty()){</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> msgBox.setText(p_stderr);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> msgBox.exec();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> QString p_stdout = myProcess->readAll();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> ui->consoleEdit->insertPlainText(p_stdout);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">delete</span> myProcess;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">catch</span>(QString qsError){</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> QMessageBox msgBox;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> msgBox.setText(qsError);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> msgBox.exec();</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">void</span> MainWindow::on_pushButton_restore_clicked()</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> setDefaults();</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">void</span> MainWindow::on_commandLinkButtonPrepareTable_clicked()</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">int</span> nclass=ui->nclass->text().toInt();</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> QStringList labels;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iclass=1;iclass<=nclass;++iclass){</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> QString lstring=<span class="stringliteral">"label"</span>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> lstring+=QString::number(iclass);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> labels << lstring;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> setClassTable(labels);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pksvm__gui_2mainwindow_8h_source.html b/doc/html/pksvm__gui_2mainwindow_8h_source.html
new file mode 100644
index 0000000..ba8ad48
--- /dev/null
+++ b/doc/html/pksvm__gui_2mainwindow_8h_source.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qt/pksvm_gui/mainwindow.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html">qt</a></li><li class="navelem"><a class="el" href="dir_b66e135988e27fdc966ddddb8708f514.html">pksvm_gui</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mainwindow.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">mainwindow.h: GUI for pktools</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2014 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span><span class="preprocessor">#define MAINWINDOW_H</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <QMainWindow></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span>Ui {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">class </span><a class="code" href="classMainWindow.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> Q_OBJECT</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">explicit</span> <a class="code" href="classMainWindow.html">MainWindow</a>(QWidget *parent = 0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ~<a class="code" href="classMainWindow.html">MainWindow</a>();</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">private</span> slots:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> on_actionInput_triggered();</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> on_actionTraining_triggered();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> on_actionMask_triggered();</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> on_actionOutput_triggered();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> on_toolButton_input_clicked();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> on_toolButton_mask_clicked();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> on_toolButton_output_clicked();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> on_toolButton_training_clicked();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> on_training_returnPressed();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> on_pushButton_run_clicked();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">void</span> on_pushButton_restore_clicked();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> on_commandLinkButtonPrepareTable_clicked();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> on_actionColor_table_triggered();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> on_toolButton_ct_clicked();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> setClassTable(<span class="keyword">const</span> QStringList &labels);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> setDefaults();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <a class="code" href="classUi_1_1MainWindow.html">Ui::MainWindow</a> *ui;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// QString m_input;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// QString m_training;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// QString m_mask;</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// QString m_output;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> };</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#endif // MAINWINDOW_H</span></div>
+<div class="ttc" id="classUi_1_1MainWindow_html"><div class="ttname"><a href="classUi_1_1MainWindow.html">Ui::MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="build-pkcomposite__gui-gcc-Debug_2ui__mainwindow_8h_source.html#l00702">ui_mainwindow.h:702</a></div></div>
+<div class="ttc" id="classMainWindow_html"><div class="ttname"><a href="classMainWindow.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="pkcomposite__gui_2mainwindow_8h_source.html#l00031">mainwindow.h:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pktestOption_8cc_source.html b/doc/html/pktestOption_8cc_source.html
new file mode 100644
index 0000000..e487722
--- /dev/null
+++ b/doc/html/pktestOption_8cc_source.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/base/pktestOption.cc Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_0af1587c8378955de40f48b4bd1869f0.html">base</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pktestOption.cc</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">pktestOption: example program how to use class Optionpk pktestOption.cc </span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">Copyright (C) 2008-2013 Pieter Kempeneers</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">This file is part of pktools</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">pktools is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">(at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">pktools is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">along with pktools. If not, see <http://www.gnu.org/licenses/>.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">***********************************************************************/</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <iostream></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "base/Optionpk.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <a class="code" href="classOptionpk.html">Optionpk<std::string></a> foo_opt(<span class="stringliteral">"f"</span>,<span class="stringliteral">"foo"</span>,<span class="stringliteral">"command line option **foo** of type string can be invoked with either short (f) or long (foo) option"</span>,<span class="stringliteral">"defaultString"</span>);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <a class="code" href="classOptionpk.html">Optionpk<int></a> bar_opt(<span class="stringliteral">"\0"</span>,<span class="stringliteral">"bar"</span>,<span class="stringliteral">"command line option **bar** of type int has no short option"</span>,<span class="keyword">false</span>,1);<span class="comment">//bar will only be visible in long help (hide=1)</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <a class="code" href="classOptionpk.html">Optionpk<bool></a> easterEgg_opt(<span class="stringliteral">"egg"</span>,<span class="stringliteral">"egg"</span>,<span class="stringliteral">"this help information is useless"</span>,<span class="keyword">false</span>,2);<span class="comment">//this option will not be shown in help (hide=2)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">bool</span> doProcess;<span class="comment">//stop process when program was invoked with help option (-h --help)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">try</span>{</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> doProcess=foo_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> bar_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> easterEgg_opt.retrieveOption(argc,argv);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">catch</span>(std::string predefinedString){<span class="comment">//command line option contained license or version</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> std::cout << predefinedString << std::endl;<span class="comment">//report the predefined string to stdout</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> exit(0);<span class="comment">//stop processing</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span>(!doProcess){<span class="comment">//command line option contained help option</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> std::cout << <span class="stringliteral">"short option -h shows basic options only, use long option --help to show all options"</span> << std::endl;<span class="comment">//provide extra details for help to the user</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> exit(0);<span class="comment">//stop processing</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> std::cout << <span class="stringliteral">"foo: "</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ifoo=0;ifoo<foo_opt.size();++ifoo){</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> std::cout << foo_opt[ifoo] << <span class="stringliteral">" "</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> std::cout << std::endl;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> std::cout << foo_opt << std::endl;<span class="comment">//short cut for code above</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span>(bar_opt[0]>0)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> std::cout << <span class="stringliteral">"long option for bar was used with a positive value"</span> << std::endl;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span>(easterEgg_opt[0])</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> std::cout << <span class="stringliteral">"How did you find this option -egg or --egg? Not through the help info!"</span> << std::endl;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="ttc" id="classOptionpk_html"><div class="ttname"><a href="classOptionpk.html">Optionpk</a></div><div class="ttdef"><b>Definition:</b> <a href="Optionpk_8h_source.html#l00106">Optionpk.h:106</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pktoolsAlgorithmProvider_8py_source.html b/doc/html/pktoolsAlgorithmProvider_8py_source.html
new file mode 100644
index 0000000..33dff5e
--- /dev/null
+++ b/doc/html/pktoolsAlgorithmProvider_8py_source.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pktoolsAlgorithmProvider.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pktoolsAlgorithmProvider.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pktoolsAlgorithmProvider.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">#from pktools.ExampleAlgorithm import ExampleAlgorithm</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">#raster utilities</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> pktools.pkcomposite <span class="keyword">import</span> pkcomposite</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> pktools.pkcrop <span class="keyword">import</span> pkcrop</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> pktools.pkreclass <span class="keyword">import</span> pkreclass</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> pktools.pkgetmask <span class="keyword">import</span> pkgetmask</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> pktools.pksetmask <span class="keyword">import</span> pksetmask</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">#raster/vector utilities</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> pktools.pkextract <span class="keyword">import</span> pkextract</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> pktools.pkextract_grid <span class="keyword">import</span> pkextract_grid</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">from</span> pktools.pkextract_random <span class="keyword">import</span> pkextract_random</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">#Supervised classification utilities</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">from</span> pktools.pksvm <span class="keyword">import</span> pksvm</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">from</span> pktools.pkdiff_accuracy <span class="keyword">import</span> pkdiff_accuracy</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">#LiDAR utilities</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">from</span> pktools.pklas2img <span class="keyword">import</span> pklas2img</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">from</span> pktools.pkfilterdem <span class="keyword">import</span> pkfilterdem</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">#filter utilities</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">from</span> pktools.pkfilter_spectral <span class="keyword">import</span> pkfilter_spectral</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">from</span> pktools.pkfilter_spatial <span class="keyword">import</span> pkfilter_spatial</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">from</span> processing.core.AlgorithmProvider <span class="keyword">import</span> AlgorithmProvider</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">from</span> processing.core.ProcessingConfig <span class="keyword">import</span> Setting, ProcessingConfig</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">from</span> PyQt4 <span class="keyword">import</span> QtGui</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">from</span> pktools.pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html"> 55</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html">pktoolsAlgorithmProvider</a>(AlgorithmProvider):</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> MY_DUMMY_SETTING = <span class="stringliteral">"MY_DUMMY_SETTING"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">def </span>__init__(self):</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> AlgorithmProvider.__init__(self)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"># deactivate provider by default</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a431ba8d9bcf8cb86744888c39ce0159e">activate</a> = <span class="keyword">True</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"># load algorithms</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"># self.alglist = [pkinfo()]</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a18808e0ef41167a503d619e8dcf39c33">alglist</a> = [pkreclass(),pkcrop(),pkcomposite(),pkgetmask(),pksetmask(),pkextract(),pkextract_grid(),pkextract_random(),pksvm(),pkdiff_accuracy(),pklas2img(),pkfilterdem(),pkfilter_spectral(),pkfilter_spatial()]</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"># pktools = [pkinfo()]</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"># for alg in pktools:</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"># alg.group = "pktools"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"># self.alglist.extend(pktools)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span> alg <span class="keywordflow">in</span> self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a18808e0ef41167a503d619e8dcf39c33">alglist</a>:</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> alg.provider = self</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344"> 73</a></span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">initializeSettings</a>(self):</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">'''In this method we add settings needed to configure our provider.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="stringliteral"> Do not forget to call the parent method, since it takes care or</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral"> automatically adding a setting for activating or deactivating the</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral"> algorithms in the provider</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> AlgorithmProvider.initializeSettings(self)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> ProcessingConfig.addSetting(Setting(self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">getDescription</a>(), pktoolsUtils.PKTOOLS_FOLDER, <span class="stringliteral">"pktools folder"</span>, pktoolsUtils.pktoolsPath()))</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"># ProcessingConfig.addSetting(Setting("Example algorithms", pktoolsAlgorithmProvider.MY_DUMMY_SETTING, "Example setting", "Default value"))</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"># '''To get the parameter of a setting parameter, use</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"># ProcessingConfig.getSetting(name_of_parameter)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"># '''</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa"> 87</a></span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">unload</a>(self):</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="stringliteral">'''Setting should be removed here, so they do not appear anymore</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="stringliteral"> when the plugin is unloaded'''</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> AlgorithmProvider.unload(self)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ProcessingConfig.removeSetting(pktoolsAlgorithmProvider.MY_DUMMY_SETTING)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473"> 93</a></span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">getName</a>(self):</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="stringliteral">'''This is the name that will appear on the toolbox group.</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="stringliteral"> It is also used to create the command line name of all the algorithms</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="stringliteral"> from this provider</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> <span class="stringliteral">"pktools"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1"> 100</a></span> <span class="keyword">def </span><a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">getDescription</a>(self):</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="stringliteral">'''This is the provired full name.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">return</span> <span class="stringliteral">"Utilities for remote sensing image processing"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">def </span>getIcon(self):</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> filepath = os.path.dirname(__file__) + <span class="stringliteral">"/logo.png"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> QtGui.QIcon(filepath)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">def </span>_loadAlgorithms(self):</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="stringliteral">'''Here we fill the list of algorithms in self.algs.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="stringliteral"> This method is called whenever the list of algorithms should be updated.</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="stringliteral"> If the list of algorithms can change</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="stringliteral"> (for instance, if it contains algorithms from user-defined scripts and</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="stringliteral"> a new script might have been added), you should create the list again</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="stringliteral"> here.</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="stringliteral"> In this case, since the list is always the same, we assign from the pre-made list.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="stringliteral"> This assignment has to be done in this method even if the list does not change,</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="stringliteral"> since the self.algs list is cleared before calling this method</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="stringliteral"> '''</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ad93cae1d50d4c7fe0d39b40ae0a9f71b">algs</a> = self.<a class="code" href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a18808e0ef41167a503d619e8dcf39c33">alglist</a></div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a431ba8d9bcf8cb86744888c39ce0159e"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a431ba8d9bcf8cb86744888c39ce0159e">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.activate</a></div><div class="ttdeci">activate</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00062">pktoolsAlgorithmProvider.py [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a41cbf8f2612d0ba5e7e858f421e4c344"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a41cbf8f2612d0ba5e7e858f421e4c344">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.initializeSettings</a></div><div class="ttdeci">def initializeSettings</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00073">pkt [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a458d5bb02c856ca83d7ca332ff4125aa"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a458d5bb02c856ca83d7ca332ff4125aa">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.unload</a></div><div class="ttdeci">def unload</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00087">pktoolsAlgorithmProvider.py [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_a18808e0ef41167a503d619e8dcf39c33"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#a18808e0ef41167a503d619e8dcf39c33">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.alglist</a></div><div class="ttdeci">alglist</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00065">pktoolsAlgorithmProvider.py:6 [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider</a></div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00055">pktoolsAlgorithmProvider.py:55</a></div></div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_aa6d4f9562f9502ae7c12e90d0d95d7b1"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#aa6d4f9562f9502ae7c12e90d0d95d7b1">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getDescription</a></div><div class="ttdeci">def getDescription</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00100">pktoolsAlgo [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_ac0eb1ee881715c3efe5819e23b8ff473"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ac0eb1ee881715c3efe5819e23b8ff473">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.getName</a></div><div class="ttdeci">def getName</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00093">pktoolsAlgorithmProvider. [...]
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider_html_ad93cae1d50d4c7fe0d39b40ae0a9f71b"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithmProvider_1_1pktoolsAlgorithmProvider.html#ad93cae1d50d4c7fe0d39b40ae0a9f71b">qgis.pktoolsAlgorithmProvider.pktoolsAlgorithmProvider.algs</a></div><div class="ttdeci">algs</div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithmProvider_8py_source.html#l00120">pktoolsAlgorithmProvider.py:120</a> [...]
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pktoolsAlgorithm_8py_source.html b/doc/html/pktoolsAlgorithm_8py_source.html
new file mode 100644
index 0000000..80f57d2
--- /dev/null
+++ b/doc/html/pktoolsAlgorithm_8py_source.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pktoolsAlgorithm.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pktoolsAlgorithm.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pktoolsAlgorithm.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">from</span> processing.core.GeoAlgorithm <span class="keyword">import</span> GeoAlgorithm</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">from</span> PyQt4 <span class="keyword">import</span> QtGui</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> pktools.pktoolsUtils <span class="keyword">import</span> pktoolsUtils</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterFile</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterBoolean</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterNumber</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterString</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">from</span> processing.core.parameters <span class="keyword">import</span> ParameterSelection</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputFile</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputRaster</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">from</span> processing.core.outputs <span class="keyword">import</span> OutputVector</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html"> 41</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">pktoolsAlgorithm</a>(GeoAlgorithm):</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">def </span>getIcon(self):</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> filepath = os.path.dirname(__file__) + <span class="stringliteral">"/logo.png"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> QtGui.QIcon(filepath)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">def </span>checkBeforeOpeningParametersDialog(self):</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> path = pktoolsUtils.pktoolsPath()</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">if</span> path == <span class="stringliteral">""</span>:</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">return</span> <span class="stringliteral">"pktools folder is not configured.\nPlease configure it before running pktools algorithms."</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">def </span>help(self):</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">#utilityName=self.__class__.__name__</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> helpUrl = <span class="stringliteral">'http://pktools.nongnu.org/html/md_{}.html'</span>.format(self.cliName())</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> <span class="keyword">False</span>, helpUrl </div>
+<div class="ttc" id="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm_html"><div class="ttname"><a href="classqgis_1_1pktoolsAlgorithm_1_1pktoolsAlgorithm.html">qgis.pktoolsAlgorithm.pktoolsAlgorithm</a></div><div class="ttdef"><b>Definition:</b> <a href="pktoolsAlgorithm_8py_source.html#l00041">pktoolsAlgorithm.py:41</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/pktoolsUtils_8py_source.html b/doc/html/pktoolsUtils_8py_source.html
new file mode 100644
index 0000000..8bcc521
--- /dev/null
+++ b/doc/html/pktoolsUtils_8py_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/qgis/pktoolsUtils.py Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_5785acc8d2e42f8795bdbe936856f26d.html">qgis</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pktoolsUtils.py</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment"># -*- coding: utf-8 -*-</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="stringliteral"> pktoolsUtils.py</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="stringliteral"> ---------------------</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="stringliteral"> Date : April 2015</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="stringliteral"> Copyright : (C) 2015 by Pieter Kempeneers</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="stringliteral"> Email : kempenep at gmail dot com</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="stringliteral">* This program is free software; you can redistribute it and/or modify *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="stringliteral">* it under the terms of the GNU General Public License as published by *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="stringliteral">* the Free Software Foundation; either version 2 of the License, or *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="stringliteral">* (at your option) any later version. *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="stringliteral">* *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="stringliteral">***************************************************************************</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="stringliteral">"""</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> __author__ = <span class="stringliteral">'Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> __date__ = <span class="stringliteral">'April 2015'</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> __copyright__ = <span class="stringliteral">'(C) 2015, Pieter Kempeneers'</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"># This will get replaced with a git SHA1 when you do a git archive</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> __revision__ = <span class="stringliteral">'$Format:%H$'</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">from</span> <a class="code" href="namespacePyQt4_1_1QtCore.html">PyQt4.QtCore</a> <span class="keyword">import</span> *</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">from</span> <a class="code" href="namespacePyQt4_1_1QtGui.html">PyQt4.QtGui</a> <span class="keyword">import</span> *</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">import</span> os</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">import</span> subprocess</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">from</span> <a class="code" href="namespaceqgis_1_1core.html">qgis.core</a> <span class="keyword">import</span> QgsApplication</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">from</span> processing.core.ProcessingLog <span class="keyword">import</span> ProcessingLog</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">from</span> processing.core.ProcessingConfig <span class="keyword">import</span> ProcessingConfig</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">from</span> processing.tools.system <span class="keyword">import</span> isWindows, isMac, userFolder</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html"> 35</a></span> <span class="keyword">class </span><a class="code" href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">pktoolsUtils</a>():</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> PKTOOLS_FOLDER = <span class="stringliteral">"PKTOOLS_FOLDER"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> @staticmethod</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">def </span>pktoolsPath():</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> folder = ProcessingConfig.getSetting(pktoolsUtils.PKTOOLS_FOLDER)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span> folder <span class="keywordflow">is</span> <span class="keywordtype">None</span> <span class="keywordflow">or</span> folder == <span class="stringliteral">''</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span> isWindows():</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> testfolder = os.path.join(os.path.dirname(QgsApplication.prefixPath()), <span class="stringliteral">'pktools'</span>)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> testfolder = os.path.join(testfolder, <span class="stringliteral">'bin'</span>)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span> os.path.exists(os.path.join(testfolder, <span class="stringliteral">'pkinfo'</span>)):</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> folder = testfolder</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> folder = testfolder</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> testfolder = <span class="stringliteral">"/usr/bin"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> os.path.exists(os.path.join(testfolder, <span class="stringliteral">"pkinfo"</span>)):</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> folder = testfolder</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">else</span>:</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> testfolder = <span class="stringliteral">"/usr/local/bin"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> os.path.exists(os.path.join(testfolder, <span class="stringliteral">"pkinfo"</span>)):</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> folder = testfolder</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> folder = testfolder</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> folder</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> @staticmethod</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">def </span>runpktools(commands, progress):</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> settings = QSettings()<span class="comment">#from gdal</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> loglines = []</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> loglines.append(<span class="stringliteral">"pktools execution console output"</span>)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> loglines.append(commands)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> progress.setInfo(<span class="stringliteral">'pktools command:'</span>)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> commandline = <span class="stringliteral">" "</span>.join(commands)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> progress.setCommand(commandline)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> proc = subprocess.Popen(</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> commandline,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> shell=<span class="keyword">True</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> stdout=subprocess.PIPE,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> stdin=open(os.devnull),</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> stderr=subprocess.STDOUT,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> universal_newlines=<span class="keyword">True</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> ).stdout</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> progress.setInfo(<span class="stringliteral">'pktools command output:'</span>)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span> line <span class="keywordflow">in</span> iter(proc.readline, <span class="stringliteral">""</span>):</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> progress.setConsoleInfo(line)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> loglines.append(line)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> ProcessingLog.addToLog(ProcessingLog.LOG_INFO, loglines)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ProcessingLog.addToLog(ProcessingLog.LOG_INFO, commandline)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> pktoolsUtils.consoleOutput = loglines</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"># @staticmethod</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"># def getConsoleOutput():</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"># return pktoolsUtils.consoleOutput</span></div>
+<div class="ttc" id="namespacePyQt4_1_1QtCore_html"><div class="ttname"><a href="namespacePyQt4_1_1QtCore.html">QtCore</a></div></div>
+<div class="ttc" id="namespaceqgis_1_1core_html"><div class="ttname"><a href="namespaceqgis_1_1core.html">core</a></div></div>
+<div class="ttc" id="classqgis_1_1pktoolsUtils_1_1pktoolsUtils_html"><div class="ttname"><a href="classqgis_1_1pktoolsUtils_1_1pktoolsUtils.html">qgis.pktoolsUtils.pktoolsUtils</a></div><div class="ttdef"><b>Definition:</b> <a href="pktoolsUtils_8py_source.html#l00035">pktoolsUtils.py:35</a></div></div>
+<div class="ttc" id="namespacePyQt4_1_1QtGui_html"><div class="ttname"><a href="namespacePyQt4_1_1QtGui.html">QtGui</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structIndexValue-members.html b/doc/html/structIndexValue-members.html
new file mode 100644
index 0000000..7195ef7
--- /dev/null
+++ b/doc/html/structIndexValue-members.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">IndexValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structIndexValue.html">IndexValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>position</b> (defined in <a class="el" href="structIndexValue.html">IndexValue</a>)</td><td class="entry"><a class="el" href="structIndexValue.html">IndexValue</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b> (defined in <a class="el" href="structIndexValue.html">IndexValue</a>)</td><td class="entry"><a class="el" href="structIndexValue.html">IndexValue</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structIndexValue.html b/doc/html/structIndexValue.html
new file mode 100644
index 0000000..b541190
--- /dev/null
+++ b/doc/html/structIndexValue.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: IndexValue Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structIndexValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">IndexValue Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a00d827f814cf23d44711038d90242589"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d827f814cf23d44711038d90242589"></a>
+int </td><td class="memItemRight" valign="bottom"><b>position</b></td></tr>
+<tr class="separator:a00d827f814cf23d44711038d90242589"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0fdfc25638ea2920d60cea8e0fc40b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0fdfc25638ea2920d60cea8e0fc40b8"></a>
+double </td><td class="memItemRight" valign="bottom"><b>value</b></td></tr>
+<tr class="separator:ae0fdfc25638ea2920d60cea8e0fc40b8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="IndexValue_8h_source.html#l00023">23</a> of file <a class="el" href="IndexValue_8h_source.html">IndexValue.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="IndexValue_8h_source.html">IndexValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structPosValue-members.html b/doc/html/structPosValue-members.html
new file mode 100644
index 0000000..3fb5d8b
--- /dev/null
+++ b/doc/html/structPosValue-members.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">PosValue Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structPosValue.html">PosValue</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>posx</b> (defined in <a class="el" href="structPosValue.html">PosValue</a>)</td><td class="entry"><a class="el" href="structPosValue.html">PosValue</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>posy</b> (defined in <a class="el" href="structPosValue.html">PosValue</a>)</td><td class="entry"><a class="el" href="structPosValue.html">PosValue</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value</b> (defined in <a class="el" href="structPosValue.html">PosValue</a>)</td><td class="entry"><a class="el" href="structPosValue.html">PosValue</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structPosValue.html b/doc/html/structPosValue.html
new file mode 100644
index 0000000..5109d53
--- /dev/null
+++ b/doc/html/structPosValue.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: PosValue Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structPosValue-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">PosValue Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a483969d2ebf1df859c6c2ce5c2493f6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a483969d2ebf1df859c6c2ce5c2493f6a"></a>
+double </td><td class="memItemRight" valign="bottom"><b>posx</b></td></tr>
+<tr class="separator:a483969d2ebf1df859c6c2ce5c2493f6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e3ea9e8282351c719351fa6e8d1cd35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e3ea9e8282351c719351fa6e8d1cd35"></a>
+double </td><td class="memItemRight" valign="bottom"><b>posy</b></td></tr>
+<tr class="separator:a4e3ea9e8282351c719351fa6e8d1cd35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94da613bfa56c859fa349069d2c00223"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94da613bfa56c859fa349069d2c00223"></a>
+double </td><td class="memItemRight" valign="bottom"><b>value</b></td></tr>
+<tr class="separator:a94da613bfa56c859fa349069d2c00223"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="PosValue_8h_source.html#l00023">23</a> of file <a class="el" href="PosValue_8h_source.html">PosValue.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/base/<a class="el" href="PosValue_8h_source.html">PosValue.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structSolver_1_1SolutionInfo-members.html b/doc/html/structSolver_1_1SolutionInfo-members.html
new file mode 100644
index 0000000..43e3cc3
--- /dev/null
+++ b/doc/html/structSolver_1_1SolutionInfo-members.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="classSolver.html">Solver</a></li><li class="navelem"><a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Solver::SolutionInfo Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>obj</b> (defined in <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>)</td><td class="entry"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>r</b> (defined in <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>)</td><td class="entry"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rho</b> (defined in <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>)</td><td class="entry"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>upper_bound_n</b> (defined in <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>)</td><td class="entry"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>upper_bound_p</b> (defined in <a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>)</td><td class="entry"><a class="el" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structSolver_1_1SolutionInfo.html b/doc/html/structSolver_1_1SolutionInfo.html
new file mode 100644
index 0000000..de4cd67
--- /dev/null
+++ b/doc/html/structSolver_1_1SolutionInfo.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Solver::SolutionInfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="classSolver.html">Solver</a></li><li class="navelem"><a class="el" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structSolver_1_1SolutionInfo-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Solver::SolutionInfo Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:adf1d775e9152a7b1742057cd638ed2ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf1d775e9152a7b1742057cd638ed2ae"></a>
+double </td><td class="memItemRight" valign="bottom"><b>obj</b></td></tr>
+<tr class="separator:adf1d775e9152a7b1742057cd638ed2ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8091f45a336af39e232f3845e25f2266"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8091f45a336af39e232f3845e25f2266"></a>
+double </td><td class="memItemRight" valign="bottom"><b>rho</b></td></tr>
+<tr class="separator:a8091f45a336af39e232f3845e25f2266"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94c4cb7f402752326cc975ec57a8688f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94c4cb7f402752326cc975ec57a8688f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>upper_bound_p</b></td></tr>
+<tr class="separator:a94c4cb7f402752326cc975ec57a8688f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a07ab9dc3265855f483922988bdaaf986"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ab9dc3265855f483922988bdaaf986"></a>
+double </td><td class="memItemRight" valign="bottom"><b>upper_bound_n</b></td></tr>
+<tr class="separator:a07ab9dc3265855f483922988bdaaf986"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3db948f9e914e1f9976523cfdc7c1bbe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3db948f9e914e1f9976523cfdc7c1bbe"></a>
+double </td><td class="memItemRight" valign="bottom"><b>r</b></td></tr>
+<tr class="separator:a3db948f9e914e1f9976523cfdc7c1bbe"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l00400">400</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structdecision__function-members.html b/doc/html/structdecision__function-members.html
new file mode 100644
index 0000000..770f269
--- /dev/null
+++ b/doc/html/structdecision__function-members.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">decision_function Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structdecision__function.html">decision_function</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>alpha</b> (defined in <a class="el" href="structdecision__function.html">decision_function</a>)</td><td class="entry"><a class="el" href="structdecision__function.html">decision_function</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>rho</b> (defined in <a class="el" href="structdecision__function.html">decision_function</a>)</td><td class="entry"><a class="el" href="structdecision__function.html">decision_function</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structdecision__function.html b/doc/html/structdecision__function.html
new file mode 100644
index 0000000..120fe5d
--- /dev/null
+++ b/doc/html/structdecision__function.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: decision_function Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structdecision__function-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">decision_function Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:ab79ad1c39d091d4f8ad798abe4223772"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab79ad1c39d091d4f8ad798abe4223772"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>alpha</b></td></tr>
+<tr class="separator:ab79ad1c39d091d4f8ad798abe4223772"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2aeeaa508803351b22d4454b81cb375"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2aeeaa508803351b22d4454b81cb375"></a>
+double </td><td class="memItemRight" valign="bottom"><b>rho</b></td></tr>
+<tr class="separator:ae2aeeaa508803351b22d4454b81cb375"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8cpp_source.html#l01652">1652</a> of file <a class="el" href="svm_8cpp_source.html">svm.cpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8cpp_source.html">svm.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__model-members.html b/doc/html/structsvm__model-members.html
new file mode 100644
index 0000000..c78df08
--- /dev/null
+++ b/doc/html/structsvm__model-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm_model Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structsvm__model.html">svm_model</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>free_sv</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>l</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>label</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nr_class</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nSV</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>param</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>probA</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>probB</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rho</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SV</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sv_coef</b> (defined in <a class="el" href="structsvm__model.html">svm_model</a>)</td><td class="entry"><a class="el" href="structsvm__model.html">svm_model</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__model.html b/doc/html/structsvm__model.html
new file mode 100644
index 0000000..86e2bb7
--- /dev/null
+++ b/doc/html/structsvm__model.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: svm_model Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structsvm__model-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">svm_model Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for svm_model:</div>
+<div class="dyncontent">
+<div class="center"><img src="structsvm__model__coll__graph.png" border="0" usemap="#svm__model_coll__map" alt="Collaboration graph"/></div>
+<map name="svm__model_coll__map" id="svm__model_coll__map">
+<area shape="rect" id="node2" href="structsvm__node.html" title="svm_node" alt="" coords="5,5,87,32"/><area shape="rect" id="node3" href="structsvm__parameter.html" title="svm_parameter" alt="" coords="112,5,223,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a95f43f398a173e63d0ce26911d0a9273"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95f43f398a173e63d0ce26911d0a9273"></a>
+struct <a class="el" href="structsvm__parameter.html">svm_parameter</a> </td><td class="memItemRight" valign="bottom"><b>param</b></td></tr>
+<tr class="separator:a95f43f398a173e63d0ce26911d0a9273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5af6e0cfb063e8aac03c99aa9d319116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5af6e0cfb063e8aac03c99aa9d319116"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nr_class</b></td></tr>
+<tr class="separator:a5af6e0cfb063e8aac03c99aa9d319116"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab858d7eed0bd3cc4c33c094872643d0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab858d7eed0bd3cc4c33c094872643d0a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>l</b></td></tr>
+<tr class="separator:ab858d7eed0bd3cc4c33c094872643d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96da6fe173a7150dae95bf55d5539e45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96da6fe173a7150dae95bf55d5539e45"></a>
+struct <a class="el" href="structsvm__node.html">svm_node</a> ** </td><td class="memItemRight" valign="bottom"><b>SV</b></td></tr>
+<tr class="separator:a96da6fe173a7150dae95bf55d5539e45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a978084d722ac886100ffcc35fc931143"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a978084d722ac886100ffcc35fc931143"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>sv_coef</b></td></tr>
+<tr class="separator:a978084d722ac886100ffcc35fc931143"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16e4dea1508f93ece4384ec35c991887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16e4dea1508f93ece4384ec35c991887"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>rho</b></td></tr>
+<tr class="separator:a16e4dea1508f93ece4384ec35c991887"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf5f28fcdd3ca1c5b23c1f6167710a04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf5f28fcdd3ca1c5b23c1f6167710a04"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>probA</b></td></tr>
+<tr class="separator:adf5f28fcdd3ca1c5b23c1f6167710a04"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73ba8feaaf3c2c38c6bb81f7bcb5809e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73ba8feaaf3c2c38c6bb81f7bcb5809e"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>probB</b></td></tr>
+<tr class="separator:a73ba8feaaf3c2c38c6bb81f7bcb5809e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac66d192809e92b95875bdf8ebb749060"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac66d192809e92b95875bdf8ebb749060"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>label</b></td></tr>
+<tr class="separator:ac66d192809e92b95875bdf8ebb749060"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d342c9b9e5e4a6377862e13123a25ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d342c9b9e5e4a6377862e13123a25ef"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>nSV</b></td></tr>
+<tr class="separator:a1d342c9b9e5e4a6377862e13123a25ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ae57ce1fa43497d151aff26c21a13a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ae57ce1fa43497d151aff26c21a13a1"></a>
+int </td><td class="memItemRight" valign="bottom"><b>free_sv</b></td></tr>
+<tr class="separator:a2ae57ce1fa43497d151aff26c21a13a1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8h_source.html#l00053">53</a> of file <a class="el" href="svm_8h_source.html">svm.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8h_source.html">svm.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__model__coll__graph.map b/doc/html/structsvm__model__coll__graph.map
new file mode 100644
index 0000000..e8f6707
--- /dev/null
+++ b/doc/html/structsvm__model__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="svm_model" name="svm_model">
+<area shape="rect" id="node2" href="$structsvm__node.html" title="svm_node" alt="" coords="5,5,87,32"/>
+<area shape="rect" id="node3" href="$structsvm__parameter.html" title="svm_parameter" alt="" coords="112,5,223,32"/>
+</map>
diff --git a/doc/html/structsvm__model__coll__graph.md5 b/doc/html/structsvm__model__coll__graph.md5
new file mode 100644
index 0000000..5f7acfe
--- /dev/null
+++ b/doc/html/structsvm__model__coll__graph.md5
@@ -0,0 +1 @@
+f1b564de644568331df725046d60b3b4
\ No newline at end of file
diff --git a/doc/html/structsvm__model__coll__graph.png b/doc/html/structsvm__model__coll__graph.png
new file mode 100644
index 0000000..e32b49d
Binary files /dev/null and b/doc/html/structsvm__model__coll__graph.png differ
diff --git a/doc/html/structsvm__node-members.html b/doc/html/structsvm__node-members.html
new file mode 100644
index 0000000..019d667
--- /dev/null
+++ b/doc/html/structsvm__node-members.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm_node Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structsvm__node.html">svm_node</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>index</b> (defined in <a class="el" href="structsvm__node.html">svm_node</a>)</td><td class="entry"><a class="el" href="structsvm__node.html">svm_node</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b> (defined in <a class="el" href="structsvm__node.html">svm_node</a>)</td><td class="entry"><a class="el" href="structsvm__node.html">svm_node</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__node.html b/doc/html/structsvm__node.html
new file mode 100644
index 0000000..3f4d301
--- /dev/null
+++ b/doc/html/structsvm__node.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: svm_node Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structsvm__node-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">svm_node Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aa733ca75ee5a5c0f36af5ddb4c6394d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa733ca75ee5a5c0f36af5ddb4c6394d9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>index</b></td></tr>
+<tr class="separator:aa733ca75ee5a5c0f36af5ddb4c6394d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ca47b8a156238d04213453f3b89e177"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ca47b8a156238d04213453f3b89e177"></a>
+double </td><td class="memItemRight" valign="bottom"><b>value</b></td></tr>
+<tr class="separator:a9ca47b8a156238d04213453f3b89e177"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8h_source.html#l00012">12</a> of file <a class="el" href="svm_8h_source.html">svm.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8h_source.html">svm.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__parameter-members.html b/doc/html/structsvm__parameter-members.html
new file mode 100644
index 0000000..ad82d19
--- /dev/null
+++ b/doc/html/structsvm__parameter-members.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm_parameter Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structsvm__parameter.html">svm_parameter</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>C</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>cache_size</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>coef0</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>degree</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>eps</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>gamma</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nr_weight</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nu</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>p</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>probability</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>shrinking</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>svm_type</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>verbose</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>weight</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>weight_label</b> (defined in <a class="el" href="structsvm__parameter.html">svm_parameter</a>)</td><td class="entry"><a class="el" href="structsvm__parameter.html">svm_parameter</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__parameter.html b/doc/html/structsvm__parameter.html
new file mode 100644
index 0000000..aeda96f
--- /dev/null
+++ b/doc/html/structsvm__parameter.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: svm_parameter Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structsvm__parameter-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">svm_parameter Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a3afb37272180a903df05f7b649b338f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3afb37272180a903df05f7b649b338f4"></a>
+int </td><td class="memItemRight" valign="bottom"><b>svm_type</b></td></tr>
+<tr class="separator:a3afb37272180a903df05f7b649b338f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4188713ba31fc3d101244a6bcc09a760"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4188713ba31fc3d101244a6bcc09a760"></a>
+int </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:a4188713ba31fc3d101244a6bcc09a760"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afef1c4508ec0045c236a3308b0fa5138"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef1c4508ec0045c236a3308b0fa5138"></a>
+int </td><td class="memItemRight" valign="bottom"><b>degree</b></td></tr>
+<tr class="separator:afef1c4508ec0045c236a3308b0fa5138"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91667b90506e171482b5fc619377110d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91667b90506e171482b5fc619377110d"></a>
+double </td><td class="memItemRight" valign="bottom"><b>gamma</b></td></tr>
+<tr class="separator:a91667b90506e171482b5fc619377110d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ab3555a96a578bea6e5285a5db0a4db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ab3555a96a578bea6e5285a5db0a4db"></a>
+double </td><td class="memItemRight" valign="bottom"><b>coef0</b></td></tr>
+<tr class="separator:a3ab3555a96a578bea6e5285a5db0a4db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00286b7e0767e45d68ac7abceb60c821"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00286b7e0767e45d68ac7abceb60c821"></a>
+double </td><td class="memItemRight" valign="bottom"><b>cache_size</b></td></tr>
+<tr class="separator:a00286b7e0767e45d68ac7abceb60c821"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1feab5a4e0d5842a20e544f3f944f841"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1feab5a4e0d5842a20e544f3f944f841"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr>
+<tr class="separator:a1feab5a4e0d5842a20e544f3f944f841"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4f905a3f7d589d86964289af3c9d812"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4f905a3f7d589d86964289af3c9d812"></a>
+double </td><td class="memItemRight" valign="bottom"><b>C</b></td></tr>
+<tr class="separator:af4f905a3f7d589d86964289af3c9d812"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44014738d1db5444f7f9a1ebf74e4214"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44014738d1db5444f7f9a1ebf74e4214"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nr_weight</b></td></tr>
+<tr class="separator:a44014738d1db5444f7f9a1ebf74e4214"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06753922bb0282240f35ae7683f8d69a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06753922bb0282240f35ae7683f8d69a"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>weight_label</b></td></tr>
+<tr class="separator:a06753922bb0282240f35ae7683f8d69a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afff750f99180b5ddf735404496b6c196"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afff750f99180b5ddf735404496b6c196"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>weight</b></td></tr>
+<tr class="separator:afff750f99180b5ddf735404496b6c196"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c20c566cb61d5808e8cabd7adbc35c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c20c566cb61d5808e8cabd7adbc35c1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nu</b></td></tr>
+<tr class="separator:a4c20c566cb61d5808e8cabd7adbc35c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b60d7ce96137a64caca81095d1a188b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b60d7ce96137a64caca81095d1a188b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+<tr class="separator:a3b60d7ce96137a64caca81095d1a188b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdbccdf6a24be650d75804b783edc347"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdbccdf6a24be650d75804b783edc347"></a>
+int </td><td class="memItemRight" valign="bottom"><b>shrinking</b></td></tr>
+<tr class="separator:afdbccdf6a24be650d75804b783edc347"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afac0ef02879d7e27e17ac2a75115a7d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afac0ef02879d7e27e17ac2a75115a7d9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>probability</b></td></tr>
+<tr class="separator:afac0ef02879d7e27e17ac2a75115a7d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff9936119026e499e915228285264560"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff9936119026e499e915228285264560"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>verbose</b></td></tr>
+<tr class="separator:aff9936119026e499e915228285264560"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8h_source.html#l00028">28</a> of file <a class="el" href="svm_8h_source.html">svm.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8h_source.html">svm.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__problem-members.html b/doc/html/structsvm__problem-members.html
new file mode 100644
index 0000000..d7d908f
--- /dev/null
+++ b/doc/html/structsvm__problem-members.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm_problem Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structsvm__problem.html">svm_problem</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>l</b> (defined in <a class="el" href="structsvm__problem.html">svm_problem</a>)</td><td class="entry"><a class="el" href="structsvm__problem.html">svm_problem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>x</b> (defined in <a class="el" href="structsvm__problem.html">svm_problem</a>)</td><td class="entry"><a class="el" href="structsvm__problem.html">svm_problem</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>y</b> (defined in <a class="el" href="structsvm__problem.html">svm_problem</a>)</td><td class="entry"><a class="el" href="structsvm__problem.html">svm_problem</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__problem.html b/doc/html/structsvm__problem.html
new file mode 100644
index 0000000..0aa4603
--- /dev/null
+++ b/doc/html/structsvm__problem.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: svm_problem Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class List</span></a></li>
+ <li><a href="classes.html"><span>Class Index</span></a></li>
+ <li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="structsvm__problem-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">svm_problem Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for svm_problem:</div>
+<div class="dyncontent">
+<div class="center"><img src="structsvm__problem__coll__graph.png" border="0" usemap="#svm__problem_coll__map" alt="Collaboration graph"/></div>
+<map name="svm__problem_coll__map" id="svm__problem_coll__map">
+<area shape="rect" id="node2" href="structsvm__node.html" title="svm_node" alt="" coords="13,5,95,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a4350eb6820f0d6126bffb6264cec65b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4350eb6820f0d6126bffb6264cec65b3"></a>
+int </td><td class="memItemRight" valign="bottom"><b>l</b></td></tr>
+<tr class="separator:a4350eb6820f0d6126bffb6264cec65b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59dec12ff090571bc9592ba9fb306780"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59dec12ff090571bc9592ba9fb306780"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>y</b></td></tr>
+<tr class="separator:a59dec12ff090571bc9592ba9fb306780"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acddda9b49a8e38bbda079f35c2e18984"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acddda9b49a8e38bbda079f35c2e18984"></a>
+struct <a class="el" href="structsvm__node.html">svm_node</a> ** </td><td class="memItemRight" valign="bottom"><b>x</b></td></tr>
+<tr class="separator:acddda9b49a8e38bbda079f35c2e18984"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="svm_8h_source.html#l00018">18</a> of file <a class="el" href="svm_8h_source.html">svm.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/home/kempenep/pktools/src/algorithms/<a class="el" href="svm_8h_source.html">svm.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:37 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/structsvm__problem__coll__graph.map b/doc/html/structsvm__problem__coll__graph.map
new file mode 100644
index 0000000..dc328c9
--- /dev/null
+++ b/doc/html/structsvm__problem__coll__graph.map
@@ -0,0 +1,3 @@
+<map id="svm_problem" name="svm_problem">
+<area shape="rect" id="node2" href="$structsvm__node.html" title="svm_node" alt="" coords="13,5,95,32"/>
+</map>
diff --git a/doc/html/structsvm__problem__coll__graph.md5 b/doc/html/structsvm__problem__coll__graph.md5
new file mode 100644
index 0000000..f7e6fde
--- /dev/null
+++ b/doc/html/structsvm__problem__coll__graph.md5
@@ -0,0 +1 @@
+60b7301611be9431fad7f64c0d76eab8
\ No newline at end of file
diff --git a/doc/html/structsvm__problem__coll__graph.png b/doc/html/structsvm__problem__coll__graph.png
new file mode 100644
index 0000000..f40c78f
Binary files /dev/null and b/doc/html/structsvm__problem__coll__graph.png differ
diff --git a/doc/html/svm_8cpp_source.html b/doc/html/svm_8cpp_source.html
new file mode 100644
index 0000000..57865f7
--- /dev/null
+++ b/doc/html/svm_8cpp_source.html
@@ -0,0 +1,3212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/svm.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <ctype.h></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <stdarg.h></span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <locale.h></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">//test</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// #include <iostream></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "svm.h"</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keywordtype">int</span> libsvm_version = LIBSVM_VERSION;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">typedef</span> <span class="keywordtype">float</span> Qfloat;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">char</span> schar;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#ifndef min</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T min(T x,T y) { <span class="keywordflow">return</span> (x<y)?x:y; }</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef max</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T max(T x,T y) { <span class="keywordflow">return</span> (x>y)?x:y; }</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(T& x, T& y) { T t=x; x=y; y=t; }</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">template</span> <<span class="keyword">class</span> S, <span class="keyword">class</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> clone(T*& dst, S* src, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> dst = <span class="keyword">new</span> T[n];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> memcpy((<span class="keywordtype">void</span> *)dst,(<span class="keywordtype">void</span> *)src,<span class="keyword">sizeof</span>(T)*n);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> powi(<span class="keywordtype">double</span> base, <span class="keywordtype">int</span> times)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">double</span> tmp = base, ret = 1.0;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=times; t>0; t/=2)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span>(t%2==1) ret*=tmp;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> tmp = tmp * tmp;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define INF HUGE_VAL</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="preprocessor">#define TAU 1e-12</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span><span class="preprocessor">#define Malloc(type,n) (type *)malloc((n)*sizeof(type))</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">static</span> <span class="keywordtype">void</span> print_string_stdout(<span class="keyword">const</span> <span class="keywordtype">char</span> *s)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> fputs(s,stdout);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> fflush(stdout);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> void (*svm_print_string) (<span class="keyword">const</span> <span class="keywordtype">char</span> *) = &print_string_stdout;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#if 1</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> info(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt,...)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">char</span> buf[BUFSIZ];</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> va_list ap;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> va_start(ap,fmt);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> vsprintf(buf,fmt,ap);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> va_end(ap);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> (*svm_print_string)(buf);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> info(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt,...) {}</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// Kernel Cache</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// l is the number of total data items</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// size is the cache size limit in bytes</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classCache.html"> 69</a></span> <span class="keyword">class </span><a class="code" href="classCache.html">Cache</a></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="classCache.html">Cache</a>(<span class="keywordtype">int</span> l,<span class="keywordtype">long</span> <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> ~<a class="code" href="classCache.html">Cache</a>();</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// request data [0,len)</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// return some position p where [p,len) need to be filled</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// (p >= len if nothing needs to be filled)</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">int</span> get_data(<span class="keyword">const</span> <span class="keywordtype">int</span> index, Qfloat **data, <span class="keywordtype">int</span> len);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j); </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> size;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">struct </span>head_t</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> head_t *prev, *next; <span class="comment">// a circular list</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> Qfloat *data;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">int</span> len; <span class="comment">// data[0,len) is cached in this entry</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> };</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> head_t *head;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> head_t lru_head;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">void</span> lru_delete(head_t *h);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">void</span> lru_insert(head_t *h);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> };</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> Cache::Cache(<span class="keywordtype">int</span> l_,<span class="keywordtype">long</span> <span class="keywordtype">int</span> size_):l(l_),size(size_)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> head = (head_t *)calloc(l,<span class="keyword">sizeof</span>(head_t)); <span class="comment">// initialized to 0</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> size /= <span class="keyword">sizeof</span>(Qfloat);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> size -= l * <span class="keyword">sizeof</span>(head_t) / <span class="keyword">sizeof</span>(Qfloat);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> size = max(size, 2 * (<span class="keywordtype">long</span> <span class="keywordtype">int</span>) l); <span class="comment">// cache must be large enough for two columns</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> lru_head.next = lru_head.prev = &lru_head;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> Cache::~Cache()</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span>(head_t *h = lru_head.next; h != &lru_head; h=h->next)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> free(h->data);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> free(head);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> Cache::lru_delete(head_t *h)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// delete from current location</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> h->prev->next = h->next;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> h->next->prev = h->prev;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> Cache::lru_insert(head_t *h)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// insert to last position</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> h->next = &lru_head;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> h->prev = lru_head.prev;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> h->prev->next = h;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> h->next->prev = h;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> Cache::get_data(<span class="keyword">const</span> <span class="keywordtype">int</span> index, Qfloat **data, <span class="keywordtype">int</span> len)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> head_t *h = &head[index];</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span>(h->len) lru_delete(h);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">int</span> more = len - h->len;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(more > 0)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// free old space</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">while</span>(size < more)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> head_t *old = lru_head.next;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> lru_delete(old);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> free(old->data);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> size += old->len;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> old->data = 0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> old->len = 0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// allocate new space</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> h->data = (Qfloat *)realloc(h->data,<span class="keyword">sizeof</span>(Qfloat)*len);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> size -= more;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> swap(h->len,len);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> lru_insert(h);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> *data = h->data;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> len;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">void</span> Cache::swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>(i==j) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(head[i].len) lru_delete(&head[i]);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span>(head[j].len) lru_delete(&head[j]);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> swap(head[i].data,head[j].data);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> swap(head[i].len,head[j].len);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span>(head[i].len) lru_insert(&head[i]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(head[j].len) lru_insert(&head[j]);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(i>j) swap(i,j);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span>(head_t *h = lru_head.next; h!=&lru_head; h=h->next)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(h->len > i)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span>(h->len > j)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> swap(h->data[i],h->data[j]);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// give up</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> lru_delete(h);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> free(h->data);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> size += h->len;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> h->data = 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> h->len = 0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// Kernel evaluation</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// the static method k_function is for doing single kernel evaluation</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">// the constructor of Kernel prepares to calculate the l*l kernel matrix</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// the member function get_Q is for getting one column from the Q Matrix</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classQMatrix.html"> 196</a></span> <span class="keyword">class </span><a class="code" href="classQMatrix.html">QMatrix</a> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> Qfloat *get_Q(<span class="keywordtype">int</span> column, <span class="keywordtype">int</span> len) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> *get_QD() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> ~<a class="code" href="classQMatrix.html">QMatrix</a>() {}</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> };</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classKernel.html"> 204</a></span> <span class="keyword">class </span><a class="code" href="classKernel.html">Kernel</a>: <span class="keyword">public</span> <a class="code" href="classQMatrix.html">QMatrix</a> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <a class="code" href="classKernel.html">Kernel</a>(<span class="keywordtype">int</span> l, <a class="code" href="structsvm__node.html">svm_node</a> * <span class="keyword">const</span> * x, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">virtual</span> ~<a class="code" href="classKernel.html">Kernel</a>();</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">static</span> <span class="keywordtype">double</span> k_function(<span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *y,</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> Qfloat *get_Q(<span class="keywordtype">int</span> column, <span class="keywordtype">int</span> len) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> *get_QD() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j) <span class="keyword">const</span> <span class="comment">// no so const...</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> swap(x[i],x[j]);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(x_square) swap(x_square[i],x_square[j]);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> double (<a class="code" href="classKernel.html">Kernel</a>::*kernel_function)(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> **x;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">double</span> *x_square;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// svm_parameter</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kernel_type;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">const</span> <span class="keywordtype">int</span> degree;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">const</span> <span class="keywordtype">double</span> gamma;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">const</span> <span class="keywordtype">double</span> coef0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">static</span> <span class="keywordtype">double</span> dot(<span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *px, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *py);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">double</span> kernel_linear(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">return</span> dot(x[i],x[j]);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">double</span> kernel_poly(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> powi(gamma*dot(x[i],x[j])+coef0,degree);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordtype">double</span> kernel_rbf(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">return</span> exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">double</span> kernel_sigmoid(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">return</span> tanh(gamma*dot(x[i],x[j])+coef0);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">double</span> kernel_precomputed(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> x[i][(int)(x[j][0].value)].value;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> };</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> Kernel::Kernel(<span class="keywordtype">int</span> l, <a class="code" href="structsvm__node.html">svm_node</a> * <span class="keyword">const</span> * x_, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param)</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> :kernel_type(param.kernel_type), degree(param.degree),</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> gamma(param.gamma), coef0(param.coef0)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> {</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">switch</span>(kernel_type)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">case</span> LINEAR:</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> kernel_function = &Kernel::kernel_linear;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">case</span> POLY:</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> kernel_function = &Kernel::kernel_poly;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">case</span> RBF:</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> kernel_function = &Kernel::kernel_rbf;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">case</span> SIGMOID:</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> kernel_function = &Kernel::kernel_sigmoid;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">case</span> PRECOMPUTED:</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> kernel_function = &Kernel::kernel_precomputed;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> clone(x,x_,l);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(kernel_type == RBF)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> x_square = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<l;i++)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> x_square[i] = dot(x[i],x[i]);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> x_square = 0;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> Kernel::~Kernel()</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">delete</span>[] x;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">delete</span>[] x_square;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">double</span> Kernel::dot(<span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *px, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *py)</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">double</span> sum = 0;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">while</span>(px->index != -1 && py->index != -1)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span>(px->index == py->index)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> sum += px->value * py->value;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> ++px;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> ++py;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> {</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(px->index > py->index)</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> ++py;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> ++px;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> } </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">double</span> Kernel::k_function(<span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *y,</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param)</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">switch</span>(param.kernel_type)</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> {</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">case</span> LINEAR:</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">return</span> dot(x,y);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">case</span> POLY:</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">return</span> powi(param.gamma*dot(x,y)+param.coef0,param.degree);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">case</span> RBF:</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordtype">double</span> sum = 0;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">while</span>(x->index != -1 && y->index !=-1)</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span>(x->index == y->index)</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordtype">double</span> d = x->value - y->value;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> sum += d*d;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> ++x;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> ++y;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span>(x->index > y->index)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> { </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> sum += y->value * y->value;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> ++y;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> sum += x->value * x->value;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> ++x;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">while</span>(x->index != -1)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> {</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> sum += x->value * x->value;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> ++x;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">while</span>(y->index != -1)</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> {</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> sum += y->value * y->value;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> ++y;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">return</span> exp(-param.gamma*sum);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">case</span> SIGMOID:</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">return</span> tanh(param.gamma*dot(x,y)+param.coef0);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">case</span> PRECOMPUTED: <span class="comment">//x: test (validation), y: SV</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span> x[(int)(y->value)].value;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">return</span> 0; <span class="comment">// Unreachable </span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="comment">// Solves:</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment">// min 0.5(\alpha^T Q \alpha) + p^T \alpha</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">// y^T \alpha = \delta</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">// y_i = +1 or -1</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment">// 0 <= alpha_i <= Cp for y_i = 1</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">// 0 <= alpha_i <= Cn for y_i = -1</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment">// Given:</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">// Q, p, y, Cp, Cn, and an initial feasible point \alpha</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment">// l is the size of vectors and matrices</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// eps is the stopping tolerance</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">// solution will be put in \alpha, objective value will be put in obj</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSolver.html"> 395</a></span> <span class="keyword">class </span><a class="code" href="classSolver.html">Solver</a> {</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <a class="code" href="classSolver.html">Solver</a>() {};</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keyword">virtual</span> ~<a class="code" href="classSolver.html">Solver</a>() {};</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="structSolver_1_1SolutionInfo.html"> 400</a></span> <span class="keyword">struct </span><a class="code" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordtype">double</span> obj;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">double</span> rho;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">double</span> upper_bound_p;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">double</span> upper_bound_n;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">double</span> r; <span class="comment">// for Solver_NU</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> };</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">void</span> Solve(<span class="keywordtype">int</span> l, <span class="keyword">const</span> <a class="code" href="classQMatrix.html">QMatrix</a>& Q, <span class="keyword">const</span> <span class="keywordtype">double</span> *p_, <span class="keyword">const</span> schar *y_,</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">double</span> *alpha_, <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn, <span class="keywordtype">double</span> eps,</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <a class="code" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a>* si, <span class="keywordtype">int</span> shrinking, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">int</span> active_size;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> schar *y;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">double</span> *G; <span class="comment">// gradient of objective function</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword">enum</span> { LOWER_BOUND, UPPER_BOUND, FREE };</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">char</span> *alpha_status; <span class="comment">// LOWER_BOUND, UPPER_BOUND, FREE</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">double</span> *alpha;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keyword">const</span> <a class="code" href="classQMatrix.html">QMatrix</a> *Q;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *QD;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">double</span> eps;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">double</span> Cp,Cn;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordtype">double</span> *p;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">int</span> *active_set;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordtype">double</span> *G_bar; <span class="comment">// gradient, if we treat free variables as 0</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordtype">bool</span> unshrink; <span class="comment">// XXX</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">double</span> get_C(<span class="keywordtype">int</span> i)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">return</span> (y[i] > 0)? Cp : Cn;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">void</span> update_alpha_status(<span class="keywordtype">int</span> i)</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> {</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span>(alpha[i] >= get_C(i))</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> alpha_status[i] = UPPER_BOUND;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(alpha[i] <= 0)</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> alpha_status[i] = LOWER_BOUND;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">else</span> alpha_status[i] = FREE;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">bool</span> is_upper_bound(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> alpha_status[i] == UPPER_BOUND; }</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordtype">bool</span> is_lower_bound(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> alpha_status[i] == LOWER_BOUND; }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">bool</span> is_free(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> alpha_status[i] == FREE; }</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordtype">void</span> reconstruct_gradient();</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> select_working_set(<span class="keywordtype">int</span> &i, <span class="keywordtype">int</span> &j);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> calculate_rho();</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> do_shrinking();</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordtype">bool</span> be_shrunk(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> Gmax1, <span class="keywordtype">double</span> Gmax2); </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> };</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordtype">void</span> Solver::swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> {</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> Q->swap_index(i,j);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> swap(y[i],y[j]);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> swap(G[i],G[j]);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> swap(alpha_status[i],alpha_status[j]);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> swap(alpha[i],alpha[j]);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> swap(p[i],p[j]);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> swap(active_set[i],active_set[j]);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> swap(G_bar[i],G_bar[j]);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">void</span> Solver::reconstruct_gradient()</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> {</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment">// reconstruct inactive elements of G from G_bar and free variables</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span>(active_size == l) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordtype">int</span> nr_free = 0;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span>(j=active_size;j<l;j++)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> G[j] = G_bar[j] + p[j];</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span>(j=0;j<active_size;j++)</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span>(is_free(j))</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> nr_free++;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(2*nr_free < active_size)</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> info(<span class="stringliteral">"\nWARNING: using -h 0 may be faster\n"</span>);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">if</span> (nr_free*l > 2*active_size*(l-active_size))</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> {</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">for</span>(i=active_size;i<l;i++)</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">const</span> Qfloat *Q_i = Q->get_Q(i,active_size);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">for</span>(j=0;j<active_size;j++)</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span>(is_free(j))</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> G[i] += alpha[j] * Q_i[j];</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> {</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">for</span>(i=0;i<active_size;i++)</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">if</span>(is_free(i))</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keyword">const</span> Qfloat *Q_i = Q->get_Q(i,l);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">double</span> alpha_i = alpha[i];</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">for</span>(j=active_size;j<l;j++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> G[j] += alpha_i * Q_i[j];</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">void</span> Solver::Solve(<span class="keywordtype">int</span> l, <span class="keyword">const</span> <a class="code" href="classQMatrix.html">QMatrix</a>& Q, <span class="keyword">const</span> <span class="keywordtype">double</span> *p_, <span class="keyword">const</span> schar *y_,</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordtype">double</span> *alpha_, <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn, <span class="keywordtype">double</span> eps,</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> SolutionInfo* si, <span class="keywordtype">int</span> shrinking,</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordtype">bool</span> verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> {</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> this->l = l;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> this->Q = &Q;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> QD=Q.get_QD();</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> clone(p, p_,l);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> clone(y, y_,l);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> clone(alpha,alpha_,l);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> this->Cp = Cp;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> this->Cn = Cn;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> this->eps = eps;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> unshrink = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment">// initialize alpha_status</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> {</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> alpha_status = <span class="keyword">new</span> <span class="keywordtype">char</span>[l];</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<l;i++)</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> update_alpha_status(i);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">// initialize active set (for shrinking)</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> {</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> active_set = <span class="keyword">new</span> <span class="keywordtype">int</span>[l];</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<l;i++)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> active_set[i] = i;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> active_size = l;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">// initialize gradient</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> {</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> G = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> G_bar = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> {</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> G[i] = p[i];</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> G_bar[i] = 0;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span>(!is_lower_bound(i))</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keyword">const</span> Qfloat *Q_i = Q.get_Q(i,l);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordtype">double</span> alpha_i = alpha[i];</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">for</span>(j=0;j<l;j++)</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> G[j] += alpha_i*Q_i[j];</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">for</span>(j=0;j<l;j++)</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> G_bar[j] += get_C(i) * Q_i[j];</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// optimization step</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordtype">int</span> iter = 0;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordtype">int</span> max_iter = max(10000000, l>INT_MAX/100 ? INT_MAX : 100*l);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordtype">int</span> counter = min(l,1000)+1;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">while</span>(iter < max_iter)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> {</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">// show progress and do shrinking</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">if</span>(--counter == 0)</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> {</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> counter = min(l,1000);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">if</span>(shrinking) do_shrinking();</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">if</span>(verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> info(<span class="stringliteral">"."</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">if</span>(select_working_set(i,j)!=0)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// reconstruct the whole gradient</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> reconstruct_gradient();</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// reset active set size and check</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> active_size = l;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span>(verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> info(<span class="stringliteral">"*"</span>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">if</span>(select_working_set(i,j)!=0)</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> counter = 1; <span class="comment">// do shrinking next iteration</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> ++iter;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">// update alpha[i] and alpha[j], handle bounds carefully</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keyword">const</span> Qfloat *Q_i = Q.get_Q(i,active_size);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">const</span> Qfloat *Q_j = Q.get_Q(j,active_size);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">double</span> C_i = get_C(i);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">double</span> C_j = get_C(j);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordtype">double</span> old_alpha_i = alpha[i];</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordtype">double</span> old_alpha_j = alpha[j];</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(y[i]!=y[j])</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordtype">double</span> quad_coef = QD[i]+QD[j]+2*Q_i[j];</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">if</span> (quad_coef <= 0)</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> quad_coef = TAU;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">double</span> delta = (-G[i]-G[j])/quad_coef;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordtype">double</span> diff = alpha[i] - alpha[j];</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> alpha[i] += delta;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> alpha[j] += delta;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span>(diff > 0)</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> {</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">if</span>(alpha[j] < 0)</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> alpha[j] = 0;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> alpha[i] = diff;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> }</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> {</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span>(alpha[i] < 0)</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> {</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> alpha[i] = 0;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> alpha[j] = -diff;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> }</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> }</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">if</span>(diff > C_i - C_j)</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> {</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">if</span>(alpha[i] > C_i)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> {</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> alpha[i] = C_i;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> alpha[j] = C_i - diff;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> {</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span>(alpha[j] > C_j)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> {</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> alpha[j] = C_j;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> alpha[i] = C_j + diff;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> }</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> }</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> }</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> {</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordtype">double</span> quad_coef = QD[i]+QD[j]-2*Q_i[j];</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">if</span> (quad_coef <= 0)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> quad_coef = TAU;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">double</span> delta = (G[i]-G[j])/quad_coef;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordtype">double</span> sum = alpha[i] + alpha[j];</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> alpha[i] -= delta;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> alpha[j] += delta;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span>(sum > C_i)</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> {</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">if</span>(alpha[i] > C_i)</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> {</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> alpha[i] = C_i;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> alpha[j] = sum - C_i;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> }</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> }</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> {</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">if</span>(alpha[j] < 0)</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> {</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> alpha[j] = 0;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> alpha[i] = sum;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> }</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">if</span>(sum > C_j)</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> {</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">if</span>(alpha[j] > C_j)</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> {</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> alpha[j] = C_j;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> alpha[i] = sum - C_j;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> {</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">if</span>(alpha[i] < 0)</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> {</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> alpha[i] = 0;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> alpha[j] = sum;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> }</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> }</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// update G</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="keywordtype">double</span> delta_alpha_i = alpha[i] - old_alpha_i;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordtype">double</span> delta_alpha_j = alpha[j] - old_alpha_j;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> k=0;k<active_size;k++)</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> {</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">// update alpha_status and G_bar</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> {</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordtype">bool</span> ui = is_upper_bound(i);</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordtype">bool</span> uj = is_upper_bound(j);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> update_alpha_status(i);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> update_alpha_status(j);</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">if</span>(ui != is_upper_bound(i))</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> {</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> Q_i = Q.get_Q(i,l);</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">if</span>(ui)</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">for</span>(k=0;k<l;k++)</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> G_bar[k] -= C_i * Q_i[k];</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordflow">for</span>(k=0;k<l;k++)</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> G_bar[k] += C_i * Q_i[k];</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> }</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">if</span>(uj != is_upper_bound(j))</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> {</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> Q_j = Q.get_Q(j,l);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">if</span>(uj)</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">for</span>(k=0;k<l;k++)</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> G_bar[k] -= C_j * Q_j[k];</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">for</span>(k=0;k<l;k++)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> G_bar[k] += C_j * Q_j[k];</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> }</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> }</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span>(iter >= max_iter)</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> {</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">if</span>(active_size < l)</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> {</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="comment">// reconstruct the whole gradient to calculate objective value</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> reconstruct_gradient();</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> active_size = l;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">if</span>(verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> info(<span class="stringliteral">"*"</span>);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> info(<span class="stringliteral">"\nWARNING: reaching max number of iterations"</span>);</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> }</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="comment">// calculate rho</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> si->rho = calculate_rho();</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="comment">// calculate objective value</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> {</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">double</span> v = 0;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> v += alpha[i] * (G[i] + p[i]);</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> si->obj = v/2;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="comment">// put back the solution</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> {</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<l;i++)</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> alpha_[active_set[i]] = alpha[i];</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// juggle everything back</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment">/*{</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment"> for(int i=0;i<l;i++)</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="comment"> while(active_set[i] != i)</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment"> swap_index(i,active_set[i]);</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="comment"> // or Q.swap_index(i,active_set[i]);</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> si->upper_bound_p = Cp;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> si->upper_bound_n = Cn;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span>(verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> info(<span class="stringliteral">"\noptimization finished, #iter = %d\n"</span>,iter);</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keyword">delete</span>[] p;</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keyword">delete</span>[] alpha;</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keyword">delete</span>[] alpha_status;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keyword">delete</span>[] active_set;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keyword">delete</span>[] G;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keyword">delete</span>[] G_bar;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="comment">// return 1 if already optimal, return 0 otherwise</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">int</span> Solver::select_working_set(<span class="keywordtype">int</span> &out_i, <span class="keywordtype">int</span> &out_j)</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> {</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="comment">// return i,j such that</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="comment">// i: maximizes -y_i * grad(f)_i, i in I_up(\alpha)</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="comment">// j: minimizes the decrease of obj value</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="comment">// (if quadratic coefficeint <= 0, replace it with tau)</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="comment">// -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha)</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordtype">double</span> Gmax = -INF;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordtype">double</span> Gmax2 = -INF;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keywordtype">int</span> Gmax_idx = -1;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordtype">int</span> Gmin_idx = -1;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">double</span> obj_diff_min = INF;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<active_size;t++)</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">if</span>(y[t]==+1) </div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> {</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(!is_upper_bound(t))</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">if</span>(-G[t] >= Gmax)</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> {</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> Gmax = -G[t];</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> Gmax_idx = t;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> }</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> {</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span>(!is_lower_bound(t))</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">if</span>(G[t] >= Gmax)</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> Gmax = G[t];</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> Gmax_idx = t;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordtype">int</span> i = Gmax_idx;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keyword">const</span> Qfloat *Q_i = NULL;</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">if</span>(i != -1) <span class="comment">// NULL Q_i not accessed: Gmax=-INF if i=-1</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> Q_i = Q->get_Q(i,active_size);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<active_size;j++)</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> {</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">if</span>(y[j]==+1)</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> {</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">if</span> (!is_lower_bound(j))</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> {</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordtype">double</span> grad_diff=Gmax+G[j];</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">if</span> (G[j] >= Gmax2)</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> Gmax2 = G[j];</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keywordflow">if</span> (grad_diff > 0)</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> {</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordtype">double</span> obj_diff; </div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keywordtype">double</span> quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j];</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span> (quad_coef > 0)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> obj_diff = -(grad_diff*grad_diff)/quad_coef;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> obj_diff = -(grad_diff*grad_diff)/TAU;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">if</span> (obj_diff <= obj_diff_min)</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> {</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> Gmin_idx=j;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> obj_diff_min = obj_diff;</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> }</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> }</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> {</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">if</span> (!is_upper_bound(j))</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> {</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordtype">double</span> grad_diff= Gmax-G[j];</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">if</span> (-G[j] >= Gmax2)</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> Gmax2 = -G[j];</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="keywordflow">if</span> (grad_diff > 0)</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> {</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordtype">double</span> obj_diff; </div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordtype">double</span> quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j];</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">if</span> (quad_coef > 0)</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> obj_diff = -(grad_diff*grad_diff)/quad_coef;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> obj_diff = -(grad_diff*grad_diff)/TAU;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">if</span> (obj_diff <= obj_diff_min)</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> {</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> Gmin_idx=j;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> obj_diff_min = obj_diff;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> }</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> }</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">if</span>(Gmax+Gmax2 < eps)</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> out_i = Gmax_idx;</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> out_j = Gmin_idx;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> }</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordtype">bool</span> Solver::be_shrunk(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> Gmax1, <span class="keywordtype">double</span> Gmax2)</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> {</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">return</span>(-G[i] > Gmax1);</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">return</span>(-G[i] > Gmax2);</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> }</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(is_lower_bound(i))</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> {</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">return</span>(G[i] > Gmax2);</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordflow">return</span>(G[i] > Gmax1);</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">return</span>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> }</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordtype">void</span> Solver::do_shrinking()</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> {</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="keywordtype">double</span> Gmax1 = -INF; <span class="comment">// max { -y_i * grad(f)_i | i in I_up(\alpha) }</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordtype">double</span> Gmax2 = -INF; <span class="comment">// max { y_i * grad(f)_i | i in I_low(\alpha) }</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment">// find maximal violating pair first</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">for</span>(i=0;i<active_size;i++)</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> {</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">if</span>(y[i]==+1) </div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> {</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">if</span>(!is_upper_bound(i)) </div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> {</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span>(-G[i] >= Gmax1)</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> Gmax1 = -G[i];</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> }</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">if</span>(!is_lower_bound(i)) </div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> {</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">if</span>(G[i] >= Gmax2)</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> Gmax2 = G[i];</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> }</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> }</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> {</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">if</span>(!is_upper_bound(i)) </div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> {</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">if</span>(-G[i] >= Gmax2)</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> Gmax2 = -G[i];</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> }</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">if</span>(!is_lower_bound(i)) </div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> {</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">if</span>(G[i] >= Gmax1)</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> Gmax1 = G[i];</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> }</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> }</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> }</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="keywordflow">if</span>(unshrink == <span class="keyword">false</span> && Gmax1 + Gmax2 <= eps*10) </div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> {</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> unshrink = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> reconstruct_gradient();</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> active_size = l;</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> info(<span class="stringliteral">"*"</span>);</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> }</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keywordflow">for</span>(i=0;i<active_size;i++)</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">if</span> (be_shrunk(i, Gmax1, Gmax2))</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> {</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> active_size--;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">while</span> (active_size > i)</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> {</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keywordflow">if</span> (!be_shrunk(active_size, Gmax1, Gmax2))</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> {</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> swap_index(i,active_size);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> }</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> active_size--;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> }</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> }</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> }</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordtype">double</span> Solver::calculate_rho()</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> {</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordtype">int</span> nr_free = 0;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordtype">double</span> ub = INF, lb = -INF, sum_free = 0;</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<active_size;i++)</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> {</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordtype">double</span> yG = y[i]*G[i];</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> {</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">if</span>(y[i]==-1)</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> ub = min(ub,yG);</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> lb = max(lb,yG);</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> }</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(is_lower_bound(i))</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> {</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> ub = min(ub,yG);</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> lb = max(lb,yG);</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> {</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> ++nr_free;</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> sum_free += yG;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">if</span>(nr_free>0)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> r = sum_free/nr_free;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> r = (ub+lb)/2;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment">// Solver for nu-svm classification and regression</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment">// additional constraint: e^T \alpha = constant</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"><a class="line" href="classSolver__NU.html"> 1016</a></span> <span class="keyword">class </span><a class="code" href="classSolver__NU.html">Solver_NU</a> : <span class="keyword">public</span> <a class="code" href="classSolver.html">Solver</a></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> {</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <a class="code" href="classSolver__NU.html">Solver_NU</a>() {}</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordtype">void</span> Solve(<span class="keywordtype">int</span> l, <span class="keyword">const</span> <a class="code" href="classQMatrix.html">QMatrix</a>& Q, <span class="keyword">const</span> <span class="keywordtype">double</span> *p, <span class="keyword">const</span> schar *y,</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordtype">double</span> *alpha, <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn, <span class="keywordtype">double</span> eps,</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <a class="code" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a>* si, <span class="keywordtype">int</span> shrinking, <span class="keywordtype">bool</span> verbose=<span class="keyword">false</span>)</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> this->si = si;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> Solver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking,verbose);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <a class="code" href="structSolver_1_1SolutionInfo.html">SolutionInfo</a> *si;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordtype">int</span> select_working_set(<span class="keywordtype">int</span> &i, <span class="keywordtype">int</span> &j);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keywordtype">double</span> calculate_rho();</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordtype">bool</span> be_shrunk(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> Gmax1, <span class="keywordtype">double</span> Gmax2, <span class="keywordtype">double</span> Gmax3, <span class="keywordtype">double</span> Gmax4);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordtype">void</span> do_shrinking();</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> };</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">// return 1 if already optimal, return 0 otherwise</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordtype">int</span> Solver_NU::select_working_set(<span class="keywordtype">int</span> &out_i, <span class="keywordtype">int</span> &out_j)</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">// return i,j such that y_i = y_j and</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">// i: maximizes -y_i * grad(f)_i, i in I_up(\alpha)</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="comment">// j: minimizes the decrease of obj value</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment">// (if quadratic coefficeint <= 0, replace it with tau)</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment">// -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha)</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordtype">double</span> Gmaxp = -INF;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordtype">double</span> Gmaxp2 = -INF;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordtype">int</span> Gmaxp_idx = -1;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordtype">double</span> Gmaxn = -INF;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordtype">double</span> Gmaxn2 = -INF;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordtype">int</span> Gmaxn_idx = -1;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordtype">int</span> Gmin_idx = -1;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordtype">double</span> obj_diff_min = INF;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> t=0;t<active_size;t++)</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">if</span>(y[t]==+1)</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> {</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">if</span>(!is_upper_bound(t))</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">if</span>(-G[t] >= Gmaxp)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> Gmaxp = -G[t];</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> Gmaxp_idx = t;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> }</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> {</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">if</span>(!is_lower_bound(t))</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span>(G[t] >= Gmaxn)</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> Gmaxn = G[t];</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> Gmaxn_idx = t;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="keywordtype">int</span> ip = Gmaxp_idx;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordtype">int</span> in = Gmaxn_idx;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keyword">const</span> Qfloat *Q_ip = NULL;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="keyword">const</span> Qfloat *Q_in = NULL;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordflow">if</span>(ip != -1) <span class="comment">// NULL Q_ip not accessed: Gmaxp=-INF if ip=-1</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> Q_ip = Q->get_Q(ip,active_size);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">if</span>(in != -1)</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> Q_in = Q->get_Q(in,active_size);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<active_size;j++)</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">if</span>(y[j]==+1)</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">if</span> (!is_lower_bound(j)) </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> {</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordtype">double</span> grad_diff=Gmaxp+G[j];</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordflow">if</span> (G[j] >= Gmaxp2)</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> Gmaxp2 = G[j];</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="keywordflow">if</span> (grad_diff > 0)</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> {</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordtype">double</span> obj_diff; </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordtype">double</span> quad_coef = QD[ip]+QD[j]-2*Q_ip[j];</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordflow">if</span> (quad_coef > 0)</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> obj_diff = -(grad_diff*grad_diff)/quad_coef;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> obj_diff = -(grad_diff*grad_diff)/TAU;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">if</span> (obj_diff <= obj_diff_min)</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> Gmin_idx=j;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> obj_diff_min = obj_diff;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> }</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> }</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> {</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordflow">if</span> (!is_upper_bound(j))</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> {</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordtype">double</span> grad_diff=Gmaxn-G[j];</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">if</span> (-G[j] >= Gmaxn2)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> Gmaxn2 = -G[j];</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordflow">if</span> (grad_diff > 0)</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> {</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordtype">double</span> obj_diff; </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordtype">double</span> quad_coef = QD[in]+QD[j]-2*Q_in[j];</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">if</span> (quad_coef > 0)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> obj_diff = -(grad_diff*grad_diff)/quad_coef;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> obj_diff = -(grad_diff*grad_diff)/TAU;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">if</span> (obj_diff <= obj_diff_min)</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> {</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> Gmin_idx=j;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> obj_diff_min = obj_diff;</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> }</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> }</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">if</span>(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps)</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">if</span> (y[Gmin_idx] == +1)</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> out_i = Gmaxp_idx;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> out_i = Gmaxn_idx;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> out_j = Gmin_idx;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> }</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="keywordtype">bool</span> Solver_NU::be_shrunk(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> Gmax1, <span class="keywordtype">double</span> Gmax2, <span class="keywordtype">double</span> Gmax3, <span class="keywordtype">double</span> Gmax4)</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> {</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> {</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">return</span>(-G[i] > Gmax1);</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">return</span>(-G[i] > Gmax4);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> }</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(is_lower_bound(i))</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> {</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="keywordflow">return</span>(G[i] > Gmax2);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordflow">return</span>(G[i] > Gmax3);</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> }</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordflow">return</span>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> }</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> </div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordtype">void</span> Solver_NU::do_shrinking()</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> {</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordtype">double</span> Gmax1 = -INF; <span class="comment">// max { -y_i * grad(f)_i | y_i = +1, i in I_up(\alpha) }</span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordtype">double</span> Gmax2 = -INF; <span class="comment">// max { y_i * grad(f)_i | y_i = +1, i in I_low(\alpha) }</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">double</span> Gmax3 = -INF; <span class="comment">// max { -y_i * grad(f)_i | y_i = -1, i in I_up(\alpha) }</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordtype">double</span> Gmax4 = -INF; <span class="comment">// max { y_i * grad(f)_i | y_i = -1, i in I_low(\alpha) }</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="comment">// find maximal violating pair first</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">for</span>(i=0;i<active_size;i++)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> {</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">if</span>(!is_upper_bound(i))</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> {</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> {</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordflow">if</span>(-G[i] > Gmax1) Gmax1 = -G[i];</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(-G[i] > Gmax4) Gmax4 = -G[i];</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> }</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordflow">if</span>(!is_lower_bound(i))</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> {</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> { </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">if</span>(G[i] > Gmax2) Gmax2 = G[i];</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(G[i] > Gmax3) Gmax3 = G[i];</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> }</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> }</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordflow">if</span>(unshrink == <span class="keyword">false</span> && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> unshrink = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> reconstruct_gradient();</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> active_size = l;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> }</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">for</span>(i=0;i<active_size;i++)</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">if</span> (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4))</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> {</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> active_size--;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">while</span> (active_size > i)</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> {</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">if</span> (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4))</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> swap_index(i,active_size);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> }</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> active_size--;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> }</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordtype">double</span> Solver_NU::calculate_rho()</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> {</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordtype">int</span> nr_free1 = 0,nr_free2 = 0;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="keywordtype">double</span> ub1 = INF, ub2 = INF;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="keywordtype">double</span> lb1 = -INF, lb2 = -INF;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordtype">double</span> sum_free1 = 0, sum_free2 = 0;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<active_size;i++)</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> {</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordflow">if</span>(y[i]==+1)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> lb1 = max(lb1,G[i]);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(is_lower_bound(i))</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> ub1 = min(ub1,G[i]);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> ++nr_free1;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> sum_free1 += G[i];</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> }</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">if</span>(is_upper_bound(i))</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> lb2 = max(lb2,G[i]);</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(is_lower_bound(i))</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> ub2 = min(ub2,G[i]);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> {</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> ++nr_free2;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> sum_free2 += G[i];</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> }</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordtype">double</span> r1,r2;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">if</span>(nr_free1 > 0)</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> r1 = sum_free1/nr_free1;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> r1 = (ub1+lb1)/2;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">if</span>(nr_free2 > 0)</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> r2 = sum_free2/nr_free2;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> r2 = (ub2+lb2)/2;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> si->r = (r1+r2)/2;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">return</span> (r1-r2)/2;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment">// Q matrices for various formulations</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"><a class="line" href="classSVC__Q.html"> 1273</a></span> <span class="keyword">class </span><a class="code" href="classSVC__Q.html">SVC_Q</a>: <span class="keyword">public</span> <a class="code" href="classKernel.html">Kernel</a></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> { </div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <a class="code" href="classSVC__Q.html">SVC_Q</a>(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a>& prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param, <span class="keyword">const</span> schar *y_)</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> :<a class="code" href="classKernel.html">Kernel</a>(prob.l, prob.x, param)</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> {</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> clone(y,y_,prob.l);</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> cache = <span class="keyword">new</span> <a class="code" href="classCache.html">Cache</a>(prob.l,(<span class="keywordtype">long</span> <span class="keywordtype">int</span>)(param.cache_size*(1<<20)));</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> QD = <span class="keyword">new</span> <span class="keywordtype">double</span>[prob.l];</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<prob.l;i++)</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> QD[i] = (this->*kernel_function)(i,i);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> }</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> </div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> Qfloat *get_Q(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> Qfloat *data;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordtype">int</span> start, j;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordflow">if</span>((start = cache->get_data(i,&data,len)) < len)</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> {</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">for</span>(j=start;j<len;j++)</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> data[j] = (Qfloat)(y[i]*y[j]*(this->*kernel_function)(i,j));</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="keywordflow">return</span> data;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> }</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> </div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="keywordtype">double</span> *get_QD()<span class="keyword"> const</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="keywordflow">return</span> QD;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> }</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> cache->swap_index(i,j);</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> Kernel::swap_index(i,j);</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> swap(y[i],y[j]);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> swap(QD[i],QD[j]);</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> }</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> </div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> ~<a class="code" href="classSVC__Q.html">SVC_Q</a>()</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> {</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="keyword">delete</span> cache;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keyword">delete</span>[] QD;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> schar *y;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <a class="code" href="classCache.html">Cache</a> *cache;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordtype">double</span> *QD;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> };</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"><a class="line" href="classONE__CLASS__Q.html"> 1323</a></span> <span class="keyword">class </span><a class="code" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>: <span class="keyword">public</span> <a class="code" href="classKernel.html">Kernel</a></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> {</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <a class="code" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a>& prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param)</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> :<a class="code" href="classKernel.html">Kernel</a>(prob.l, prob.x, param)</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> {</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> cache = <span class="keyword">new</span> <a class="code" href="classCache.html">Cache</a>(prob.l,(<span class="keywordtype">long</span> <span class="keywordtype">int</span>)(param.cache_size*(1<<20)));</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> QD = <span class="keyword">new</span> <span class="keywordtype">double</span>[prob.l];</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<prob.l;i++)</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> QD[i] = (this->*kernel_function)(i,i);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> }</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> Qfloat *get_Q(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> Qfloat *data;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="keywordtype">int</span> start, j;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">if</span>((start = cache->get_data(i,&data,len)) < len)</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> {</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="keywordflow">for</span>(j=start;j<len;j++)</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> data[j] = (Qfloat)(this->*kernel_function)(i,j);</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> }</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">return</span> data;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="keywordtype">double</span> *get_QD()<span class="keyword"> const</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="keywordflow">return</span> QD;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> }</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> cache->swap_index(i,j);</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> Kernel::swap_index(i,j);</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> swap(QD[i],QD[j]);</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> ~<a class="code" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>()</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> {</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="keyword">delete</span> cache;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keyword">delete</span>[] QD;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <a class="code" href="classCache.html">Cache</a> *cache;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordtype">double</span> *QD;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> };</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> </div>
+<div class="line"><a name="l01369"></a><span class="lineno"><a class="line" href="classSVR__Q.html"> 1369</a></span> <span class="keyword">class </span><a class="code" href="classSVR__Q.html">SVR_Q</a>: <span class="keyword">public</span> <a class="code" href="classKernel.html">Kernel</a></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> { </div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <a class="code" href="classSVR__Q.html">SVR_Q</a>(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a>& prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param)</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> :<a class="code" href="classKernel.html">Kernel</a>(prob.l, prob.x, param)</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> {</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> l = prob.l;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> cache = <span class="keyword">new</span> <a class="code" href="classCache.html">Cache</a>(l,(<span class="keywordtype">long</span> <span class="keywordtype">int</span>)(param.cache_size*(1<<20)));</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> QD = <span class="keyword">new</span> <span class="keywordtype">double</span>[2*l];</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> sign = <span class="keyword">new</span> schar[2*l];</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> index = <span class="keyword">new</span> <span class="keywordtype">int</span>[2*l];</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> k=0;k<l;k++)</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> {</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> sign[k] = 1;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> sign[k+l] = -1;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> index[k] = k;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> index[k+l] = k;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> QD[k] = (this->*kernel_function)(k,k);</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> QD[k+l] = QD[k];</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> }</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> buffer[0] = <span class="keyword">new</span> Qfloat[2*l];</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> buffer[1] = <span class="keyword">new</span> Qfloat[2*l];</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> next_buffer = 0;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> }</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="keywordtype">void</span> swap_index(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> swap(sign[i],sign[j]);</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> swap(index[i],index[j]);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> swap(QD[i],QD[j]);</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> }</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> Qfloat *get_Q(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> Qfloat *data;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordtype">int</span> j, real_i = index[i];</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">if</span>(cache->get_data(real_i,&data,l) < l)</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> {</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="keywordflow">for</span>(j=0;j<l;j++)</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> data[j] = (Qfloat)(this->*kernel_function)(real_i,j);</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> }</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment">// reorder and copy</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> Qfloat *buf = buffer[next_buffer];</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> next_buffer = 1 - next_buffer;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> schar si = sign[i];</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="keywordflow">for</span>(j=0;j<len;j++)</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> buf[j] = (Qfloat) si * (Qfloat) sign[j] * data[index[j]];</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="keywordflow">return</span> buf;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> }</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="keywordtype">double</span> *get_QD()<span class="keyword"> const</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordflow">return</span> QD;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> }</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> ~<a class="code" href="classSVR__Q.html">SVR_Q</a>()</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> {</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="keyword">delete</span> cache;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="keyword">delete</span>[] sign;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="keyword">delete</span>[] index;</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="keyword">delete</span>[] buffer[0];</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="keyword">delete</span>[] buffer[1];</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="keyword">delete</span>[] QD;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> }</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <a class="code" href="classCache.html">Cache</a> *cache;</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> schar *sign;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="keywordtype">int</span> *index;</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="keyword">mutable</span> <span class="keywordtype">int</span> next_buffer;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> Qfloat *buffer[2];</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordtype">double</span> *QD;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> };</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment">// construct and solve various formulations</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solve_c_svc(</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>* param,</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="keywordtype">double</span> *alpha, <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>* si, <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn)</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> {</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordtype">double</span> *minus_ones = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> schar *y = <span class="keyword">new</span> schar[l];</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> alpha[i] = 0;</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> minus_ones[i] = -1;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="keywordflow">if</span>(prob->y[i] > 0) y[i] = +1; <span class="keywordflow">else</span> y[i] = -1;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <a class="code" href="classSolver.html">Solver</a> s;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> s.Solve(l, <a class="code" href="classSVC__Q.html">SVC_Q</a>(*prob,*param,y), minus_ones, y,</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> alpha, Cp, Cn, param->eps, si, param->shrinking, param->verbose);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> </div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="keywordtype">double</span> sum_alpha=0;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> sum_alpha += alpha[i];</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> </div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="keywordflow">if</span> (Cp==Cn)</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> info(<span class="stringliteral">"nu = %f\n"</span>, sum_alpha/(Cp*prob->l));</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> alpha[i] *= y[i];</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="keyword">delete</span>[] minus_ones;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> </div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solve_nu_svc(</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="keywordtype">double</span> *alpha, <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>* si)</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> {</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="keywordtype">double</span> nu = param->nu;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> schar *y = <span class="keyword">new</span> schar[l];</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> </div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="keywordflow">if</span>(prob->y[i]>0)</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> y[i] = +1;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> y[i] = -1;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> </div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="keywordtype">double</span> sum_pos = nu*l/2;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="keywordtype">double</span> sum_neg = nu*l/2;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> </div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="keywordflow">if</span>(y[i] == +1)</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> alpha[i] = min(1.0,sum_pos);</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> sum_pos -= alpha[i];</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> alpha[i] = min(1.0,sum_neg);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> sum_neg -= alpha[i];</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> </div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="keywordtype">double</span> *zeros = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> zeros[i] = 0;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <a class="code" href="classSolver__NU.html">Solver_NU</a> s;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> s.Solve(l, <a class="code" href="classSVC__Q.html">SVC_Q</a>(*prob,*param,y), zeros, y,</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> alpha, 1.0, 1.0, param->eps, si, param->shrinking, param->verbose);</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="keywordtype">double</span> r = si->r;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> info(<span class="stringliteral">"C = %f\n"</span>,1/r);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> alpha[i] *= y[i]/r;</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> </div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> si->rho /= r;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> si->obj /= (r*r);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> si->upper_bound_p = 1/r;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> si->upper_bound_n = 1/r;</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> </div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="keyword">delete</span>[] zeros;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solve_one_class(</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="keywordtype">double</span> *alpha, <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>* si)</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> {</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordtype">double</span> *zeros = <span class="keyword">new</span> <span class="keywordtype">double</span>[l];</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> schar *ones = <span class="keyword">new</span> schar[l];</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="keywordtype">int</span> n = (int)(param->nu*prob->l); <span class="comment">// # of alpha's at upper bound</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> </div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="keywordflow">for</span>(i=0;i<n;i++)</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> alpha[i] = 1;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordflow">if</span>(n<prob->l)</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> alpha[n] = param->nu * prob->l - n;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="keywordflow">for</span>(i=n+1;i<l;i++)</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> alpha[i] = 0;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> </div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> {</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> zeros[i] = 0;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> ones[i] = 1;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> }</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <a class="code" href="classSolver.html">Solver</a> s;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> s.Solve(l, <a class="code" href="classONE__CLASS__Q.html">ONE_CLASS_Q</a>(*prob,*param), zeros, ones,</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> alpha, 1.0, 1.0, param->eps, si, param->shrinking, param->verbose );</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="keyword">delete</span>[] zeros;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="keyword">delete</span>[] ones;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> }</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> </div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solve_epsilon_svr(</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordtype">double</span> *alpha, <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>* si)</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> {</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="keywordtype">double</span> *alpha2 = <span class="keyword">new</span> <span class="keywordtype">double</span>[2*l];</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordtype">double</span> *linear_term = <span class="keyword">new</span> <span class="keywordtype">double</span>[2*l];</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> schar *y = <span class="keyword">new</span> schar[2*l];</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> {</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> alpha2[i] = 0;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> linear_term[i] = param->p - prob->y[i];</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> y[i] = 1;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> alpha2[i+l] = 0;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> linear_term[i+l] = param->p + prob->y[i];</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> y[i+l] = -1;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> }</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> </div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <a class="code" href="classSolver.html">Solver</a> s;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> s.Solve(2*l, <a class="code" href="classSVR__Q.html">SVR_Q</a>(*prob,*param), linear_term, y,</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> alpha2, param->C, param->C, param->eps, si, param->shrinking, param->verbose);</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="keywordtype">double</span> sum_alpha = 0;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> {</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> alpha[i] = alpha2[i] - alpha2[i+l];</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> sum_alpha += fabs(alpha[i]);</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> }</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> info(<span class="stringliteral">"nu = %f\n"</span>,sum_alpha/(param->C*l));</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="keyword">delete</span>[] alpha2;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="keyword">delete</span>[] linear_term;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> }</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solve_nu_svr(</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="keywordtype">double</span> *alpha, <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a>* si)</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> {</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="keywordtype">double</span> C = param->C;</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="keywordtype">double</span> *alpha2 = <span class="keyword">new</span> <span class="keywordtype">double</span>[2*l];</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordtype">double</span> *linear_term = <span class="keyword">new</span> <span class="keywordtype">double</span>[2*l];</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> schar *y = <span class="keyword">new</span> schar[2*l];</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="keywordtype">double</span> sum = C * param->nu * l / 2;</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> {</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> alpha2[i] = alpha2[i+l] = min(sum,C);</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> sum -= alpha2[i];</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> linear_term[i] = - prob->y[i];</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> y[i] = 1;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> </div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> linear_term[i+l] = prob->y[i];</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> y[i+l] = -1;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> }</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <a class="code" href="classSolver__NU.html">Solver_NU</a> s;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> s.Solve(2*l, <a class="code" href="classSVR__Q.html">SVR_Q</a>(*prob,*param), linear_term, y,</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> alpha2, C, C, param->eps, si, param->shrinking, param->verbose);</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> info(<span class="stringliteral">"epsilon = %f\n"</span>,-si->r);</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> alpha[i] = alpha2[i] - alpha2[i+l];</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="keyword">delete</span>[] alpha2;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="keyword">delete</span>[] linear_term;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="keyword">delete</span>[] y;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> }</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> </div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">// decision_function</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment">//</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"><a class="line" href="structdecision__function.html"> 1652</a></span> <span class="keyword">struct </span><a class="code" href="structdecision__function.html">decision_function</a></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> {</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="keywordtype">double</span> *alpha;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="keywordtype">double</span> rho; </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> };</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="keyword">static</span> <a class="code" href="structdecision__function.html">decision_function</a> svm_train_one(</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn)</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> {</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="keywordtype">double</span> *alpha = Malloc(<span class="keywordtype">double</span>,prob->l);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <a class="code" href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a> si;</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="keywordflow">switch</span>(param->svm_type)</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> {</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="keywordflow">case</span> C_SVC:</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> solve_c_svc(prob,param,alpha,&si,Cp,Cn);</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="keywordflow">case</span> NU_SVC:</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> solve_nu_svc(prob,param,alpha,&si);</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="keywordflow">case</span> ONE_CLASS:</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> solve_one_class(prob,param,alpha,&si);</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="keywordflow">case</span> EPSILON_SVR:</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> solve_epsilon_svr(prob,param,alpha,&si);</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="keywordflow">case</span> NU_SVR:</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> solve_nu_svr(prob,param,alpha,&si);</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> }</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> </div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> info(<span class="stringliteral">"obj = %f, rho = %f\n"</span>,si.obj,si.rho);</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> </div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> <span class="comment">// output SVs</span></div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="keywordtype">int</span> nSV = 0;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="keywordtype">int</span> nBSV = 0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> {</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="keywordflow">if</span>(fabs(alpha[i]) > 0)</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> {</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> ++nSV;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="keywordflow">if</span>(prob->y[i] > 0)</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> {</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="keywordflow">if</span>(fabs(alpha[i]) >= si.upper_bound_p)</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> ++nBSV;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> }</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> {</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="keywordflow">if</span>(fabs(alpha[i]) >= si.upper_bound_n)</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> ++nBSV;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> }</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> }</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> info(<span class="stringliteral">"nSV = %d, nBSV = %d\n"</span>,nSV,nBSV);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <a class="code" href="structdecision__function.html">decision_function</a> f;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> f.alpha = alpha;</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> f.rho = si.rho;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="keywordflow">return</span> f;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> }</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="comment">// Platt's binary SVM Probablistic Output: an improvement from Lin et al.</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sigmoid_train(</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">double</span> *dec_values, <span class="keyword">const</span> <span class="keywordtype">double</span> *labels, </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="keywordtype">double</span>& A, <span class="keywordtype">double</span>& B)</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> {</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="keywordtype">double</span> prior1=0, prior0 = 0;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="keywordflow">for</span> (i=0;i<l;i++)</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="keywordflow">if</span> (labels[i] > 0) prior1+=1;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="keywordflow">else</span> prior0+=1;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="keywordtype">int</span> max_iter=100; <span class="comment">// Maximal number of iterations</span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="keywordtype">double</span> min_step=1e-10; <span class="comment">// Minimal step taken in line search</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="keywordtype">double</span> sigma=1e-12; <span class="comment">// For numerically strict PD of Hessian</span></div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="keywordtype">double</span> eps=1e-5;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="keywordtype">double</span> hiTarget=(prior1+1.0)/(prior1+2.0);</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="keywordtype">double</span> loTarget=1/(prior0+2.0);</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="keywordtype">double</span> *t=Malloc(<span class="keywordtype">double</span>,l);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="keywordtype">double</span> fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize;</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="keywordtype">double</span> newA,newB,newf,d1,d2;</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="keywordtype">int</span> iter; </div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> </div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment">// Initial Point and Initial Fun Value</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> A=0.0; B=log((prior0+1.0)/(prior1+1.0));</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="keywordtype">double</span> fval = 0.0;</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="keywordflow">for</span> (i=0;i<l;i++)</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> {</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="keywordflow">if</span> (labels[i]>0) t[i]=hiTarget;</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="keywordflow">else</span> t[i]=loTarget;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> fApB = dec_values[i]*A+B;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="keywordflow">if</span> (fApB>=0)</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> fval += t[i]*fApB + log(1+exp(-fApB));</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> fval += (t[i] - 1)*fApB +log(1+exp(fApB));</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> }</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="keywordflow">for</span> (iter=0;iter<max_iter;iter++)</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> {</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">// Update Gradient and Hessian (use H' = H + sigma I)</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> h11=sigma; <span class="comment">// numerically ensures strict PD</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> h22=sigma;</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> h21=0.0;g1=0.0;g2=0.0;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="keywordflow">for</span> (i=0;i<l;i++)</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> {</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> fApB = dec_values[i]*A+B;</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="keywordflow">if</span> (fApB >= 0)</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> p=exp(-fApB)/(1.0+exp(-fApB));</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> q=1.0/(1.0+exp(-fApB));</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> }</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> {</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> p=1.0/(1.0+exp(fApB));</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> q=exp(fApB)/(1.0+exp(fApB));</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> }</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> d2=p*q;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> h11+=dec_values[i]*dec_values[i]*d2;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> h22+=d2;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> h21+=dec_values[i]*d2;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> d1=t[i]-p;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> g1+=dec_values[i]*d1;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> g2+=d1;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> }</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> </div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="comment">// Stopping Criteria</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="keywordflow">if</span> (fabs(g1)<eps && fabs(g2)<eps)</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">// Finding Newton direction: -inv(H') * g</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> det=h11*h22-h21*h21;</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> dA=-(h22*g1 - h21 * g2) / det;</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> dB=-(-h21*g1+ h11 * g2) / det;</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> gd=g1*dA+g2*dB;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> </div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> </div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> stepsize = 1; <span class="comment">// Line Search</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="keywordflow">while</span> (stepsize >= min_step)</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> {</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> newA = A + stepsize * dA;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> newB = B + stepsize * dB;</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> </div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment">// New function value</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> newf = 0.0;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="keywordflow">for</span> (i=0;i<l;i++)</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> {</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> fApB = dec_values[i]*newA+newB;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="keywordflow">if</span> (fApB >= 0)</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> newf += t[i]*fApB + log(1+exp(-fApB));</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> newf += (t[i] - 1)*fApB +log(1+exp(fApB));</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> }</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="comment">// Check sufficient decrease</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> <span class="keywordflow">if</span> (newf<fval+0.0001*stepsize*gd)</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> {</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> A=newA;B=newB;fval=newf;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> }</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> stepsize = stepsize / 2.0;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> }</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> </div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="keywordflow">if</span> (stepsize < min_step)</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> {</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> info(<span class="stringliteral">"Line search fails in two-class probability estimates\n"</span>);</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> }</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> }</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="keywordflow">if</span> (iter>=max_iter)</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> info(<span class="stringliteral">"Reaching maximal iterations in two-class probability estimates\n"</span>);</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> free(t);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> }</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sigmoid_predict(<span class="keywordtype">double</span> decision_value, <span class="keywordtype">double</span> A, <span class="keywordtype">double</span> B)</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> {</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="keywordtype">double</span> fApB = decision_value*A+B;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment">// 1-p used later; avoid catastrophic cancellation</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="keywordflow">if</span> (fApB >= 0)</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="keywordflow">return</span> exp(-fApB)/(1.0+exp(-fApB));</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="keywordflow">return</span> 1.0/(1+exp(fApB)) ;</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> }</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> </div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment">// Method 2 from the multiclass_prob paper by Wu, Lin, and Weng</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="keyword">static</span> <span class="keywordtype">void</span> multiclass_probability(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> **r, <span class="keywordtype">double</span> *p)</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> {</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="keywordtype">int</span> t,j;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="keywordtype">int</span> iter = 0, max_iter=max(100,k);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="keywordtype">double</span> **Q=Malloc(<span class="keywordtype">double</span> *,k);</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="keywordtype">double</span> *Qp=Malloc(<span class="keywordtype">double</span>,k);</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="keywordtype">double</span> pQp, eps=0.005/k;</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> </div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="keywordflow">for</span> (t=0;t<k;t++)</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> {</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> p[t]=1.0/k; <span class="comment">// Valid if k = 1</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> Q[t]=Malloc(<span class="keywordtype">double</span>,k);</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> Q[t][t]=0;</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="keywordflow">for</span> (j=0;j<t;j++)</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> {</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> Q[t][t]+=r[j][t]*r[j][t];</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> Q[t][j]=Q[j][t];</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> }</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="keywordflow">for</span> (j=t+1;j<k;j++)</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> {</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> Q[t][t]+=r[j][t]*r[j][t];</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> Q[t][j]=-r[j][t]*r[t][j];</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> }</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> }</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> <span class="keywordflow">for</span> (iter=0;iter<max_iter;iter++)</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> {</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="comment">// stopping condition, recalculate QP,pQP for numerical accuracy</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> pQp=0;</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="keywordflow">for</span> (t=0;t<k;t++)</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> {</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> Qp[t]=0;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="keywordflow">for</span> (j=0;j<k;j++)</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> Qp[t]+=Q[t][j]*p[j];</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> pQp+=p[t]*Qp[t];</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> }</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="keywordtype">double</span> max_error=0;</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <span class="keywordflow">for</span> (t=0;t<k;t++)</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> {</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="keywordtype">double</span> error=fabs(Qp[t]-pQp);</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> <span class="keywordflow">if</span> (error>max_error)</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> max_error=error;</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="keywordflow">if</span> (max_error<eps) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> </div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="keywordflow">for</span> (t=0;t<k;t++)</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> {</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="keywordtype">double</span> diff=(-Qp[t]+pQp)/Q[t][t];</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> p[t]+=diff;</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> pQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff);</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="keywordflow">for</span> (j=0;j<k;j++)</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> {</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> Qp[j]=(Qp[j]+diff*Q[t][j])/(1+diff);</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> p[j]/=(1+diff);</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> }</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> }</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> }</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="keywordflow">if</span> (iter>=max_iter)</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> info(<span class="stringliteral">"Exceeds max_iter in multiclass_prob\n"</span>);</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> <span class="keywordflow">for</span>(t=0;t<k;t++) free(Q[t]);</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> free(Q);</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> free(Qp);</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> }</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="comment">// Cross-validation decision values for probability estimates</span></div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="keyword">static</span> <span class="keywordtype">void</span> svm_binary_svc_probability(</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param,</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="keywordtype">double</span> Cp, <span class="keywordtype">double</span> Cn, <span class="keywordtype">double</span>& probA, <span class="keywordtype">double</span>& probB)</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> {</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> <span class="keywordtype">int</span> nr_fold = 5;</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="keywordtype">int</span> *perm = Malloc(<span class="keywordtype">int</span>,prob->l);</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> <span class="keywordtype">double</span> *dec_values = Malloc(<span class="keywordtype">double</span>,prob->l);</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <span class="comment">// random shuffle</span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++) perm[i]=i;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> {</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="keywordtype">int</span> j = i+rand()%(prob->l-i);</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> swap(perm[i],perm[j]);</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> }</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="keywordflow">for</span>(i=0;i<nr_fold;i++)</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> {</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="keywordtype">int</span> begin = i*prob->l/nr_fold;</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="keywordtype">int</span> end = (i+1)*prob->l/nr_fold;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="keyword">struct</span> <a class="code" href="structsvm__problem.html">svm_problem</a> subprob;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> subprob.l = prob->l-(end-begin);</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> subprob.x = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>*,subprob.l);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> subprob.y = Malloc(<span class="keywordtype">double</span>,subprob.l);</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> k=0;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keywordflow">for</span>(j=0;j<begin;j++)</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> {</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> subprob.x[k] = prob->x[perm[j]];</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> subprob.y[k] = prob->y[perm[j]];</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> ++k;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> }</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="keywordflow">for</span>(j=end;j<prob->l;j++)</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> {</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> subprob.x[k] = prob->x[perm[j]];</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> subprob.y[k] = prob->y[perm[j]];</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> ++k;</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> }</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="keywordtype">int</span> p_count=0,n_count=0;</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="keywordflow">for</span>(j=0;j<k;j++)</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="keywordflow">if</span>(subprob.y[j]>0)</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> p_count++;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> n_count++;</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="keywordflow">if</span>(p_count==0 && n_count==0)</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> dec_values[perm[j]] = 0;</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(p_count > 0 && n_count == 0)</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> dec_values[perm[j]] = 1;</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(p_count == 0 && n_count > 0)</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> dec_values[perm[j]] = -1;</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> {</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> subparam = *param;</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> subparam.probability=0;</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> subparam.C=1.0;</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> subparam.nr_weight=2;</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> subparam.weight_label = Malloc(<span class="keywordtype">int</span>,2);</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> subparam.weight = Malloc(<span class="keywordtype">double</span>,2);</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> subparam.weight_label[0]=+1;</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> subparam.weight_label[1]=-1;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> subparam.weight[0]=Cp;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> subparam.weight[1]=Cn;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a> *submodel = svm_train(&subprob,&subparam);</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> {</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> svm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]])); </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="comment">// ensure +1 -1 order; reason not using CV subroutine</span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> dec_values[perm[j]] *= submodel->label[0];</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> } </div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> svm_free_and_destroy_model(&submodel);</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> svm_destroy_param(&subparam);</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> }</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> free(subprob.x);</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> free(subprob.y);</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> } </div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> sigmoid_train(prob->l,dec_values,prob->y,probA,probB);</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> free(dec_values);</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> free(perm);</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> }</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> </div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="comment">// Return parameter of a Laplace distribution </span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="keyword">static</span> <span class="keywordtype">double</span> svm_svr_probability(</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> <span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param)</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> {</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="keywordtype">int</span> nr_fold = 5;</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> <span class="keywordtype">double</span> *ymv = Malloc(<span class="keywordtype">double</span>,prob->l);</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="keywordtype">double</span> mae = 0;</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> </div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> newparam = *param;</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> newparam.probability = 0;</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> svm_cross_validation(prob,&newparam,nr_fold,ymv);</div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> {</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> ymv[i]=prob->y[i]-ymv[i];</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> mae += fabs(ymv[i]);</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> } </div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> mae /= prob->l;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="keywordtype">double</span> std=sqrt(2*mae*mae);</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="keywordtype">int</span> count=0;</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> mae=0;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="keywordflow">if</span> (fabs(ymv[i]) > 5*std) </div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> count=count+1;</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> mae+=fabs(ymv[i]);</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> mae /= (prob->l-count);</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> info(<span class="stringliteral">"Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\n"</span>,mae);</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> free(ymv);</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="keywordflow">return</span> mae;</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> }</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> </div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> </div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment">// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="comment">// perm, length l, must be allocated before calling this subroutine</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="keyword">static</span> <span class="keywordtype">void</span> svm_group_classes(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keywordtype">int</span> *nr_class_ret, <span class="keywordtype">int</span> **label_ret, <span class="keywordtype">int</span> **start_ret, <span class="keywordtype">int</span> **count_ret, <span class="ke [...]
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> {</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="keywordtype">int</span> max_nr_class = 16;</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="keywordtype">int</span> nr_class = 0;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="keywordtype">int</span> *label = Malloc(<span class="keywordtype">int</span>,max_nr_class);</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="keywordtype">int</span> *count = Malloc(<span class="keywordtype">int</span>,max_nr_class);</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="keywordtype">int</span> *data_label = Malloc(<span class="keywordtype">int</span>,l); </div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> </div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> {</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="keywordtype">int</span> this_label = (int)prob->y[i];</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="keywordflow">for</span>(j=0;j<nr_class;j++)</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> {</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="keywordflow">if</span>(this_label == label[j])</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> {</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> ++count[j];</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> }</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> }</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> data_label[i] = j;</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="keywordflow">if</span>(j == nr_class)</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> {</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="keywordflow">if</span>(nr_class == max_nr_class)</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> {</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> max_nr_class *= 2;</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> label = (<span class="keywordtype">int</span> *)realloc(label,max_nr_class*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> count = (<span class="keywordtype">int</span> *)realloc(count,max_nr_class*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> }</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> label[nr_class] = this_label;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> count[nr_class] = 1;</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> ++nr_class;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> }</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> }</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> </div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="keywordtype">int</span> *start = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> start[0] = 0;</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> start[i] = start[i-1]+count[i-1];</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> {</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> perm[start[data_label[i]]] = i;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> ++start[data_label[i]];</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> }</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> start[0] = 0;</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> start[i] = start[i-1]+count[i-1];</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> </div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> *nr_class_ret = nr_class;</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> *label_ret = label;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> *start_ret = start;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> *count_ret = count;</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> free(data_label);</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> }</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="comment">//</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="comment">// Interface functions</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="comment">//</span></div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <a class="code" href="structsvm__model.html">svm_model</a> *svm_train(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param)</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> {</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <a class="code" href="structsvm__model.html">svm_model</a> *model = Malloc(<a class="code" href="structsvm__model.html">svm_model</a>,1);</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> model->param = *param;</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> model->free_sv = 0; <span class="comment">// XXX</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> </div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="keywordflow">if</span>(param->svm_type == ONE_CLASS ||</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> param->svm_type == EPSILON_SVR ||</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> param->svm_type == NU_SVR)</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> {</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> <span class="comment">// regression or one-class-svm</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> model->nr_class = 2;</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> model->label = NULL;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> model->nSV = NULL;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> model->probA = NULL; model->probB = NULL;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> model->sv_coef = Malloc(<span class="keywordtype">double</span> *,1);</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> </div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="keywordflow">if</span>(param->probability && </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> (param->svm_type == EPSILON_SVR ||</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> param->svm_type == NU_SVR))</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> {</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> model->probA = Malloc(<span class="keywordtype">double</span>,1);</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> model->probA[0] = svm_svr_probability(prob,param);</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> }</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> </div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <a class="code" href="structdecision__function.html">decision_function</a> f = svm_train_one(prob,param,0,0);</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> model->rho = Malloc(<span class="keywordtype">double</span>,1);</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> model->rho[0] = f.rho;</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> <span class="keywordtype">int</span> nSV = 0;</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <span class="keywordflow">if</span>(fabs(f.alpha[i]) > 0) ++nSV;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> model->l = nSV;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> model->SV = Malloc(<a class="code" href="structsvm__node.html">svm_node</a> *,nSV);</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> model->sv_coef[0] = Malloc(<span class="keywordtype">double</span>,nSV);</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="keywordtype">int</span> j = 0;</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="keywordflow">for</span>(i=0;i<prob->l;i++)</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> <span class="keywordflow">if</span>(fabs(f.alpha[i]) > 0)</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> {</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> model->SV[j] = prob->x[i];</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> model->sv_coef[0][j] = f.alpha[i];</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> ++j;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> } </div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> </div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> free(f.alpha);</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> }</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> {</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> <span class="comment">// classification</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> <span class="keywordtype">int</span> nr_class;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> <span class="keywordtype">int</span> *label = NULL;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> <span class="keywordtype">int</span> *start = NULL;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <span class="keywordtype">int</span> *count = NULL;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> <span class="keywordtype">int</span> *perm = Malloc(<span class="keywordtype">int</span>,l);</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> </div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> <span class="comment">// group training data of the same class</span></div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> svm_group_classes(prob,&nr_class,&label,&start,&count,perm);</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> <span class="keywordflow">if</span>(nr_class == 1) </div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> info(<span class="stringliteral">"WARNING: training data in only one class. See README for details.\n"</span>);</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> </div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <a class="code" href="structsvm__node.html">svm_node</a> **x = Malloc(<a class="code" href="structsvm__node.html">svm_node</a> *,l);</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> x[i] = prob->x[perm[i]];</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> </div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="comment">// calculate weighted C</span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> </div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="keywordtype">double</span> *weighted_C = Malloc(<span class="keywordtype">double</span>, nr_class);</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> weighted_C[i] = param->C;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> <span class="keywordflow">for</span>(i=0;i<param->nr_weight;i++)</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> { </div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> <span class="keywordflow">for</span>(j=0;j<nr_class;j++)</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> <span class="keywordflow">if</span>(param->weight_label[i] == label[j])</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> <span class="keywordflow">if</span>(j == nr_class)</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> fprintf(stderr,<span class="stringliteral">"WARNING: class label %d specified in weight is not found\n"</span>, param->weight_label[i]);</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> weighted_C[j] *= param->weight[i];</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> }</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> </div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> <span class="comment">// train k*(k-1)/2 models</span></div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> <span class="keywordtype">bool</span> *nonzero = Malloc(<span class="keywordtype">bool</span>,l);</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> nonzero[i] = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <a class="code" href="structdecision__function.html">decision_function</a> *f = Malloc(<a class="code" href="structdecision__function.html">decision_function</a>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> </div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="keywordtype">double</span> *probA=NULL,*probB=NULL;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="keywordflow">if</span> (param->probability)</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> {</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> probA=Malloc(<span class="keywordtype">double</span>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> probB=Malloc(<span class="keywordtype">double</span>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> }</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> </div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="keywordtype">int</span> p = 0;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j<nr_class;j++)</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> {</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <a class="code" href="structsvm__problem.html">svm_problem</a> sub_prob;</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="keywordtype">int</span> si = start[i], sj = start[j];</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="keywordtype">int</span> ci = count[i], cj = count[j];</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> sub_prob.l = ci+cj;</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> sub_prob.x = Malloc(<a class="code" href="structsvm__node.html">svm_node</a> *,sub_prob.l);</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> sub_prob.y = Malloc(<span class="keywordtype">double</span>,sub_prob.l);</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="keywordflow">for</span>(k=0;k<ci;k++)</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> {</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> sub_prob.x[k] = x[si+k];</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> sub_prob.y[k] = +1;</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> }</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="keywordflow">for</span>(k=0;k<cj;k++)</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> {</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> sub_prob.x[ci+k] = x[sj+k];</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> sub_prob.y[ci+k] = -1;</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> }</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> </div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="keywordflow">if</span>(param->probability)</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]);</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> </div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> f[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]);</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="keywordflow">for</span>(k=0;k<ci;k++)</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="keywordflow">if</span>(!nonzero[si+k] && fabs(f[p].alpha[k]) > 0)</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> nonzero[si+k] = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="keywordflow">for</span>(k=0;k<cj;k++)</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="keywordflow">if</span>(!nonzero[sj+k] && fabs(f[p].alpha[ci+k]) > 0)</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> nonzero[sj+k] = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> free(sub_prob.x);</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> free(sub_prob.y);</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> ++p;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> }</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> </div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment">// build output</span></div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> </div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> model->nr_class = nr_class;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> </div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> model->label = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> model->label[i] = label[i];</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> </div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> model->rho = Malloc(<span class="keywordtype">double</span>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="keywordflow">for</span>(i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> model->rho[i] = f[i].rho;</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> </div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="keywordflow">if</span>(param->probability)</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> {</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> model->probA = Malloc(<span class="keywordtype">double</span>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> model->probB = Malloc(<span class="keywordtype">double</span>,nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="keywordflow">for</span>(i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> {</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> model->probA[i] = probA[i];</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> model->probB[i] = probB[i];</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> }</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> }</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> {</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> model->probA=NULL;</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> model->probB=NULL;</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> }</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> </div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="keywordtype">int</span> total_sv = 0;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="keywordtype">int</span> *nz_count = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> model->nSV = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> {</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="keywordtype">int</span> nSV = 0;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<count[i];j++)</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="keywordflow">if</span>(nonzero[start[i]+j])</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> { </div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> ++nSV;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> ++total_sv;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> }</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> model->nSV[i] = nSV;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> nz_count[i] = nSV;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> }</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> </div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="keywordflow">if</span>(param->verbose)<span class="comment">//pk</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> info(<span class="stringliteral">"Total nSV = %d\n"</span>,total_sv);</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> </div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> model->l = total_sv;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> model->SV = Malloc(<a class="code" href="structsvm__node.html">svm_node</a> *,total_sv);</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> p = 0;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="keywordflow">if</span>(nonzero[i]) model->SV[p++] = x[i];</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> </div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="keywordtype">int</span> *nz_start = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> nz_start[0] = 0;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> nz_start[i] = nz_start[i-1]+nz_count[i-1];</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> </div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> model->sv_coef = Malloc(<span class="keywordtype">double</span> *,nr_class-1);</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="keywordflow">for</span>(i=0;i<nr_class-1;i++)</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> model->sv_coef[i] = Malloc(<span class="keywordtype">double</span>,total_sv);</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> </div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> p = 0;</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j<nr_class;j++)</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> {</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="comment">// classifier (i,j): coefficients with</span></div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="comment">// i are in sv_coef[j-1][nz_start[i]...],</span></div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment">// j are in sv_coef[i][nz_start[j]...]</span></div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> </div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="keywordtype">int</span> si = start[i];</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="keywordtype">int</span> sj = start[j];</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="keywordtype">int</span> ci = count[i];</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="keywordtype">int</span> cj = count[j];</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> </div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="keywordtype">int</span> q = nz_start[i];</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="keywordflow">for</span>(k=0;k<ci;k++)</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="keywordflow">if</span>(nonzero[si+k])</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> model->sv_coef[j-1][q++] = f[p].alpha[k];</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> q = nz_start[j];</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="keywordflow">for</span>(k=0;k<cj;k++)</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="keywordflow">if</span>(nonzero[sj+k])</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> model->sv_coef[i][q++] = f[p].alpha[ci+k];</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> ++p;</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> }</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> </div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> free(label);</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> free(probA);</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> free(probB);</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> free(count);</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> free(perm);</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> free(start);</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> free(x);</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> free(weighted_C);</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> free(nonzero);</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="keywordflow">for</span>(i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> free(f[i].alpha);</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> free(f);</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> free(nz_count);</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> free(nz_start);</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> }</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="keywordflow">return</span> model;</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> }</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> </div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="comment">// Stratified cross validation</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="keywordtype">void</span> svm_cross_validation(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param, <span class="keywordtype">int</span> nr_fold, <span class="keywordtype">double</span> *target)</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> {</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="keywordtype">int</span> *fold_start = Malloc(<span class="keywordtype">int</span>,nr_fold+1);</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="keywordtype">int</span> *perm = Malloc(<span class="keywordtype">int</span>,l);</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="keywordtype">int</span> nr_class;</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> </div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="comment">// stratified cv may not give leave-one-out rate</span></div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> <span class="comment">// Each class to l folds -> some folds may have zero elements</span></div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="keywordflow">if</span>((param->svm_type == C_SVC ||</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> param->svm_type == NU_SVC) && nr_fold < l)</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> {</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="keywordtype">int</span> *start = NULL;</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> <span class="keywordtype">int</span> *label = NULL;</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> <span class="keywordtype">int</span> *count = NULL;</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> svm_group_classes(prob,&nr_class,&label,&start,&count,perm);</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="comment">// random shuffle and then data grouped by fold using the array perm</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="keywordtype">int</span> *fold_count = Malloc(<span class="keywordtype">int</span>,nr_fold);</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="keywordtype">int</span> c;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> <span class="keywordtype">int</span> *index = Malloc(<span class="keywordtype">int</span>,l);</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> index[i]=perm[i];</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="keywordflow">for</span> (c=0; c<nr_class; c++) </div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="keywordflow">for</span>(i=0;i<count[c];i++)</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> {</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="keywordtype">int</span> j = i+rand()%(count[c]-i);</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> swap(index[start[c]+j],index[start[c]+i]);</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> }</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="keywordflow">for</span>(i=0;i<nr_fold;i++)</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> {</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> fold_count[i] = 0;</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="keywordflow">for</span> (c=0; c<nr_class;c++)</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> fold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold;</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> fold_start[0]=0;</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="keywordflow">for</span> (i=1;i<=nr_fold;i++)</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> fold_start[i] = fold_start[i-1]+fold_count[i-1];</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="keywordflow">for</span> (c=0; c<nr_class;c++)</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="keywordflow">for</span>(i=0;i<nr_fold;i++)</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> {</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="keywordtype">int</span> begin = start[c]+i*count[c]/nr_fold;</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="keywordtype">int</span> end = start[c]+(i+1)*count[c]/nr_fold;</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=begin;j<end;j++)</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> {</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> perm[fold_start[i]] = index[j];</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> fold_start[i]++;</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> }</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> }</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> fold_start[0]=0;</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="keywordflow">for</span> (i=1;i<=nr_fold;i++)</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> fold_start[i] = fold_start[i-1]+fold_count[i-1];</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> free(start); </div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> free(label);</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> free(count); </div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> free(index);</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> free(fold_count);</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> }</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> {</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> <span class="keywordflow">for</span>(i=0;i<l;i++) perm[i]=i;</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> <span class="keywordtype">int</span> j = i+rand()%(l-i);</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> swap(perm[i],perm[j]);</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> }</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="keywordflow">for</span>(i=0;i<=nr_fold;i++)</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> fold_start[i]=i*l/nr_fold;</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> }</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="keywordflow">for</span>(i=0;i<nr_fold;i++)</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> {</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="keywordtype">int</span> begin = fold_start[i];</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> <span class="keywordtype">int</span> end = fold_start[i+1];</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <span class="keyword">struct </span><a class="code" href="structsvm__problem.html">svm_problem</a> subprob;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> </div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> subprob.l = l-(end-begin);</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> subprob.x = Malloc(<span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a>*,subprob.l);</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> subprob.y = Malloc(<span class="keywordtype">double</span>,subprob.l);</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> k=0;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> <span class="keywordflow">for</span>(j=0;j<begin;j++)</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> {</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> subprob.x[k] = prob->x[perm[j]];</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> subprob.y[k] = prob->y[perm[j]];</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> ++k;</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> }</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="keywordflow">for</span>(j=end;j<l;j++)</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> {</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> subprob.x[k] = prob->x[perm[j]];</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> subprob.y[k] = prob->y[perm[j]];</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> ++k;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> }</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a> *submodel = svm_train(&subprob,param);</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="keywordflow">if</span>(param->probability && </div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> (param->svm_type == C_SVC || param->svm_type == NU_SVC))</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> {</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="keywordtype">double</span> *prob_estimates=Malloc(<span class="keywordtype">double</span>,svm_get_nr_class(submodel));</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> target[perm[j]] = svm_predict_probability(submodel,prob->x[perm[j]],prob_estimates);</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> free(prob_estimates); </div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> }</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="keywordflow">for</span>(j=begin;j<end;j++)</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> target[perm[j]] = svm_predict(submodel,prob->x[perm[j]]);</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> svm_free_and_destroy_model(&submodel);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> free(subprob.x);</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> free(subprob.y);</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> } </div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> free(fold_start);</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> free(perm); </div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> }</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> </div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="keywordtype">int</span> svm_get_svm_type(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model)</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> {</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> <span class="keywordflow">return</span> model->param.svm_type;</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> }</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="keywordtype">int</span> svm_get_nr_class(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model)</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> {</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="keywordflow">return</span> model->nr_class;</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> }</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="keywordtype">void</span> svm_get_labels(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keywordtype">int</span>* label)</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> {</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> <span class="keywordflow">if</span> (model->label != NULL)</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<model->nr_class;i++)</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> label[i] = model->label[i];</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> }</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="keywordtype">double</span> svm_get_svr_probability(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model)</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> {</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> <span class="keywordflow">if</span> ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) &&</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> model->probA!=NULL)</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> <span class="keywordflow">return</span> model->probA[0];</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> {</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> fprintf(stderr,<span class="stringliteral">"Model doesn't contain information for SVR probability inference\n"</span>);</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> }</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> }</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> </div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> <span class="keywordtype">double</span> svm_predict_values(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keywordtype">double</span>* dec_values)</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> {</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="keywordflow">if</span>(model->param.svm_type == ONE_CLASS ||</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> model->param.svm_type == EPSILON_SVR ||</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> model->param.svm_type == NU_SVR)</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> {</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="keywordtype">double</span> *sv_coef = model->sv_coef[0];</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="keywordtype">double</span> sum = 0;</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="keywordflow">for</span>(i=0;i<model->l;i++)</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> sum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param);</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> sum -= model->rho[0];</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> *dec_values = sum;</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> </div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> <span class="keywordflow">if</span>(model->param.svm_type == ONE_CLASS)</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> <span class="keywordflow">return</span> (sum>0)?1:-1;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> }</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> {</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="keywordtype">int</span> nr_class = model->nr_class;</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> <span class="keywordtype">int</span> l = model->l;</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> </div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> <span class="keywordtype">double</span> *kvalue = Malloc(<span class="keywordtype">double</span>,l);</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> kvalue[i] = Kernel::k_function(x,model->SV[i],model->param);</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> </div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="keywordtype">int</span> *start = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> start[0] = 0;</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> start[i] = start[i-1]+model->nSV[i-1];</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="keywordtype">int</span> *vote = Malloc(<span class="keywordtype">int</span>,nr_class);</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> vote[i] = 0;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> </div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> <span class="keywordtype">int</span> p=0;</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j<nr_class;j++)</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> {</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> <span class="keywordtype">double</span> sum = 0;</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> <span class="keywordtype">int</span> si = start[i];</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> <span class="keywordtype">int</span> sj = start[j];</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> <span class="keywordtype">int</span> ci = model->nSV[i];</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> <span class="keywordtype">int</span> cj = model->nSV[j];</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> </div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> <span class="keywordtype">double</span> *coef1 = model->sv_coef[j-1];</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> <span class="keywordtype">double</span> *coef2 = model->sv_coef[i];</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> <span class="keywordflow">for</span>(k=0;k<ci;k++)</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> sum += coef1[si+k] * kvalue[si+k];</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> <span class="keywordflow">for</span>(k=0;k<cj;k++)</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> sum += coef2[sj+k] * kvalue[sj+k];</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span> sum -= model->rho[p];</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span> dec_values[p] = sum;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> </div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> <span class="keywordflow">if</span>(dec_values[p] > 0)</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> ++vote[i];</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> ++vote[j];</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> p++;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> }</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> </div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> <span class="keywordtype">int</span> vote_max_idx = 0;</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> <span class="keywordflow">if</span>(vote[i] > vote[vote_max_idx])</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> vote_max_idx = i;</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> </div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> free(kvalue);</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> free(start);</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> free(vote);</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span> <span class="keywordflow">return</span> model->label[vote_max_idx];</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> }</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> }</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> </div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> <span class="keywordtype">double</span> svm_predict(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *x)</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span> <span class="keywordtype">int</span> nr_class = model->nr_class;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="keywordtype">double</span> *dec_values;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> <span class="keywordflow">if</span>(model->param.svm_type == ONE_CLASS ||</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> model->param.svm_type == EPSILON_SVR ||</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> model->param.svm_type == NU_SVR)</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> dec_values = Malloc(<span class="keywordtype">double</span>, 1);</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> dec_values = Malloc(<span class="keywordtype">double</span>, nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="keywordtype">double</span> pred_result = svm_predict_values(model, x, dec_values);</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> free(dec_values);</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="keywordflow">return</span> pred_result;</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> }</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> </div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> <span class="keywordtype">double</span> svm_predict_probability(</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> <span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keywordtype">double</span> *prob_estimates)</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> {</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> <span class="keywordflow">if</span> ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) &&</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> model->probA!=NULL && model->probB!=NULL)</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> {</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="keywordtype">int</span> nr_class = model->nr_class;</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> <span class="keywordtype">double</span> *dec_values = Malloc(<span class="keywordtype">double</span>, nr_class*(nr_class-1)/2);</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> svm_predict_values(model, x, dec_values);</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> </div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span> <span class="keywordtype">double</span> min_prob=1e-7;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> <span class="keywordtype">double</span> **pairwise_prob=Malloc(<span class="keywordtype">double</span> *,nr_class);</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> pairwise_prob[i]=Malloc(<span class="keywordtype">double</span>,nr_class);</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j<nr_class;j++)</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> {</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> pairwise_prob[i][j]=min(max(sigmoid_predict(dec_values[k],model->probA[k],model->probB[k]),min_prob),1-min_prob);</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> pairwise_prob[j][i]=1-pairwise_prob[i][j];</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> k++;</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> }</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> multiclass_probability(nr_class,pairwise_prob,prob_estimates);</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> </div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> <span class="keywordtype">int</span> prob_max_idx = 0;</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> <span class="keywordflow">for</span>(i=1;i<nr_class;i++)</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> <span class="keywordflow">if</span>(prob_estimates[i] > prob_estimates[prob_max_idx])</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> prob_max_idx = i;</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> free(pairwise_prob[i]);</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> free(dec_values);</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> free(pairwise_prob); </div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> <span class="keywordflow">return</span> model->label[prob_max_idx];</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> }</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> <span class="keywordflow">return</span> svm_predict(model, x);</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *svm_type_table[] =</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> {</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> <span class="stringliteral">"c_svc"</span>,<span class="stringliteral">"nu_svc"</span>,<span class="stringliteral">"one_class"</span>,<span class="stringliteral">"epsilon_svr"</span>,<span class="stringliteral">"nu_svr"</span>,NULL</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> };</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span> </div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *kernel_type_table[]=</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> {</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> <span class="stringliteral">"linear"</span>,<span class="stringliteral">"polynomial"</span>,<span class="stringliteral">"rbf"</span>,<span class="stringliteral">"sigmoid"</span>,<span class="stringliteral">"precomputed"</span>,NULL</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> };</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> </div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> <span class="keywordtype">int</span> svm_save_model(<span class="keyword">const</span> <span class="keywordtype">char</span> *model_file_name, <span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model)</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span> {</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> FILE *fp = fopen(model_file_name,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span> <span class="keywordflow">if</span>(fp==NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> </div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> <span class="keywordtype">char</span> *old_locale = strdup(setlocale(LC_ALL, NULL));</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> setlocale(LC_ALL, <span class="stringliteral">"C"</span>);</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span> </div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param = model->param;</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span> </div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> fprintf(fp,<span class="stringliteral">"svm_type %s\n"</span>, svm_type_table[param.svm_type]);</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> fprintf(fp,<span class="stringliteral">"kernel_type %s\n"</span>, kernel_type_table[param.kernel_type]);</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span> </div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> <span class="keywordflow">if</span>(param.kernel_type == POLY)</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> fprintf(fp,<span class="stringliteral">"degree %d\n"</span>, param.degree);</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> </div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span> <span class="keywordflow">if</span>(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID)</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> fprintf(fp,<span class="stringliteral">"gamma %g\n"</span>, param.gamma);</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> </div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> <span class="keywordflow">if</span>(param.kernel_type == POLY || param.kernel_type == SIGMOID)</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> fprintf(fp,<span class="stringliteral">"coef0 %g\n"</span>, param.coef0);</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> </div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> <span class="keywordtype">int</span> nr_class = model->nr_class;</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> <span class="keywordtype">int</span> l = model->l;</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> fprintf(fp, <span class="stringliteral">"nr_class %d\n"</span>, nr_class);</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> fprintf(fp, <span class="stringliteral">"total_sv %d\n"</span>,l);</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span> </div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> {</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> fprintf(fp, <span class="stringliteral">"rho"</span>);</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> fprintf(fp,<span class="stringliteral">" %g"</span>,model->rho[i]);</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> }</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> </div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> <span class="keywordflow">if</span>(model->label)</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> {</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> fprintf(fp, <span class="stringliteral">"label"</span>);</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> fprintf(fp,<span class="stringliteral">" %d"</span>,model->label[i]);</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> }</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span> </div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span> <span class="keywordflow">if</span>(model->probA) <span class="comment">// regression has probA only</span></div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span> {</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span> fprintf(fp, <span class="stringliteral">"probA"</span>);</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> fprintf(fp,<span class="stringliteral">" %g"</span>,model->probA[i]);</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span> }</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span> <span class="keywordflow">if</span>(model->probB)</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span> {</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> fprintf(fp, <span class="stringliteral">"probB"</span>);</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nr_class*(nr_class-1)/2;i++)</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> fprintf(fp,<span class="stringliteral">" %g"</span>,model->probB[i]);</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span> }</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span> </div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span> <span class="keywordflow">if</span>(model->nSV)</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> {</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span> fprintf(fp, <span class="stringliteral">"nr_sv"</span>);</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span> fprintf(fp,<span class="stringliteral">" %d"</span>,model->nSV[i]);</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> }</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> </div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span> fprintf(fp, <span class="stringliteral">"SV\n"</span>);</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span> <span class="keyword">const</span> <span class="keywordtype">double</span> * <span class="keyword">const</span> *sv_coef = model->sv_coef;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span> <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> * <span class="keyword">const</span> *SV = model->SV;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> </div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<l;i++)</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> {</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j<nr_class-1;j++)</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> fprintf(fp, <span class="stringliteral">"%.16g "</span>,sv_coef[j][i]);</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> </div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span> <span class="keyword">const</span> <a class="code" href="structsvm__node.html">svm_node</a> *p = SV[i];</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span> </div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> <span class="keywordflow">if</span>(param.kernel_type == PRECOMPUTED)</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> fprintf(fp,<span class="stringliteral">"0:%d "</span>,(<span class="keywordtype">int</span>)(p->value));</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span> <span class="keywordflow">while</span>(p->index != -1)</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span> {</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> fprintf(fp,<span class="stringliteral">"%d:%.8g "</span>,p->index,p->value);</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span> p++;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span> }</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span> fprintf(fp, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span> }</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span> </div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> setlocale(LC_ALL, old_locale);</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> free(old_locale);</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> </div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> <span class="keywordflow">if</span> (ferror(fp) != 0 || fclose(fp) != 0) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> <span class="keywordflow">else</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> }</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> </div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> <span class="keyword">static</span> <span class="keywordtype">char</span> *line = NULL;</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> <span class="keyword">static</span> <span class="keywordtype">int</span> max_line_len;</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> </div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span> <span class="keyword">static</span> <span class="keywordtype">char</span>* readline(FILE *input)</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span> {</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span> <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> </div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> <span class="keywordflow">if</span>(fgets(line,max_line_len,input) == NULL)</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span> </div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span> <span class="keywordflow">while</span>(strrchr(line,<span class="charliteral">'\n'</span>) == NULL)</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span> {</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span> max_line_len *= 2;</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> line = (<span class="keywordtype">char</span> *) realloc(line,max_line_len);</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span> len = (int) strlen(line);</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span> <span class="keywordflow">if</span>(fgets(line+len,max_line_len-len,input) == NULL)</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span> }</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> <span class="keywordflow">return</span> line;</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span> }</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span> </div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span> <a class="code" href="structsvm__model.html">svm_model</a> *svm_load_model(<span class="keyword">const</span> <span class="keywordtype">char</span> *model_file_name)</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span> {</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span> FILE *fp = fopen(model_file_name,<span class="stringliteral">"rb"</span>);</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span> <span class="keywordflow">if</span>(fp==NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span> </div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> <span class="keywordtype">char</span> *old_locale = strdup(setlocale(LC_ALL, NULL));</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span> setlocale(LC_ALL, <span class="stringliteral">"C"</span>);</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span> </div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> <span class="comment">// read parameters</span></div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> </div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span> <a class="code" href="structsvm__model.html">svm_model</a> *model = Malloc(<a class="code" href="structsvm__model.html">svm_model</a>,1);</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a>& param = model->param;</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span> model->rho = NULL;</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> model->probA = NULL;</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> model->probB = NULL;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> model->label = NULL;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> model->nSV = NULL;</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> </div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> <span class="keywordtype">char</span> cmd[81];</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span> <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> {</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> fscanf(fp,<span class="stringliteral">"%80s"</span>,cmd);</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span> </div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"svm_type"</span>)==0)</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span> {</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> fscanf(fp,<span class="stringliteral">"%80s"</span>,cmd);</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span> <span class="keywordflow">for</span>(i=0;svm_type_table[i];i++)</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span> {</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span> <span class="keywordflow">if</span>(strcmp(svm_type_table[i],cmd)==0)</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span> {</div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> param.svm_type=i;</div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> }</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span> }</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> <span class="keywordflow">if</span>(svm_type_table[i] == NULL)</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> {</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> fprintf(stderr,<span class="stringliteral">"unknown svm type.\n"</span>);</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> </div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> setlocale(LC_ALL, old_locale);</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span> free(old_locale);</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span> free(model->rho);</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span> free(model->label);</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span> free(model->nSV);</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span> free(model);</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span> }</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span> }</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"kernel_type"</span>)==0)</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span> { </div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span> fscanf(fp,<span class="stringliteral">"%80s"</span>,cmd);</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span> <span class="keywordflow">for</span>(i=0;kernel_type_table[i];i++)</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> {</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span> <span class="keywordflow">if</span>(strcmp(kernel_type_table[i],cmd)==0)</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span> {</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span> param.kernel_type=i;</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span> }</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span> }</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span> <span class="keywordflow">if</span>(kernel_type_table[i] == NULL)</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span> {</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> fprintf(stderr,<span class="stringliteral">"unknown kernel function.\n"</span>);</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> </div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> setlocale(LC_ALL, old_locale);</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> free(old_locale);</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> free(model->rho);</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span> free(model->label);</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span> free(model->nSV);</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span> free(model);</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> }</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> }</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"degree"</span>)==0)</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span> fscanf(fp,<span class="stringliteral">"%d"</span>,¶m.degree);</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"gamma"</span>)==0)</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span> fscanf(fp,<span class="stringliteral">"%lf"</span>,¶m.gamma);</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"coef0"</span>)==0)</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> fscanf(fp,<span class="stringliteral">"%lf"</span>,¶m.coef0);</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"nr_class"</span>)==0)</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span> fscanf(fp,<span class="stringliteral">"%d"</span>,&model->nr_class);</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"total_sv"</span>)==0)</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span> fscanf(fp,<span class="stringliteral">"%d"</span>,&model->l);</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"rho"</span>)==0)</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span> {</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span> <span class="keywordtype">int</span> n = model->nr_class * (model->nr_class-1)/2;</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span> model->rho = Malloc(<span class="keywordtype">double</span>,n);</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<n;i++)</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> fscanf(fp,<span class="stringliteral">"%lf"</span>,&model->rho[i]);</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> }</div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"label"</span>)==0)</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> {</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span> <span class="keywordtype">int</span> n = model->nr_class;</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span> model->label = Malloc(<span class="keywordtype">int</span>,n);</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<n;i++)</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span> fscanf(fp,<span class="stringliteral">"%d"</span>,&model->label[i]);</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span> }</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"probA"</span>)==0)</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> {</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> <span class="keywordtype">int</span> n = model->nr_class * (model->nr_class-1)/2;</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span> model->probA = Malloc(<span class="keywordtype">double</span>,n);</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<n;i++)</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> fscanf(fp,<span class="stringliteral">"%lf"</span>,&model->probA[i]);</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span> }</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"probB"</span>)==0)</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span> {</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span> <span class="keywordtype">int</span> n = model->nr_class * (model->nr_class-1)/2;</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span> model->probB = Malloc(<span class="keywordtype">double</span>,n);</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<n;i++)</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span> fscanf(fp,<span class="stringliteral">"%lf"</span>,&model->probB[i]);</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span> }</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"nr_sv"</span>)==0)</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> {</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span> <span class="keywordtype">int</span> n = model->nr_class;</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span> model->nSV = Malloc(<span class="keywordtype">int</span>,n);</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<n;i++)</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> fscanf(fp,<span class="stringliteral">"%d"</span>,&model->nSV[i]);</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> }</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(cmd,<span class="stringliteral">"SV"</span>)==0)</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> {</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span> <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span> {</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span> <span class="keywordtype">int</span> c = getc(fp);</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span> <span class="keywordflow">if</span>(c==EOF || c==<span class="charliteral">'\n'</span>) <span class="keywordflow">break</span>; </div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> }</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span> }</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span> {</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> fprintf(stderr,<span class="stringliteral">"unknown text in model file: [%s]\n"</span>,cmd);</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span> </div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> setlocale(LC_ALL, old_locale);</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> free(old_locale);</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> free(model->rho);</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> free(model->label);</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> free(model->nSV);</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span> free(model);</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span> }</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> }</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span> </div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span> <span class="comment">// read sv_coef and SV</span></div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> </div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span> <span class="keywordtype">int</span> elements = 0;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span> <span class="keywordtype">long</span> pos = ftell(fp);</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span> </div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> max_line_len = 1024;</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span> line = Malloc(<span class="keywordtype">char</span>,max_line_len);</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span> <span class="keywordtype">char</span> *p,*endptr,*idx,*val;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span> </div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span> <span class="keywordflow">while</span>(readline(fp)!=NULL)</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span> {</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span> p = strtok(line,<span class="stringliteral">":"</span>);</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span> {</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span> p = strtok(NULL,<span class="stringliteral">":"</span>);</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span> <span class="keywordflow">if</span>(p == NULL)</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span> ++elements;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span> }</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span> }</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span> elements += model->l;</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span> </div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span> fseek(fp,pos,SEEK_SET);</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span> </div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> <span class="keywordtype">int</span> m = model->nr_class - 1;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span> <span class="keywordtype">int</span> l = model->l;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span> model->sv_coef = Malloc(<span class="keywordtype">double</span> *,m);</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span> <span class="keywordflow">for</span>(i=0;i<m;i++)</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span> model->sv_coef[i] = Malloc(<span class="keywordtype">double</span>,l);</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span> model->SV = Malloc(<a class="code" href="structsvm__node.html">svm_node</a>*,l);</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span> <a class="code" href="structsvm__node.html">svm_node</a> *x_space = NULL;</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span> <span class="keywordflow">if</span>(l>0) x_space = Malloc(<a class="code" href="structsvm__node.html">svm_node</a>,elements);</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span> </div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span> {</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span> readline(fp);</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span> model->SV[i] = &x_space[j];</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> </div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span> p = strtok(line, <span class="stringliteral">" \t"</span>);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span> model->sv_coef[0][i] = strtod(p,&endptr);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> k=1;k<m;k++)</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> {</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span> p = strtok(NULL, <span class="stringliteral">" \t"</span>);</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> model->sv_coef[k][i] = strtod(p,&endptr);</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span> }</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> </div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> {</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> idx = strtok(NULL, <span class="stringliteral">":"</span>);</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> val = strtok(NULL, <span class="stringliteral">" \t"</span>);</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span> </div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span> <span class="keywordflow">if</span>(val == NULL)</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> x_space[j].index = (int) strtol(idx,&endptr,10);</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span> x_space[j].value = strtod(val,&endptr);</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span> </div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> ++j;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> }</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> x_space[j++].index = -1;</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span> }</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span> free(line);</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> </div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span> setlocale(LC_ALL, old_locale);</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> free(old_locale);</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span> </div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span> <span class="keywordflow">if</span> (ferror(fp) != 0 || fclose(fp) != 0)</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span> </div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> model->free_sv = 1; <span class="comment">// XXX</span></div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span> <span class="keywordflow">return</span> model;</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span> }</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span> </div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> <span class="keywordtype">void</span> svm_free_model_content(<a class="code" href="structsvm__model.html">svm_model</a>* model_ptr)</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> {</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> <span class="keywordflow">if</span>(model_ptr->free_sv && model_ptr->l > 0 && model_ptr->SV != NULL)</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> free((<span class="keywordtype">void</span> *)(model_ptr->SV[0]));</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> <span class="keywordflow">if</span>(model_ptr->sv_coef)</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> {</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i<model_ptr->nr_class-1;i++)</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span> free(model_ptr->sv_coef[i]);</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span> }</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span> </div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> free(model_ptr->SV);</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> model_ptr->SV = NULL;</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> </div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> free(model_ptr->sv_coef);</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span> model_ptr->sv_coef = NULL;</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> </div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> free(model_ptr->rho);</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> model_ptr->rho = NULL;</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> </div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> free(model_ptr->label);</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> model_ptr->label= NULL;</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> </div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> free(model_ptr->probA);</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> model_ptr->probA = NULL;</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> </div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> free(model_ptr->probB);</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> model_ptr->probB= NULL;</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> </div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> free(model_ptr->nSV);</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span> model_ptr->nSV = NULL;</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span> }</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> </div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> <span class="keywordtype">void</span> svm_free_and_destroy_model(<a class="code" href="structsvm__model.html">svm_model</a>** model_ptr_ptr)</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> {</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span> <span class="keywordflow">if</span>(model_ptr_ptr != NULL && *model_ptr_ptr != NULL)</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> {</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> svm_free_model_content(*model_ptr_ptr);</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> free(*model_ptr_ptr);</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> *model_ptr_ptr = NULL;</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span> }</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> }</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span> </div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> <span class="keywordtype">void</span> svm_destroy_param(<a class="code" href="structsvm__parameter.html">svm_parameter</a>* param)</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> {</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> free(param->weight_label);</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> free(param->weight);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> }</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> </div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *svm_check_parameter(<span class="keyword">const</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param)</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> {</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span> <span class="comment">// svm_type</span></div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span> </div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span> <span class="keywordtype">int</span> svm_type = param->svm_type;</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span> <span class="keywordflow">if</span>(svm_type != C_SVC &&</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span> svm_type != NU_SVC &&</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span> svm_type != ONE_CLASS &&</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span> svm_type != EPSILON_SVR &&</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> svm_type != NU_SVR)</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> <span class="keywordflow">return</span> <span class="stringliteral">"unknown svm type"</span>;</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span> </div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> <span class="comment">// kernel_type, degree</span></div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> </div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span> <span class="keywordtype">int</span> kernel_type = param->kernel_type;</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span> <span class="keywordflow">if</span>(kernel_type != LINEAR &&</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> kernel_type != POLY &&</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> kernel_type != RBF &&</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span> kernel_type != SIGMOID &&</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span> kernel_type != PRECOMPUTED)</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span> <span class="keywordflow">return</span> <span class="stringliteral">"unknown kernel type"</span>;</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span> </div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span> <span class="keywordflow">if</span>(param->gamma < 0)</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> <span class="keywordflow">return</span> <span class="stringliteral">"gamma < 0"</span>;</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span> </div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> <span class="keywordflow">if</span>(param->degree < 0)</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> <span class="keywordflow">return</span> <span class="stringliteral">"degree of polynomial kernel < 0"</span>;</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> </div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span> <span class="comment">// cache_size,eps,C,nu,p,shrinking</span></div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> </div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> <span class="keywordflow">if</span>(param->cache_size <= 0)</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> <span class="keywordflow">return</span> <span class="stringliteral">"cache_size <= 0"</span>;</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span> </div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span> <span class="keywordflow">if</span>(param->eps <= 0)</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span> <span class="keywordflow">return</span> <span class="stringliteral">"eps <= 0"</span>;</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> </div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> <span class="keywordflow">if</span>(svm_type == C_SVC ||</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> svm_type == EPSILON_SVR ||</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> svm_type == NU_SVR)</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> <span class="keywordflow">if</span>(param->C <= 0)</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> <span class="keywordflow">return</span> <span class="stringliteral">"C <= 0"</span>;</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> </div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span> <span class="keywordflow">if</span>(svm_type == NU_SVC ||</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> svm_type == ONE_CLASS ||</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> svm_type == NU_SVR)</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span> <span class="keywordflow">if</span>(param->nu <= 0 || param->nu > 1)</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="keywordflow">return</span> <span class="stringliteral">"nu <= 0 or nu > 1"</span>;</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> </div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="keywordflow">if</span>(svm_type == EPSILON_SVR)</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> <span class="keywordflow">if</span>(param->p < 0)</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> <span class="keywordflow">return</span> <span class="stringliteral">"p < 0"</span>;</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> </div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> <span class="keywordflow">if</span>(param->shrinking != 0 &&</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> param->shrinking != 1)</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> <span class="keywordflow">return</span> <span class="stringliteral">"shrinking != 0 and shrinking != 1"</span>;</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> </div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span> <span class="keywordflow">if</span>(param->probability != 0 &&</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span> param->probability != 1)</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span> <span class="keywordflow">return</span> <span class="stringliteral">"probability != 0 and probability != 1"</span>;</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span> </div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> <span class="keywordflow">if</span>(param->probability == 1 &&</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span> svm_type == ONE_CLASS)</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> <span class="keywordflow">return</span> <span class="stringliteral">"one-class SVM probability output not supported yet"</span>;</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span> </div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span> </div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> <span class="comment">// check whether nu-svc is feasible</span></div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> </div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> <span class="keywordflow">if</span>(svm_type == NU_SVC)</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> {</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> <span class="keywordtype">int</span> l = prob->l;</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> <span class="keywordtype">int</span> max_nr_class = 16;</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span> <span class="keywordtype">int</span> nr_class = 0;</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span> <span class="keywordtype">int</span> *label = Malloc(<span class="keywordtype">int</span>,max_nr_class);</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span> <span class="keywordtype">int</span> *count = Malloc(<span class="keywordtype">int</span>,max_nr_class);</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> </div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> <span class="keywordflow">for</span>(i=0;i<l;i++)</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> {</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> <span class="keywordtype">int</span> this_label = (int)prob->y[i];</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span> <span class="keywordflow">for</span>(j=0;j<nr_class;j++)</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> <span class="keywordflow">if</span>(this_label == label[j])</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> {</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span> ++count[j];</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> }</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> <span class="keywordflow">if</span>(j == nr_class)</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span> {</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span> <span class="keywordflow">if</span>(nr_class == max_nr_class)</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span> {</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span> max_nr_class *= 2;</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> label = (<span class="keywordtype">int</span> *)realloc(label,max_nr_class*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span> count = (<span class="keywordtype">int</span> *)realloc(count,max_nr_class*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span> }</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span> label[nr_class] = this_label;</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span> count[nr_class] = 1;</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span> ++nr_class;</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span> }</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span> }</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> </div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span> <span class="keywordflow">for</span>(i=0;i<nr_class;i++)</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span> {</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> <span class="keywordtype">int</span> n1 = count[i];</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j<nr_class;j++)</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span> {</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span> <span class="keywordtype">int</span> n2 = count[j];</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> <span class="keywordflow">if</span>(param->nu*(n1+n2)/2 > min(n1,n2))</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span> {</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> free(label);</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span> free(count);</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span> <span class="keywordflow">return</span> <span class="stringliteral">"specified nu is infeasible"</span>;</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span> }</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span> }</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span> }</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span> free(label);</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> free(count);</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> }</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> </div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span> }</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> </div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span> <span class="keywordtype">int</span> svm_check_probability_model(<span class="keyword">const</span> <a class="code" href="structsvm__model.html">svm_model</a> *model)</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> {</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span> <span class="keywordflow">return</span> ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) &&</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span> model->probA!=NULL && model->probB!=NULL) ||</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span> ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) &&</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span> model->probA!=NULL);</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span> }</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span> </div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span> <span class="keywordtype">void</span> svm_set_print_string_function(<span class="keywordtype">void</span> (*print_func)(<span class="keyword">const</span> <span class="keywordtype">char</span> *))</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span> {</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span> <span class="keywordflow">if</span>(print_func == NULL)</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> svm_print_string = &print_string_stdout;</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span> svm_print_string = print_func;</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> }</div>
+<div class="ttc" id="classONE__CLASS__Q_html"><div class="ttname"><a href="classONE__CLASS__Q.html">ONE_CLASS_Q</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l01323">svm.cpp:1323</a></div></div>
+<div class="ttc" id="classQMatrix_html"><div class="ttname"><a href="classQMatrix.html">QMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l00196">svm.cpp:196</a></div></div>
+<div class="ttc" id="structSolver_1_1SolutionInfo_html"><div class="ttname"><a href="structSolver_1_1SolutionInfo.html">Solver::SolutionInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l00400">svm.cpp:400</a></div></div>
+<div class="ttc" id="structsvm__parameter_html"><div class="ttname"><a href="structsvm__parameter.html">svm_parameter</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00028">svm.h:28</a></div></div>
+<div class="ttc" id="structsvm__model_html"><div class="ttname"><a href="structsvm__model.html">svm_model</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00053">svm.h:53</a></div></div>
+<div class="ttc" id="classCache_html"><div class="ttname"><a href="classCache.html">Cache</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l00069">svm.cpp:69</a></div></div>
+<div class="ttc" id="classSVR__Q_html"><div class="ttname"><a href="classSVR__Q.html">SVR_Q</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l01369">svm.cpp:1369</a></div></div>
+<div class="ttc" id="structdecision__function_html"><div class="ttname"><a href="structdecision__function.html">decision_function</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l01652">svm.cpp:1652</a></div></div>
+<div class="ttc" id="classSVC__Q_html"><div class="ttname"><a href="classSVC__Q.html">SVC_Q</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l01273">svm.cpp:1273</a></div></div>
+<div class="ttc" id="classSolver_html"><div class="ttname"><a href="classSolver.html">Solver</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l00395">svm.cpp:395</a></div></div>
+<div class="ttc" id="classKernel_html"><div class="ttname"><a href="classKernel.html">Kernel</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l00204">svm.cpp:204</a></div></div>
+<div class="ttc" id="structsvm__node_html"><div class="ttname"><a href="structsvm__node.html">svm_node</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00012">svm.h:12</a></div></div>
+<div class="ttc" id="classSolver__NU_html"><div class="ttname"><a href="classSolver__NU.html">Solver_NU</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8cpp_source.html#l01016">svm.cpp:1016</a></div></div>
+<div class="ttc" id="structsvm__problem_html"><div class="ttname"><a href="structsvm__problem.html">svm_problem</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00018">svm.h:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/svm_8h_source.html b/doc/html/svm_8h_source.html
new file mode 100644
index 0000000..b309cf1
--- /dev/null
+++ b/doc/html/svm_8h_source.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/src/algorithms/svm.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e6df591b0639d4c4807ef64d058833e2.html">algorithms</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">svm.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef _LIBSVM_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"></span><span class="preprocessor">#define _LIBSVM_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#define LIBSVM_VERSION 312</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">extern</span> <span class="keywordtype">int</span> libsvm_version;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="structsvm__node.html"> 12</a></span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">int</span> index;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> };</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="structsvm__problem.html"> 18</a></span> <span class="keyword">struct </span><a class="code" href="structsvm__problem.html">svm_problem</a></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keywordtype">double</span> *y;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> **x;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> };</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">enum</span> { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; <span class="comment">/* svm_type */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">enum</span> { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; <span class="comment">/* kernel_type */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="structsvm__parameter.html"> 28</a></span> <span class="keyword">struct </span><a class="code" href="structsvm__parameter.html">svm_parameter</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> svm_type;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">int</span> kernel_type;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> degree; <span class="comment">/* for poly */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">double</span> gamma; <span class="comment">/* for poly/rbf/sigmoid */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">double</span> coef0; <span class="comment">/* for poly/sigmoid */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/* these are for training only */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">double</span> cache_size; <span class="comment">/* in MB */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">double</span> eps; <span class="comment">/* stopping criteria */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">double</span> C; <span class="comment">/* for C_SVC, EPSILON_SVR and NU_SVR */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> nr_weight; <span class="comment">/* for C_SVC */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> *weight_label; <span class="comment">/* for C_SVC */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span>* weight; <span class="comment">/* for C_SVC */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> nu; <span class="comment">/* for NU_SVC, ONE_CLASS, and NU_SVR */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> p; <span class="comment">/* for EPSILON_SVR */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> shrinking; <span class="comment">/* use the shrinking heuristics */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> probability; <span class="comment">/* do probability estimates */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">bool</span> verbose;<span class="comment">//pk</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> };</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// svm_model</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structsvm__model.html"> 53</a></span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">struct </span><a class="code" href="structsvm__parameter.html">svm_parameter</a> param; <span class="comment">/* parameter */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> nr_class; <span class="comment">/* number of classes, = 2 in regression/one class svm */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> l; <span class="comment">/* total #SV */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">struct </span><a class="code" href="structsvm__node.html">svm_node</a> **SV; <span class="comment">/* SVs (SV[l]) */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> **sv_coef; <span class="comment">/* coefficients for SVs in decision functions (sv_coef[k-1][l]) */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> *rho; <span class="comment">/* constants in decision functions (rho[k*(k-1)/2]) */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">double</span> *probA; <span class="comment">/* pariwise probability information */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> *probB;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">/* for classification only */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">int</span> *label; <span class="comment">/* label of each class (label[k]) */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">int</span> *nSV; <span class="comment">/* number of SVs for each class (nSV[k]) */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* nSV[0] + nSV[1] + ... + nSV[k-1] = l */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* XXX */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">int</span> free_sv; <span class="comment">/* 1 if svm_model is created by svm_load_model*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* 0 if svm_model is created by svm_train */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> };</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a> *svm_train(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> svm_cross_validation(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param, <span class="keywordtype">int</span> nr_fold, <span class="keywordty [...]
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> svm_save_model(<span class="keyword">const</span> <span class="keywordtype">char</span> *model_file_name, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">struct </span><a class="code" href="structsvm__model.html">svm_model</a> *svm_load_model(<span class="keyword">const</span> <span class="keywordtype">char</span> *model_file_name);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> svm_get_svm_type(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">int</span> svm_get_nr_class(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> svm_get_labels(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keywordtype">int</span> *label);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">double</span> svm_get_svr_probability(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">double</span> svm_predict_values(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keywordtype">double</span>* dec_values);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">double</span> svm_predict(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a> *x);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">double</span> svm_predict_probability(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__node.html">svm_node</a> *x, <span class="keywordtype">double</span>* prob_estimates);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">void</span> svm_free_model_content(<span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model_ptr);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> svm_free_and_destroy_model(<span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> **model_ptr_ptr);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> svm_destroy_param(<span class="keyword">struct</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *svm_check_parameter(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__problem.html">svm_problem</a> *prob, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__parameter.html">svm_parameter</a> *param);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span> svm_check_probability_model(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structsvm__model.html">svm_model</a> *model);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> svm_set_print_string_function(<span class="keywordtype">void</span> (*print_func)(<span class="keyword">const</span> <span class="keywordtype">char</span> *));</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#endif </span><span class="comment">/* _LIBSVM_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="structsvm__parameter_html"><div class="ttname"><a href="structsvm__parameter.html">svm_parameter</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00028">svm.h:28</a></div></div>
+<div class="ttc" id="structsvm__model_html"><div class="ttname"><a href="structsvm__model.html">svm_model</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00053">svm.h:53</a></div></div>
+<div class="ttc" id="structsvm__node_html"><div class="ttname"><a href="structsvm__node.html">svm_node</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00012">svm.h:12</a></div></div>
+<div class="ttc" id="structsvm__problem_html"><div class="ttname"><a href="structsvm__problem.html">svm_problem</a></div><div class="ttdef"><b>Definition:</b> <a href="svm_8h_source.html#l00018">svm.h:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/html/sync_off.png b/doc/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
Binary files /dev/null and b/doc/html/sync_off.png differ
diff --git a/doc/html/sync_on.png b/doc/html/sync_on.png
new file mode 100644
index 0000000..e08320f
Binary files /dev/null and b/doc/html/sync_on.png differ
diff --git a/doc/html/tab_a.png b/doc/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
Binary files /dev/null and b/doc/html/tab_a.png differ
diff --git a/doc/html/tab_b.png b/doc/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
Binary files /dev/null and b/doc/html/tab_b.png differ
diff --git a/doc/html/tab_h.png b/doc/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
Binary files /dev/null and b/doc/html/tab_h.png differ
diff --git a/doc/html/tab_s.png b/doc/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
Binary files /dev/null and b/doc/html/tab_s.png differ
diff --git a/doc/html/tabs.css b/doc/html/tabs.css
new file mode 100644
index 0000000..9cf578f
--- /dev/null
+++ b/doc/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/doc/html/vis__studio_2config_8h_source.html b/doc/html/vis__studio_2config_8h_source.html
new file mode 100644
index 0000000..dfab18d
--- /dev/null
+++ b/doc/html/vis__studio_2config_8h_source.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>pktools: /home/kempenep/pktools/vis_studio/config.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">pktools
+ <span id="projectnumber">2.6.3</span>
+ </div>
+ <div id="projectbrief">Processing Kernel for geospatial data</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="pages.html"><span>Related Pages</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_457de909e3893805a4d2d0b8c0742bd8.html">vis_studio</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">config.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* config.h. Generated from config.h.in by configure. */</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">/* config.h.in. Generated from configure.ac by autoheader. */</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/* Define to 1 if you have the <dlfcn.h> header file. */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#define HAVE_DLFCN_H 1</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">/* Define to 1 if GDAL library are available */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#define HAVE_GDAL 1</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">/* Define to 1 if you have the <gdal.h> header file. */</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">/* #undef HAVE_GDAL_H */</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">/* Define to 1 if GDAL library includes OGR support */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#define HAVE_GDAL_OGR 1</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">/* Define to 1 if you have the <inttypes.h> header file. */</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#define HAVE_INTTYPES_H 1</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* Define to 1 if you have the <iostream> header file. */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#define HAVE_IOSTREAM 1</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">/* Define to 1 if you have the <memory.h> header file. */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#define HAVE_MEMORY_H 1</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* Define to 1 if you have the <stdint.h> header file. */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#define HAVE_STDINT_H 1</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* Define to 1 if you have the <stdlib.h> header file. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#define HAVE_STDLIB_H 1</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* Define to 1 if you have the <string> header file. */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#define HAVE_STRING 1</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* Define to 1 if you have the <strings.h> header file. */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define HAVE_STRINGS_H 1</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* Define to 1 if you have the <string.h> header file. */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define HAVE_STRING_H 1</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* Define to 1 if you have the <sys/stat.h> header file. */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#define HAVE_SYS_STAT_H 1</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/* Define to 1 if you have the <sys/types.h> header file. */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define HAVE_SYS_TYPES_H 1</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* Define to 1 if you have the <unistd.h> header file. */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define HAVE_UNISTD_H 1</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* Define to the sub-directory in which libtool stores uninstalled libraries.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#define LT_OBJDIR ".libs/"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* Name of package */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#define PACKAGE "pktools"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* Define to the address where bug reports for this package should be sent. */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#define PACKAGE_BUGREPORT "kempenep at gmail.com"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* Define to the full name of this package. */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#define PACKAGE_NAME "pktools"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* Define to the full name and version of this package. */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#define PACKAGE_STRING "pktools 2.6.3"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* Define to the one symbol short name of this package. */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#define PACKAGE_TARNAME "pktools"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* Define to the home page for this package. */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#define PACKAGE_URL ""</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* Define to the version of this package. */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#define PACKAGE_VERSION "2.6.3"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* Define to 1 if you have the ANSI C header files. */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#define STDC_HEADERS 1</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">/* Version number of package */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#define VERSION "2.6.3"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">/* Define to `unsigned int' if <sys/types.h> does not define. */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">/* #undef size_t */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.4-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Tue Jun 23 2015 17:09:36 for pktools by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-46952639-1', 'nongnu.org');
+ ga('send', 'pageview');
+</script>
+</body>
+</html>
diff --git a/doc/installation_linux.dox b/doc/installation_linux.dox
new file mode 100644
index 0000000..56ba035
--- /dev/null
+++ b/doc/installation_linux.dox
@@ -0,0 +1,145 @@
+\section installation_linux Installation on Linux
+
+\subsection install_debian Installation for Debian Linux (via repository)
+
+A <a href="https://packages.debian.org/source/sid/pktools">binary package</a> of pktools for Debian is maintained by Francesco Paolo Lovergine and available in the repository. You can install it using the advanced package tool (apt):
+
+\code
+sudo apt-get install pktools
+\endcode
+
+The version in the repository might not be the latest available (please check the <a href="https://qa.debian.org/developer.php?login=pkg-grass-devel%40lists.alioth.debian.org">packages overview</a>). The latest version of pktools can always be installed via the \ref install_ubuntu "installation script" or from the source code using a \ref install_manual "manual" installation.
+
+\subsection install_ubuntu Installation for Ubuntu (Debian based) Linux distributions (from source code via automatic script)
+
+Users working with Debian based distributions (e.g., Ubuntu) can download <a href="http://download.savannah.gnu.org/releases/pktools/install_pktools.sh">install_pktools.sh</a>. This script will automatically download the latest release of pktools and dependencies. You need an internet connection when running the script (as root or sudo):
+
+\code
+sudo bash install_pktools.sh
+\endcode
+
+\subsection install_manual Manual installation for (all Linux distributions)
+
+For a manual installation, download the <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest.tar.gz">latest</a> release from <a href="http://download.savannah.gnu.org/releases/pktools/">Savannah</a>
+
+Optionally: check the release <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest.md5">md5sum</a> to ensure originality.
+
+\code
+md5sum pktools-latest.tar.gz
+\endcode
+
+The result should be identical to the content of the corresponding md5 file you downloaded.
+
+Unpack the tar zip file
+
+\code
+tar xzvf pktools-latest.tar.gz
+cd pktools-*
+\endcode
+
+Basic installation (please refer to INSTALL file for more advanced configuration)
+\code
+./configure
+make
+sudo make install
+sudo ldconfig
+\endcode
+
+\subsubsection pktools_installation_required Required dependences
+
+packages to install before pktools
+ - g++
+ - make
+ - libgdal-dev (see also http://trac.osgeo.org/gdal/wiki/BuildingOnUnix)
+ - libgsl0-dev (see also http://www.gnu.org/software/gsl/)
+ - libarmadillo-dev (see also http://arma.sourceforge.net/download.html)
+
+ Example on how to install required packages in Debian based system (using apt-get):
+ - sudo apt-get install g++ make libgdal-dev libgsl0-dev libarmadillo-dev
+
+\subsubsection pktools_installation_optional Optional dependences
+
+<b>To enable program \ref pkoptsvm</b>
+
+ Install additional package
+
+ - libnlopt-dev (see also http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation )
+
+ Example on how to install required packages in Debian based system (using apt-get):
+
+ \code
+ sudo apt-get install libnlopt-dev
+ \endcode
+
+ Note: currently, the repository seems not to include this package anymore and manual installation is required (see also http://ab-initio.mit.edu/wiki/index.php/NLopt#Download_and_installation)
+
+ - Install pktools with with extra configuration option --enable-nlopt:
+
+ \code
+ ./configure --enable-nlopt
+ make
+ sudo make install
+ sudo ldconfig
+ \endcode
+
+
+<b>To enable programs \ref pkann and \ref pkfsann</b>
+
+ Install package
+
+ - libfann-dev (see also http://leenissen.dk/fann/wp/download/)
+
+ Example on how to install required packages in Debian based system (using apt-get):
+
+ \code
+ sudo apt-get install libfann-dev
+ \endcode
+
+ Install pktools with extra configuration option --libfann-dev:
+
+ \code
+ ./configure --enable-fann
+ make
+ sudo make install
+ sudo ldconfig
+ \endcode
+
+<b>To enable program \ref pklas2img</b>
+
+ Install additional packages:
+
+ - libboost-dev (see also http://www.boost.org/)
+ - liblas1 (from Mateusz Loskot, see also http://www.liblas.org/tutorial/cpp.html)
+ - liblas-dev
+ - python-liblas
+ - liblas2
+ - liblas-c2
+ - liblas-c-dev
+
+ Example on how to install required packages in Debian based system (using apt-get):
+
+ - first add the following two lines to /etc/apt/sources.list (replace <codename> with what you get from lsb_release -c)
+
+ \code
+ deb http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu <codename> main
+ deb-src http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu <codename> main
+ \endcode
+
+ - then install extra packages:
+
+ \code
+ sudo apt-get install libboost-dev liblas-dev liblas-c-dev liblas1 liblas2 liblas-c2 python-liblas
+ \endcode
+
+ Or install manually as explained in http://www.liblas.org/compilation.html#using-unix-makefiles-on-linux
+
+ ! Note that if you want support for compressed las format (LAZ), you need to install laszip first (http://www.laszip.org) and install liblas manually
+
+ - Install pktools with with extra configuration option --enable-las:
+
+ \code
+ ./configure --enable-las
+ make
+ sudo make install
+ sudo ldconfig
+ \endcode
diff --git a/doc/installation_windows.dox b/doc/installation_windows.dox
new file mode 100644
index 0000000..63971ce
--- /dev/null
+++ b/doc/installation_windows.dox
@@ -0,0 +1,24 @@
+\section installation_windows Installation on Windows machines
+
+\subsection installation_windows_dependencies Dependencies: OSGeo4W
+
+Download and install the <a href="http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe">32bit</a> or <a href="http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe">64bit</a> version of <a href="osgeo4w.osgeo.org">OSGeo4W</a>. The basic installation with GDAL contains all dependencies that are required for pktools.
+
+\subsection Installation_windows_pktools pktools
+
+The latest version of pktools for Windows is available for <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest_win32.zip">32bit</a> and <a href="http://download.savannah.gnu.org/releases/pktools/pktools-latest_win64.zip">64bit</a> architectures from the <a href="http://download.savannah.gnu.org/releases/pktools">download</a> ftp server.
+
+Unzip the archives to your local hard drive.
+
+\subsection Installation_windows_cli Command line interface
+
+The pktools utilities can be run from the command line using a command prompt window (from the Start button, click All Programs, Accessories, and then Command Prompt). First add the bin directory extracted from the pktools zip archive to the environment variable PATH (from the Start button, click on control panel, then System, Advanced system settings, select Environment Variables and edit PATH)
+
+\subsection Installation_windows_qgis QGIS plugin
+
+A selection of the pktools utiltities can be run from within QGIS, via the Processing Toolbox. First install the pktools plugin via Plugins, Manage and Install Plugins...
+
+Currently, the pktools <a href="http://plugins.qgis.org/plugins/pktools/">plugin</a> is experimental, so do tick the experimental plugins under Settings. Then set the appropriate path of the pktools bin folder via Processing Options, Providers, pktools, pktools folder. Click OK and open the Processing Toolbox. The pktools utilities should appear when the Advanced interface is selected.
+
+\subsection Uninstall_windows Older versions of pktools
+Please make sure the latest version of pktools is always installed. Changes with respect to the previous versions can be checked in the text file <a href="http://git.savannah.gnu.org/cgit/pktools.git/tree/ChangeLog">Changelog</a>. Older versions of pktools were installed with a setup exe file. They should be uninstalled first via Programs and Features in Control Panel.
diff --git a/doc/logo.odg b/doc/logo.odg
new file mode 100644
index 0000000..55d33d4
Binary files /dev/null and b/doc/logo.odg differ
diff --git a/doc/logo.png b/doc/logo.png
new file mode 100644
index 0000000..d0b8e2e
Binary files /dev/null and b/doc/logo.png differ
diff --git a/doc/mainpage.dox b/doc/mainpage.dox
new file mode 100644
index 0000000..eaace10
--- /dev/null
+++ b/doc/mainpage.dox
@@ -0,0 +1,53 @@
+\mainpage
+
+ - \ref pktools_introduction "Introduction"
+ - \ref pktools_license "License"
+ - \ref pktools_download "Download"
+ - \ref pktools_refer "How to refer"
+ - \ref pktools_installation "Installation"
+ - \ref available_tools "Available Tools"
+ - \ref pktools_bugs "Found a bug or need a change?"
+
+\section pktools_introduction Introduction
+
+pktools is a collection of programs written in C++ for image processing with a focus on remote sensing applications. It relies on the Geospatial Data Abstraction Library (GDAL, http://www.gdal.org) and OGR.
+
+All utilities in pktools use command line options and have a built in help
+
+- use the `-h` option to get help
+- pktools ALWAYS use -i for input and -o for output (unlike GDAL utilities that commonly use last argument as output and second but last argument as input)
+
+Check the code <a href="https://www.openhub.net/p/pktools">statistics</a>
+
+\section pktools_license License
+
+pktools is written by Pieter Kempeneers and released under the GNU General Public License version3
+
+See http://www.gnu.org/licenses for more details
+
+\section pktools_download Download
+
+You can <a href="http://download.savannah.gnu.org/releases/pktools/">download</a> the latest release from <a href="https://savannah.nongnu.org/projects/pktools">Savannah</a>
+
+Or you can get a copy from the Git repository
+
+~~~
+git clone git://git.savannah.nongnu.org/pktools.git
+~~~
+
+\section pktools_refer How to refer
+
+Please refer to pktools as: http://pktools.nongnu.org (Pieter Kempeneers)
+
+Or use the following reference to the book on <a href="http://www.springer.com/earth+sciences+and+geography/earth+system+sciences/book/978-3-319-01823-2">Open Source Geospatial Tools</a>
+
+contact: kempenep at gmail.com
+
+\section pktools_installation Installation
+
+Installation for \ref installation_linux "Linux"
+
+Installation for \ref installation_windows "Windows"
+
+\section pktools_bugs Bug reports and change requests
+Please write a <a href="https://savannah.nongnu.org/bugs/?func=additem&group=pktools">ticket</a> in savannah to report bugs and request changes. You will automatically be informed about the ticket status and this helps me to keep track of the bugs/changes.
diff --git a/ltmain.sh b/ltmain.sh
index b9205ee..a356aca 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
# compiler: $LTCC
# compiler flags: $LTCFLAGS
# linker: $LD (gnu? $with_gnu_ld)
-# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.2ubuntu1
+# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
# automake: $automake_version
# autoconf: $autoconf_version
#
@@ -80,7 +80,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.2ubuntu1"
+VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1"
TIMESTAMP=""
package_revision=1.3337
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 02b4bbe..d7c043f 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1312,7 +1312,7 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
@@ -1333,7 +1333,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
;;
esac
;;
- ppc64-*linux*|powerpc64-*linux*)
+ powerpc64le-*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
@@ -1352,7 +1355,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
- ppc*-*linux*|powerpc*-*linux*)
+ powerpcle-*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
diff --git a/src/algorithms/ConfusionMatrix.cc b/src/algorithms/ConfusionMatrix.cc
index f7ef7a3..4091fce 100644
--- a/src/algorithms/ConfusionMatrix.cc
+++ b/src/algorithms/ConfusionMatrix.cc
@@ -21,6 +21,8 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <iostream>
#include <numeric>
+using namespace confusionmatrix;
+
bool compareClass(const std::string& string1, const std::string& string2){
int int1=string2type<int>(string1);
int int2=string2type<int>(string2);
@@ -28,7 +30,7 @@ bool compareClass(const std::string& string1, const std::string& string2){
};
ConfusionMatrix::ConfusionMatrix()
- : m_classes(),m_results()
+ : m_classes(),m_results(),m_se95(true),m_format(ASCII)
{
}
diff --git a/src/algorithms/ConfusionMatrix.h b/src/algorithms/ConfusionMatrix.h
index db11864..d3367ec 100644
--- a/src/algorithms/ConfusionMatrix.h
+++ b/src/algorithms/ConfusionMatrix.h
@@ -25,6 +25,10 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Vector2d.h"
#include "base/Optionpk.h"
+namespace confusionmatrix
+{
+ enum CM_FORMAT { ASCII = 0, LATEX = 1, HTML = 2 };
+
class ConfusionMatrix{
public:
ConfusionMatrix();
@@ -77,22 +81,118 @@ public:
return ConfusionMatrix(*this)+=cm;
}
void sortClassNames();
+
+ void reportSE95(bool doReport) {m_se95=doReport;};
+ void setFormat(const CM_FORMAT& theFormat) {m_format=theFormat;};
+ void setFormat(const std::string theFormat) {m_format=getFormat(theFormat);};
+ CM_FORMAT getFormat() const {return m_format;};
+
+ static const CM_FORMAT getFormat(const std::string theFormat){
+ if(theFormat=="ascii") return(ASCII);
+ else if(theFormat=="latex") return(LATEX);
+ else{
+ std::string errorString="Format not supported: ";
+ errorString+=theFormat;
+ errorString+=" use ascii or latex";
+ throw(errorString);
+ }
+ };
+
friend std::ostream& operator<<(std::ostream& os, const ConfusionMatrix &cm){
- for(int iclass=0;iclass<cm.nClasses();++iclass)
- os << "\t" << cm.m_classes[iclass];
+ std::ostringstream streamLine;
+ /* streamosclass << iclass; */
+ /* m_classes[iclass]=osclass.str(); */
+
+ std::string fieldSeparator=" ";
+ std::string lineSeparator="";
+ std::string mathMode="";
+ switch(cm.getFormat()){
+ case(LATEX):
+ fieldSeparator=" & ";
+ lineSeparator="\\\\";
+ mathMode="$";
+ break;
+ case(ASCII):
+ default:
+ fieldSeparator="\t";
+ lineSeparator="";
+ mathMode="";
+ break;
+ }
+
+ double se95_ua=0;
+ double se95_pa=0;
+ double se95_oa=0;
+ double dua=0;
+ double dpa=0;
+ double doa=0;
+
+ doa = cm.oa(&se95_oa);
+
+ if(cm.getFormat()==LATEX){
+ os << "\\documentclass{article}" << std::endl;
+ os << "\\begin{document}" << std::endl;
+ }
+ os << "Kappa = " << mathMode << cm.kappa() << mathMode ;
+ os << ", Overall Acc. = " << mathMode << 100.0*cm.oa() << mathMode ;
+ if(cm.m_se95)
+ os << " (" << mathMode << se95_oa << mathMode << ")";
+ os << std::endl;
os << std::endl;
+ if(cm.getFormat()==LATEX){
+ os << "\\begin{tabular}{@{}l";
+ for(int iclass=0;iclass<cm.nClasses();++iclass)
+ os << "l";
+ os << "}" << std::endl;
+ os << "\\hline" << std::endl;
+ }
+
+ os << "Class";
+ for(int iclass=0;iclass<cm.nClasses();++iclass)
+ os << fieldSeparator << cm.m_classes[iclass];
+ os << lineSeparator << std::endl;
+ if(cm.getFormat()==LATEX)
+ os << "\\hline" << std::endl;
assert(cm.m_classes.size()==cm.m_results.size());
for(int irow=0;irow<cm.m_results.size();++irow){
os << cm.m_classes[irow];
for(int icol=0;icol<cm.m_results[irow].size();++icol)
- os << "\t" << cm.m_results[irow][icol];
+ os << fieldSeparator << cm.m_results[irow][icol];
+ os << lineSeparator<< std::endl;
+ }
+ if(cm.getFormat()==LATEX){
+ os << "\\hline" << std::endl;
+ }
+ else
os << std::endl;
+
+ os << "User' Acc.";
+ for(int iclass=0;iclass<cm.nClasses();++iclass){
+ dua=cm.ua_pct(cm.m_classes[iclass],&se95_ua);
+ os << fieldSeparator << dua;
+ if(cm.m_se95)
+ os << " (" << se95_ua << ")";
+ }
+ os << lineSeparator<< std::endl;
+ os << "Prod. Acc.";
+ for(int iclass=0;iclass<cm.nClasses();++iclass){
+ dpa=cm.pa_pct(cm.m_classes[iclass],&se95_ua);
+ os << fieldSeparator << dpa;
+ if(cm.m_se95)
+ os << " (" << se95_pa << ")";
+ }
+ os << lineSeparator<< std::endl;
+ if(cm.getFormat()==LATEX){
+ os << "\\end{tabular}" << std::endl;
+ os << "\\end{document}" << std::endl;
}
return os;
};
private:
std::vector<std::string> m_classes;
Vector2d<double> m_results;
+ CM_FORMAT m_format;
+ bool m_se95;
};
-
+}
#endif /* _CONFUSIONMATRIX_H_ */
diff --git a/src/algorithms/CostFactory.h b/src/algorithms/CostFactory.h
index 441279e..2cbc51b 100644
--- a/src/algorithms/CostFactory.h
+++ b/src/algorithms/CostFactory.h
@@ -49,7 +49,7 @@ public:
virtual double getCost(const std::vector<Vector2d<float> > &trainingFeatures)=0;
protected:
- ConfusionMatrix m_cm;
+ confusionmatrix::ConfusionMatrix m_cm;
std::map<std::string,short> m_classValueMap;
std::vector<std::string> m_nameVector;
std::vector<unsigned int> m_nctraining;
diff --git a/src/algorithms/FeatureSelector.h b/src/algorithms/FeatureSelector.h
index 52959d7..5072ebd 100644
--- a/src/algorithms/FeatureSelector.h
+++ b/src/algorithms/FeatureSelector.h
@@ -37,7 +37,7 @@ class FeatureSelector
public:
FeatureSelector(){};
~FeatureSelector(){};
- template<class T> double forward(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures, short verbose=0);
+ template<class T> double forward(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, short verbose=0);
template<class T> double backward(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int minFeatures, short verbose=0);
template<class T> double floating(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, double epsilon=0.001, short verbose=0);
template<class T> double bruteForce(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, short verbose=0);
@@ -45,11 +45,11 @@ class FeatureSelector
private:
template<class T> double addFeature(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, short verbose=0);
template<class T> double removeFeature(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int& r, short verbose=0);
- template<class T> double forwardUnivariate(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures, short verbose=0);
+ template<class T> double forwardUnivariate(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, short verbose=0);
};
//sequential forward selection Univariate (N single best features)
-template<class T> double FeatureSelector::forwardUnivariate(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, short verbose){
+template<class T> double FeatureSelector::forwardUnivariate(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures, short verbose){
int maxLevels=v[0][0].size();
if(!maxFeatures)
maxFeatures=maxLevels;
@@ -108,7 +108,7 @@ template<class T> double FeatureSelector::forwardUnivariate(std::vector< Vector2
}
//sequential forward selection Multivariate (Combination of N best features)
-template<class T> double FeatureSelector::forward(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures=0, short verbose){
+template<class T> double FeatureSelector::forward(std::vector< Vector2d<T> >& v, CostFactory& theCostFactory, std::list<int>& subset, int maxFeatures, short verbose){
//Select feature with the best value (get maximal cost for 1 feature)
double maxCost=0;
int maxLevels=v[0][0].size();
diff --git a/src/algorithms/Filter.cc b/src/algorithms/Filter.cc
index 150b59a..958c5a0 100644
--- a/src/algorithms/Filter.cc
+++ b/src/algorithms/Filter.cc
@@ -403,6 +403,10 @@ void filter::Filter::stat(const ImgReaderGdal& input, ImgWriterGdal& output, con
case(filter::mean):
lineOutput[x]=stat.mean(pixelInput);
break;
+ case(filter::percentile):
+ assert(m_threshold.size());
+ lineOutput[x]=stat.percentile(pixelInput,pixelInput.begin(),pixelInput.end(),m_threshold[0]);
+ break;
default:
std::string errorString="method not supported";
throw(errorString);
diff --git a/src/algorithms/Filter.h b/src/algorithms/Filter.h
index 171ce9d..b4fec9c 100644
--- a/src/algorithms/Filter.h
+++ b/src/algorithms/Filter.h
@@ -33,7 +33,7 @@ extern "C" {
namespace filter
{
- enum FILTER_TYPE { median=0, var=1 , min=2, max=3, sum=4, mean=5, minmax=6, dilate=7, erode=8, close=9, open=10, homog=11, sobelx=12, sobely=13, sobelxy=14, sobelyx=-14, smooth=15, density=16, mode=17, mixed=18, smoothnodata=19, threshold=20, ismin=21, ismax=22, heterog=23, order=24, stdev=25, dwt=26, dwti=27, dwt_cut=28, dwt_cut_from=29, savgolay=30};
+ enum FILTER_TYPE { median=0, var=1 , min=2, max=3, sum=4, mean=5, minmax=6, dilate=7, erode=8, close=9, open=10, homog=11, sobelx=12, sobely=13, sobelxy=14, sobelyx=-14, smooth=15, density=16, mode=17, mixed=18, smoothnodata=19, threshold=20, ismin=21, ismax=22, heterog=23, order=24, stdev=25, dwt=26, dwti=27, dwt_cut=28, dwt_cut_from=29, savgolay=30, percentile=31};
enum PADDING { symmetric=0, replicate=1, circular=2, zero=3};
@@ -66,6 +66,8 @@ public:
void pushClass(short theClass=1){m_class.push_back(theClass);};
void pushMask(short theMask=0){m_mask.push_back(theMask);};
int pushNoDataValue(double noDataValue=0);//{m_mask.push_back(theMask);};
+ void pushThreshold(double theThreshold){m_threshold.push_back(theThreshold);};
+ void setThresholds(const std::vector<double>& theThresholds){m_threshold=theThresholds;};
template<class T> void filter(const std::vector<T>& input, std::vector<T>& output);
template<class T> void filter(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim);
template<class T> void smooth(const std::vector<T>& input, std::vector<T>& output, short dim);
@@ -133,6 +135,7 @@ private:
m_filterMap["order"]=filter::order;
m_filterMap["median"]=filter::median;
m_filterMap["savgolay"]=filter::savgolay;
+ m_filterMap["percentile"]=filter::percentile;
}
@@ -150,6 +153,7 @@ private:
std::vector<short> m_mask;
std::string m_padding;
std::vector<double> m_noDataValues;
+ std::vector<double> m_threshold;
};
@@ -596,13 +600,22 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T
case(filter::var):
output[i]=stat.var(statBuffer);
break;
+ case(filter::stdev):
+ output[i]=sqrt(stat.var(statBuffer));
+ break;
case(filter::mean):
output[i]=stat.mean(statBuffer);
break;
- default:
- std::string errorString="method not supported";
- throw(errorString);
+ case(filter::percentile):
+ assert(m_threshold.size());
+ output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);
break;
+ default:{
+ std::ostringstream ess;
+ ess << "method " << method << " (" << getFilterType(method) << ") not supported";
+ throw(ess.str());
+ break;
+ }
}
}
//main
@@ -642,6 +655,10 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T
case(filter::mean):
output[i]=stat.mean(statBuffer);
break;
+ case(filter::percentile):
+ assert(m_threshold.size());
+ output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);
+ break;
default:
std::string errorString="method not supported";
throw(errorString);
@@ -726,6 +743,10 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T
case(filter::mean):
output[i]=stat.mean(statBuffer);
break;
+ case(filter::percentile):
+ assert(m_threshold.size());
+ output[i]=stat.percentile(statBuffer,statBuffer.begin(),statBuffer.end(),m_threshold[0]);
+ break;
default:
std::string errorString="method not supported";
throw(errorString);
diff --git a/src/algorithms/Filter2d.cc b/src/algorithms/Filter2d.cc
index 2d02182..1cdfbf3 100644
--- a/src/algorithms/Filter2d.cc
+++ b/src/algorithms/Filter2d.cc
@@ -108,11 +108,13 @@ void filter2d::Filter2d::filter(const ImgReaderGdal& input, ImgWriterGdal& outpu
for(int y=0;y<input.nrOfRow();++y){
if(y){//inBuffer already initialized for y=0
//erase first line from inBuffer
- inBuffer.erase(inBuffer.begin());
+ if(dimY>1)
+ inBuffer.erase(inBuffer.begin());
//read extra line and push back to inBuffer if not out of bounds
if(y+dimY/2<input.nrOfRow()){
//allocate buffer
- inBuffer.push_back(inBuffer.back());
+ if(dimY>1)
+ inBuffer.push_back(inBuffer.back());
try{
input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);
}
@@ -249,11 +251,13 @@ void filter2d::Filter2d::majorVoting(const std::string& inputFilename, const std
for(int y=0;y<input.nrOfRow();++y){
if(y){//inBuffer already initialized for y=0
//erase first line from inBuffer
- inBuffer.erase(inBuffer.begin());
+ if(dimY>1)
+ inBuffer.erase(inBuffer.begin());
//read extra line and push back to inBuffer if not out of bounds
if(y+dimY/2<input.nrOfRow()){
//allocate buffer
- inBuffer.push_back(inBuffer.back());
+ if(dimY>1)
+ inBuffer.push_back(inBuffer.back());
try{
input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2);
}
@@ -380,11 +384,13 @@ void filter2d::Filter2d::doit(const ImgReaderGdal& input, ImgWriterGdal& output,
for(int y=0;y<input.nrOfRow();++y){
if(y){//inBuffer already initialized for y=0
//erase first line from inBuffer
- inBuffer.erase(inBuffer.begin());
+ if(dimY>1)
+ inBuffer.erase(inBuffer.begin());
//read extra line and push back to inBuffer if not out of bounds
if(y+dimY/2<input.nrOfRow()){
//allocate buffer
- inBuffer.push_back(inBuffer.back());
+ if(dimY>1)
+ inBuffer.push_back(inBuffer.back());
try{
input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);
}
@@ -534,6 +540,11 @@ void filter2d::Filter2d::doit(const ImgReaderGdal& input, ImgWriterGdal& output,
outBuffer[x/down]=stat.sum(windowBuffer);
break;
}
+ case(filter2d::percentile):{
+ assert(m_threshold.size());
+ outBuffer[x/down]=stat.percentile(windowBuffer,windowBuffer.begin(),windowBuffer.end(),m_threshold[0]);
+ break;
+ }
case(filter2d::homog):
if(occurrence.size()==1)//all values in window are the same
outBuffer[x/down]=inBuffer[(dimY-1)/2][x];
@@ -613,7 +624,12 @@ void filter2d::Filter2d::doit(const ImgReaderGdal& input, ImgWriterGdal& output,
case(filter2d::scramble):{//could be done more efficiently window by window with random shuffling entire buffer and assigning entire buffer at once to output image...
if(windowBuffer.size()){
int randomIndex=std::rand()%windowBuffer.size();
- outBuffer[x/down]=windowBuffer[randomIndex];
+ if(randomIndex>=windowBuffer.size())
+ outBuffer[x/down]=windowBuffer.back();
+ else if(randomIndex<0)
+ outBuffer[x/down]=windowBuffer[0];
+ else
+ outBuffer[x/down]=windowBuffer[randomIndex];
}
else
outBuffer[x/down]=(m_noDataValues.size())? m_noDataValues[0] : 0;
@@ -646,8 +662,12 @@ void filter2d::Filter2d::doit(const ImgReaderGdal& input, ImgWriterGdal& output,
outBuffer[x/down]=inBuffer[indexJ][indexI];
break;
}
- default:
+ default:{
+ std::ostringstream ess;
+ ess << "Error: filter method " << method << " not supported" << std::endl;
+ throw(ess.str());
break;
+ }
}
}
progress=(1.0+y/down);
@@ -708,11 +728,13 @@ void filter2d::Filter2d::mrf(const ImgReaderGdal& input, ImgWriterGdal& output,
for(int y=0;y<input.nrOfRow();++y){
if(y){//inBuffer already initialized for y=0
//erase first line from inBuffer
- inBuffer.erase(inBuffer.begin());
+ if(dimY>1)
+ inBuffer.erase(inBuffer.begin());
//read extra line and push back to inBuffer if not out of bounds
if(y+dimY/2<input.nrOfRow()){
//allocate buffer
- inBuffer.push_back(inBuffer.back());
+ if(dimY>1)
+ inBuffer.push_back(inBuffer.back());
try{
input.readData(inBuffer[inBuffer.size()-1],GDT_Int16,y+dimY/2);
}
@@ -963,11 +985,13 @@ void filter2d::Filter2d::morphology(const ImgReaderGdal& input, ImgWriterGdal& o
for(int y=0;y<input.nrOfRow();++y){
if(y){//inBuffer already initialized for y=0
//erase first line from inBuffer
- inBuffer.erase(inBuffer.begin());
+ if(dimY>1)
+ inBuffer.erase(inBuffer.begin());
//read extra line and push back to inBuffer if not out of bounds
if(y+dimY/2<input.nrOfRow()){
//allocate buffer
- inBuffer.push_back(inBuffer.back());
+ if(dimY>1)
+ inBuffer.push_back(inBuffer.back());
try{
input.readData(inBuffer[inBuffer.size()-1],GDT_Float64,y+dimY/2,iband);
}
diff --git a/src/algorithms/Filter2d.h b/src/algorithms/Filter2d.h
index e03f0c1..3b3acb3 100644
--- a/src/algorithms/Filter2d.h
+++ b/src/algorithms/Filter2d.h
@@ -58,7 +58,7 @@ extern "C" {
namespace filter2d
{
- enum FILTER_TYPE { median=100, var=101 , min=102, max=103, sum=104, mean=105, minmax=106, dilate=107, erode=108, close=109, open=110, homog=111, sobelx=112, sobely=113, sobelxy=114, sobelyx=115, smooth=116, density=117, mode=118, mixed=119, threshold=120, ismin=121, ismax=122, heterog=123, order=124, stdev=125, mrf=126, dwt=127, dwti=128, dwt_cut=129, scramble=130, shift=131, linearfeature=132, smoothnodata=133, countid=134, dwt_cut_from=135, savgolay=136};
+ enum FILTER_TYPE { median=100, var=101 , min=102, max=103, sum=104, mean=105, minmax=106, dilate=107, erode=108, close=109, open=110, homog=111, sobelx=112, sobely=113, sobelxy=114, sobelyx=115, smooth=116, density=117, mode=118, mixed=119, threshold=120, ismin=121, ismax=122, heterog=123, order=124, stdev=125, mrf=126, dwt=127, dwti=128, dwt_cut=129, scramble=130, shift=131, linearfeature=132, smoothnodata=133, countid=134, dwt_cut_from=135, savgolay=136, percentile=137};
enum RESAMPLE { NEAR = 0, BILINEAR = 1, BICUBIC = 2 };//bicubic not supported yet...
@@ -168,6 +168,7 @@ private:
m_filterMap["linearfeature"]=filter2d::linearfeature;
m_filterMap["countid"]=filter2d::countid;
m_filterMap["savgolay"]=filter2d::savgolay;
+ m_filterMap["percentile"]=filter2d::percentile;
}
Vector2d<double> m_taps;
@@ -425,6 +426,11 @@ template<class T1, class T2> void Filter2d::doit(const Vector2d<T1>& inputVector
outBuffer[x/down]=stat.sum(windowBuffer);
break;
}
+ case(filter2d::percentile):{
+ assert(m_threshold.size());
+ outBuffer[x/down]=stat.percentile(windowBuffer,windowBuffer.begin(),windowBuffer.end(),m_threshold[0]);
+ break;
+ }
case(filter2d::homog):
if(occurrence.size()==1)//all values in window must be the same
outBuffer[x/down]=inBuffer[(dimY-1)/2][x];
@@ -454,6 +460,13 @@ template<class T1, class T2> void Filter2d::doit(const Vector2d<T1>& inputVector
outBuffer[x/down]=noDataValue;
break;
}
+ case(filter2d::countid):{
+ if(windowBuffer.size())
+ outBuffer[x/down]=occurrence.size();
+ else
+ outBuffer[x/down]=noDataValue;
+ break;
+ }
case(filter2d::mode):{
if(occurrence.size()){
std::map<int,int>::const_iterator maxit=occurrence.begin();
@@ -483,6 +496,20 @@ template<class T1, class T2> void Filter2d::doit(const Vector2d<T1>& inputVector
outBuffer[x/down]=noDataValue;
break;
}
+ case(filter2d::scramble):{//could be done more efficiently window by window with random shuffling entire buffer and assigning entire buffer at once to output image...
+ if(windowBuffer.size()){
+ int randomIndex=std::rand()%windowBuffer.size();
+ if(randomIndex>=windowBuffer.size())
+ outBuffer[x/down]=windowBuffer.back();
+ else if(randomIndex<0)
+ outBuffer[x/down]=windowBuffer[0];
+ else
+ outBuffer[x/down]=windowBuffer[randomIndex];
+ }
+ else
+ outBuffer[x/down]=noDataValue;
+ break;
+ }
case(filter2d::mixed):{
enum MixType { BF=11, CF=12, MF=13, NF=20, W=30 };
double nBF=occurrence[BF];
diff --git a/src/algorithms/StatFactory.h b/src/algorithms/StatFactory.h
index b307486..07a9577 100644
--- a/src/algorithms/StatFactory.h
+++ b/src/algorithms/StatFactory.h
@@ -35,6 +35,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_cdf.h>
+#include <gsl/gsl_statistics.h>
namespace statfactory
{
@@ -170,6 +171,7 @@ public:
template<class T> void distribution2d(const std::vector<T>& inputX, const std::vector<T>& inputY, std::vector< std::vector<double> >& output, int nbin, T& minX, T& maxX, T& minY, T& maxY, double sigma=0, const std::string& filename="") const;
template<class T> void cumulative (const std::vector<T>& input, typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end, std::vector<int>& output, int nbin, T &minimum, T &maximum) const;
template<class T> void percentiles (const std::vector<T>& input, typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end, std::vector<T>& output, int nbin, T &minimum, T &maximum, const std::string &filename="") const;
+ template<class T> T percentile(const std::vector<T>& input, typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end, double percent, T minimum=0, T maximum=0) const;
template<class T> void signature(const std::vector<T>& input, double& k, double& alpha, double& beta, double e) const;
void signature(double m1, double m2, double& k, double& alpha, double& beta, double e) const;
template<class T> void normalize(const std::vector<T>& input, std::vector<double>& output) const;
@@ -382,6 +384,10 @@ template<class T> inline typename std::vector<T>::iterator StatFactory::mymax(co
template<class T> inline T StatFactory::mymin(const std::vector<T>& v) const
{
bool isValid=false;
+ if(v.empty()){
+ std::string errorString="Error: vector is empty";
+ throw(errorString);
+ }
T minValue=*(v.begin());
for (typename std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){
if(isNoData(*it))
@@ -424,6 +430,10 @@ template<class T> inline T StatFactory::mymin(const std::vector<T>& v) const
template<class T> inline T StatFactory::mymax(const std::vector<T>& v) const
{
bool isValid=false;
+ if(v.empty()){
+ std::string errorString="Error: vector is empty";
+ throw(errorString);
+ }
T maxValue=*(v.begin());
for (typename std::vector<T>::const_iterator it = v.begin(); it!=v.end(); ++it){
if(isNoData(*it))
@@ -545,7 +555,6 @@ template<class T> inline T StatFactory::sum(const std::vector<T>& v) const
template<class T> inline double StatFactory::mean(const std::vector<T>& v) const
{
- assert(v.size());
typename std::vector<T>::const_iterator it;
T tmpSum=0;
unsigned int validSize=0;
@@ -625,7 +634,6 @@ template<class T> double StatFactory::var(const std::vector<T>& v) const
template<class T> double StatFactory::moment(const std::vector<T>& v, int n) const
{
- assert(v.size());
unsigned int validSize=0;
typename std::vector<T>::const_iterator it;
double m=0;
@@ -649,7 +657,6 @@ template<class T> double StatFactory::moment(const std::vector<T>& v, int n) con
//central moment
template<class T> double StatFactory::cmoment(const std::vector<T>& v, int n) const
{
- assert(v.size());
unsigned int validSize=0;
typename std::vector<T>::const_iterator it;
double m=0;
@@ -718,7 +725,10 @@ template<class T1, class T2> void StatFactory::scale2byte(const std::vector<T1>&
output.resize(input.size());
T1 minimum=mymin(input);
T1 maximum=mymax(input);
- assert(maximum>minimum);
+ if(minimum>=maximum){
+ std::string errorString="Error: no valid data found";
+ throw(errorString);
+ }
double scale=(ubound-lbound)/(maximum-minimum);
//todo: what if nodata value?
for (int i=0;i<input.size();++i){
@@ -745,7 +755,10 @@ template<class T> void StatFactory::distribution(const std::vector<T>& input, t
s<<"Error: could not calculate distribution (min>=max)";
throw(s.str());
}
- assert(nbin);
+ if(!nbin){
+ std::string errorString="Error: nbin not defined";
+ throw(errorString);
+ }
if(!input.size()){
std::string errorString="Error: no valid data found";
throw(errorString);
@@ -809,8 +822,16 @@ template<class T> void StatFactory::distribution(const std::vector<T>& input, t
template<class T> void StatFactory::distribution2d(const std::vector<T>& inputX, const std::vector<T>& inputY, std::vector< std::vector<double> >& output, int nbin, T& minX, T& maxX, T& minY, T& maxY, double sigma, const std::string& filename) const
{
- assert(inputX.size());
- assert(inputX.size()==inputY.size());
+ if(inputX.empty()){
+ std::ostringstream s;
+ s<<"Error: inputX is empty";
+ throw(s.str());
+ }
+ if(inputX.size()!=inputY.size()){
+ std::ostringstream s;
+ s<<"Error: inputX is empty";
+ throw(s.str());
+ }
unsigned long int npoint=inputX.size();
if(maxX<=minX)
minmax(inputX,inputX.begin(),inputX.end(),minX,maxX);
@@ -826,7 +847,11 @@ template<class T> void StatFactory::distribution2d(const std::vector<T>& inputX
s<<"Error: could not calculate distribution (minY>=maxY)";
throw(s.str());
}
- assert(nbin>1);
+ if(nbin<=1){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 1";
+ throw(s.str());
+ }
output.resize(nbin);
for(int i=0;i<nbin;++i){
output[i].resize(nbin);
@@ -844,10 +869,26 @@ template<class T> void StatFactory::distribution2d(const std::vector<T>& inputX
binY=nbin-1;
else
binY=static_cast<int>(static_cast<double>(inputY[ipoint]-minY)/(maxY-minY)*nbin);
- assert(binX>=0);
- assert(binX<output.size());
- assert(binY>=0);
- assert(binY<output[binX].size());
+ if(binX<0){
+ std::ostringstream s;
+ s<<"Error: binX is smaller than 0";
+ throw(s.str());
+ }
+ if(output.size()<=binX){
+ std::ostringstream s;
+ s<<"Error: output size must be larger than binX";
+ throw(s.str());
+ }
+ if(binY<0){
+ std::ostringstream s;
+ s<<"Error: binY is smaller than 0";
+ throw(s.str());
+ }
+ if(output.size()<=binY){
+ std::ostringstream s;
+ s<<"Error: output size must be larger than binY";
+ throw(s.str());
+ }
if(sigma>0){
// minX-=2*sigma;
// maxX+=2*sigma;
@@ -906,9 +947,21 @@ template<class T> void StatFactory::percentiles (const std::vector<T>& input, t
{
if(maximum<=minimum)
minmax(input,begin,end,minimum,maximum);
- assert(maximum>minimum);
- assert(nbin>1);
- assert(input.size());
+ if(maximum<=minimum){
+ std::ostringstream s;
+ s<<"Error: maximum must be at least minimum";
+ throw(s.str());
+ }
+ if(nbin<=1){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 1";
+ throw(s.str());
+ }
+ if(input.empty()){
+ std::ostringstream s;
+ s<<"Error: input is empty";
+ throw(s.str());
+ }
output.resize(nbin);
std::vector<T> inputSort;
inputSort.assign(begin,end);
@@ -946,6 +999,29 @@ template<class T> void StatFactory::percentiles (const std::vector<T>& input, t
}
}
+//todo: what with nodata values?
+template<class T> T StatFactory::percentile(const std::vector<T>& input, typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end, double percent, T minimum, T maximum) const
+{
+ if(input.empty()){
+ std::ostringstream s;
+ s<<"Error: input is empty";
+ throw(s.str());
+ }
+ std::vector<T> inputSort;
+ inputSort.assign(begin,end);
+ typename std::vector<T>::iterator vit=inputSort.begin();
+ while(vit!=inputSort.end()){
+ if(maximum>minimum){
+ if(*vit<minimum||*vit>maximum)
+ inputSort.erase(vit);
+ }
+ else
+ ++vit;
+ }
+ std::sort(inputSort.begin(),inputSort.end());
+ return gsl_stats_quantile_from_sorted_data(&(inputSort[0]),1,inputSort.size(),percent/100.0);
+}
+
template<class T> void StatFactory::signature(const std::vector<T>& input, double&k, double& alpha, double& beta, double e) const
{
double m1=moment(input,1);
@@ -976,8 +1052,16 @@ template<class T> void StatFactory::normalize_pct(std::vector<T>& input) const{
}
template<class T> double StatFactory::rmse(const std::vector<T>& x, const std::vector<T>& y) const{
- assert(x.size()==y.size());
- assert(x.size());
+ if(x.size()!=y.size()){
+ std::ostringstream s;
+ s<<"Error: x and y not equal in size";
+ throw(s.str());
+ }
+ if(x.empty()){
+ std::ostringstream s;
+ s<<"Error: x is empty";
+ throw(s.str());
+ }
double mse=0;
for(int isample=0;isample<x.size();++isample){
if(isNoData(x[isample])||isNoData(y[isample]))
@@ -1018,8 +1102,26 @@ template<class T> double StatFactory::correlation(const std::vector<T>& x, const
continue;
else{
isValid=true;
- assert(i>=0&&i<x.size());
- assert(j>=0&&j<y.size());
+ if(i<0){
+ std::ostringstream s;
+ s<<"Error: i must be positive";
+ throw(s.str());
+ }
+ if(i>=x.size()){
+ std::ostringstream s;
+ s<<"Error: i must be smaller than x.size()";
+ throw(s.str());
+ }
+ if(j<0){
+ std::ostringstream s;
+ s<<"Error: j must be positive";
+ throw(s.str());
+ }
+ if(j>=y.size()){
+ std::ostringstream s;
+ s<<"Error: j must be smaller than y.size()";
+ throw(s.str());
+ }
sXY += (x[i] - meanX) * (y[j] - meanY);
}
}
@@ -1051,8 +1153,16 @@ template<class T> double StatFactory::cross_correlation(const std::vector<T>& x,
//todo: nodata?
template<class T> double StatFactory::linear_regression(const std::vector<T>& x, const std::vector<T>& y, double &c0, double &c1) const{
- assert(x.size()==y.size());
- assert(x.size());
+ if(x.size()!=y.size()){
+ std::ostringstream s;
+ s<<"Error: x and y not equal in size";
+ throw(s.str());
+ }
+ if(x.empty()){
+ std::ostringstream s;
+ s<<"Error: x is empty";
+ throw(s.str());
+ }
double cov00;
double cov01;
double cov11;
@@ -1063,8 +1173,16 @@ template<class T> double StatFactory::linear_regression(const std::vector<T>& x,
//todo: nodata?
template<class T> double StatFactory::linear_regression_err(const std::vector<T>& x, const std::vector<T>& y, double &c0, double &c1) const{
- assert(x.size()==y.size());
- assert(x.size());
+ if(x.size()!=y.size()){
+ std::ostringstream s;
+ s<<"Error: x and y not equal in size";
+ throw(s.str());
+ }
+ if(x.empty()){
+ std::ostringstream s;
+ s<<"Error: x is empty";
+ throw(s.str());
+ }
double cov00;
double cov01;
double cov11;
@@ -1077,10 +1195,18 @@ template<class T> double StatFactory::linear_regression_err(const std::vector<T>
// gsl_stats_correlation (const double data1[], const size_t stride1, const double data2[], const size_t stride2, const size_t n)
template<class T> void StatFactory::interpolateNoData(const std::vector<double>& wavelengthIn, const std::vector<T>& input, const std::string& type, std::vector<T>& output, bool verbose) const{
- assert(wavelengthIn.size());
+ if(wavelengthIn.empty()){
+ std::ostringstream s;
+ s<<"Error: wavelengthIn is empty";
+ throw(s.str());
+ }
std::vector<double> wavelengthOut=wavelengthIn;
std::vector<T> validIn=input;
- assert(input.size()==wavelengthIn.size());
+ if(input.size()!=wavelengthIn.size()){
+ std::ostringstream s;
+ s<<"Error: x and y not equal in size";
+ throw(s.str());
+ }
int nband=wavelengthIn.size();
output.clear();
//remove nodata from input and corresponding wavelengthIn
@@ -1113,9 +1239,21 @@ template<class T> void StatFactory::interpolateNoData(const std::vector<double>&
}
template<class T> void StatFactory::interpolateUp(const std::vector<double>& wavelengthIn, const std::vector<T>& input, const std::vector<double>& wavelengthOut, const std::string& type, std::vector<T>& output, bool verbose) const{
- assert(wavelengthIn.size());
- assert(input.size()==wavelengthIn.size());
- assert(wavelengthOut.size());
+ if(wavelengthIn.empty()){
+ std::ostringstream s;
+ s<<"Error: wavelengthIn is empty";
+ throw(s.str());
+ }
+ if(input.size()!=wavelengthIn.size()){
+ std::ostringstream s;
+ s<<"Error: input and wavelengthIn not equal in size";
+ throw(s.str());
+ }
+ if(wavelengthOut.empty()){
+ std::ostringstream s;
+ s<<"Error: wavelengthOut is empty";
+ throw(s.str());
+ }
int nband=wavelengthIn.size();
output.clear();
gsl_interp_accel *acc;
@@ -1180,8 +1318,16 @@ template<class T> void StatFactory::interpolateUp(const std::vector<double>& wav
//todo: nodata?
template<class T> void StatFactory::interpolateUp(const std::vector<T>& input, std::vector<T>& output, int nbin) const
{
- assert(input.size());
- assert(nbin);
+ if(input.empty()){
+ std::ostringstream s;
+ s<<"Error: input is empty";
+ throw(s.str());
+ }
+ if(!nbin){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 0";
+ throw(s.str());
+ }
output.clear();
int dim=input.size();
for(int i=0;i<dim;++i){
@@ -1202,15 +1348,27 @@ template<class T> void StatFactory::interpolateUp(const std::vector<T>& input, s
//todo: nodata?
template<class T> void StatFactory::nearUp(const std::vector<T>& input, std::vector<T>& output) const
{
- assert(input.size());
- assert(output.size()>=input.size());
+ if(input.empty()){
+ std::ostringstream s;
+ s<<"Error: input is empty";
+ throw(s.str());
+ }
+ if(output.size()<input.size()){
+ std::ostringstream s;
+ s<<"Error: output size is smaller than input size";
+ throw(s.str());
+ }
int dimInput=input.size();
int dimOutput=output.size();
for(int iin=0;iin<dimInput;++iin){
for(int iout=0;iout<dimOutput/dimInput;++iout){
int indexOutput=iin*dimOutput/dimInput+iout;
- assert(indexOutput<output.size());
+ if(indexOutput>=output.size()){
+ std::ostringstream s;
+ s<<"Error: indexOutput must be smaller than output.size()";
+ throw(s.str());
+ }
output[indexOutput]=input[iin];
}
}
@@ -1219,7 +1377,11 @@ template<class T> void StatFactory::nearUp(const std::vector<T>& input, std::vec
//todo: nodata?
template<class T> void StatFactory::interpolateUp(double* input, int dim, std::vector<T>& output, int nbin)
{
- assert(nbin);
+ if(!nbin){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 0";
+ throw(s.str());
+ }
output.clear();
for(int i=0;i<dim;++i){
double deltaX=0;
@@ -1239,8 +1401,16 @@ template<class T> void StatFactory::interpolateUp(double* input, int dim, std::v
//todo: nodata?
template<class T> void StatFactory::interpolateDown(const std::vector<T>& input, std::vector<T>& output, int nbin) const
{
- assert(input.size());
- assert(nbin);
+ if(input.empty()){
+ std::ostringstream s;
+ s<<"Error: input is empty";
+ throw(s.str());
+ }
+ if(!nbin){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 0";
+ throw(s.str());
+ }
output.clear();
int dim=input.size();
int x=0;
@@ -1258,7 +1428,11 @@ template<class T> void StatFactory::interpolateDown(const std::vector<T>& input,
//todo: nodata?
template<class T> void StatFactory::interpolateDown(double* input, int dim, std::vector<T>& output, int nbin)
{
- assert(nbin);
+ if(!nbin){
+ std::ostringstream s;
+ s<<"Error: nbin must be larger than 0";
+ throw(s.str());
+ }
output.clear();
int x=0;
output.push_back(input[0]);
diff --git a/src/apps/Makefile.am b/src/apps/Makefile.am
index c3f3be3..7308c38 100644
--- a/src/apps/Makefile.am
+++ b/src/apps/Makefile.am
@@ -6,10 +6,10 @@ LDADD = $(GSL_LIBS) $(GDAL_LDFLAGS) $(top_builddir)/src/algorithms/libalgorithms
###############################################################################
# the program to build and install (the names of the final binaries)
-bin_PROGRAMS = pkinfo pkcrop pkdiff pkgetmask pksetmask pkcreatect pkdumpimg pkdumpogr pksieve pkstat pkstatascii pkstatogr pkegcs pkextract pkfillnodata pkfilter pkfilterdem pkfilterascii pkdsm2shadow pkcomposite pkpolygonize pkascii2img pksvm pkfssvm pkascii2ogr pkkalman
+bin_PROGRAMS = pkinfo pkcrop pkdiff pkgetmask pksetmask pkcreatect pkdumpimg pkdumpogr pksieve pkstat pkstatascii pkstatogr pkegcs pkextract pkfillnodata pkfilter pkfilterdem pkfilterascii pkdsm2shadow pkcomposite pkpolygonize pkascii2img pksvm pkfssvm pkascii2ogr pkreclass
# the program to build but not install (the names of the final binaries)
-noinst_PROGRAMS = pkeditogr pkenhance pkndvi pkreclass
+noinst_PROGRAMS = pkkalman
if USE_FANN
bin_PROGRAMS += pkann pkfsann pkregann
@@ -27,7 +27,7 @@ endif
if USE_LAS
bin_PROGRAMS += pklas2img
pklas2img_SOURCES = pklas2img.cc
-pklas2img_LDADD = $(top_srcdir)/src/lasclasses/liblasClasses.la -llas $(AM_LDFLAGS)
+pklas2img_LDADD = -lgsl $(top_srcdir)/src/lasclasses/liblasClasses.la -llas $(AM_LDFLAGS)
endif
if USE_NLOPT
bin_PROGRAMS += pkoptsvm
@@ -39,7 +39,6 @@ pkinfo_SOURCES = pkinfo.cc
pkinfo_LDADD = -lgsl
pkcrop_SOURCES = pkcrop.cc
pkcrop_LDADD = -lgsl
-pkreclass_SOURCES = pkreclass.cc
pkdiff_SOURCES = pkdiff.cc
pkdiff_LDADD = -lgsl
pkgetmask_SOURCES = pkgetmask.cc
@@ -57,6 +56,7 @@ pkstatogr_LDADD = -lgsl
pkegcs_SOURCES = pkegcs.cc
pkegcs_LDADD = $(AM_LDFLAGS) -lgsl -lgdal
pkextract_SOURCES = pkextract.cc
+pkextract_LDADD = $(AM_LDFLAGS) -lgsl -lgdal
pkfillnodata_SOURCES = pkfillnodata.cc
pkfilter_SOURCES = pkfilter.cc
pkfilter_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lgsl -lgdal
@@ -64,14 +64,11 @@ pkkalman_SOURCES = pkkalman.cc $(top_srcdir)/src/algorithms/ImgRegression.h $(to
pkkalman_LDADD = -lalgorithms -lgsl $(GSL_LIBS) $(AM_LDFLAGS) -lalgorithms
pkfilterdem_SOURCES = pkfilterdem.cc
pkfilterdem_LDADD = -lgsl
-pkenhance_SOURCES = pkenhance.cc
-pkenhance_LDADD = $(AM_LDFLAGS) -lgdal
pkfilterascii_SOURCES = pkfilterascii.cc
pkfilterascii_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lgsl -lgdal
pkdsm2shadow_SOURCES = pkdsm2shadow.cc
pkdsm2shadow_LDADD = -lgsl
pkcomposite_SOURCES = pkcomposite.cc
-pkndvi_SOURCES = pkndvi.cc
pkpolygonize_SOURCES = pkpolygonize.cc
pksvm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pksvm.cc
pksvm_LDADD = -lgsl
@@ -79,6 +76,5 @@ pkfssvm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithm
pkfssvm_LDADD = -lgsl $(GSL_LIBS) $(AM_LDFLAGS) -lalgorithms
pkascii2img_SOURCES = pkascii2img.cc
pkascii2ogr_SOURCES = pkascii2ogr.cc
-pkeditogr_SOURCES = pkeditogr.cc
-pkeditogr_LDADD = $(AM_LDFLAGS)
+pkreclass_SOURCES = pkreclass.cc
###############################################################################
diff --git a/src/apps/Makefile.in b/src/apps/Makefile.in
index 90adb9b..2a18ba1 100644
--- a/src/apps/Makefile.in
+++ b/src/apps/Makefile.in
@@ -86,10 +86,9 @@ bin_PROGRAMS = pkinfo$(EXEEXT) pkcrop$(EXEEXT) pkdiff$(EXEEXT) \
pkfilter$(EXEEXT) pkfilterdem$(EXEEXT) pkfilterascii$(EXEEXT) \
pkdsm2shadow$(EXEEXT) pkcomposite$(EXEEXT) \
pkpolygonize$(EXEEXT) pkascii2img$(EXEEXT) pksvm$(EXEEXT) \
- pkfssvm$(EXEEXT) pkascii2ogr$(EXEEXT) pkkalman$(EXEEXT) \
+ pkfssvm$(EXEEXT) pkascii2ogr$(EXEEXT) pkreclass$(EXEEXT) \
$(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
-noinst_PROGRAMS = pkeditogr$(EXEEXT) pkenhance$(EXEEXT) \
- pkndvi$(EXEEXT) pkreclass$(EXEEXT)
+noinst_PROGRAMS = pkkalman$(EXEEXT)
@USE_FANN_TRUE at am__append_1 = pkann pkfsann pkregann
@USE_LAS_TRUE at am__append_2 = pklas2img
@USE_NLOPT_TRUE at am__append_3 = pkoptsvm
@@ -182,22 +181,12 @@ pkdumpogr_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(top_builddir)/src/algorithms/libalgorithms.la \
$(top_builddir)/src/imageclasses/libimageClasses.la \
$(top_builddir)/src/fileclasses/libfileClasses.la
-am_pkeditogr_OBJECTS = pkeditogr.$(OBJEXT)
-pkeditogr_OBJECTS = $(am_pkeditogr_OBJECTS)
-pkeditogr_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_pkegcs_OBJECTS = pkegcs.$(OBJEXT)
pkegcs_OBJECTS = $(am_pkegcs_OBJECTS)
pkegcs_DEPENDENCIES = $(am__DEPENDENCIES_2)
-am_pkenhance_OBJECTS = pkenhance.$(OBJEXT)
-pkenhance_OBJECTS = $(am_pkenhance_OBJECTS)
-pkenhance_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_pkextract_OBJECTS = pkextract.$(OBJEXT)
pkextract_OBJECTS = $(am_pkextract_OBJECTS)
-pkextract_LDADD = $(LDADD)
-pkextract_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(top_builddir)/src/algorithms/libalgorithms.la \
- $(top_builddir)/src/imageclasses/libimageClasses.la \
- $(top_builddir)/src/fileclasses/libfileClasses.la
+pkextract_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_pkfillnodata_OBJECTS = pkfillnodata.$(OBJEXT)
pkfillnodata_OBJECTS = $(am_pkfillnodata_OBJECTS)
pkfillnodata_LDADD = $(LDADD)
@@ -249,13 +238,6 @@ pklas2img_OBJECTS = $(am_pklas2img_OBJECTS)
@USE_LAS_TRUE at pklas2img_DEPENDENCIES = \
@USE_LAS_TRUE@ $(top_srcdir)/src/lasclasses/liblasClasses.la \
@USE_LAS_TRUE@ $(am__DEPENDENCIES_2)
-am_pkndvi_OBJECTS = pkndvi.$(OBJEXT)
-pkndvi_OBJECTS = $(am_pkndvi_OBJECTS)
-pkndvi_LDADD = $(LDADD)
-pkndvi_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(top_builddir)/src/algorithms/libalgorithms.la \
- $(top_builddir)/src/imageclasses/libimageClasses.la \
- $(top_builddir)/src/fileclasses/libfileClasses.la
am__pkoptsvm_SOURCES_DIST = $(top_srcdir)/src/algorithms/OptFactory.h \
$(top_srcdir)/src/algorithms/CostFactorySVM.h pkoptsvm.cc
@USE_NLOPT_TRUE at am_pkoptsvm_OBJECTS = pkoptsvm.$(OBJEXT)
@@ -369,13 +351,12 @@ SOURCES = $(pkann_SOURCES) $(pkascii2img_SOURCES) \
$(pkascii2ogr_SOURCES) $(pkcomposite_SOURCES) \
$(pkcreatect_SOURCES) $(pkcrop_SOURCES) $(pkdiff_SOURCES) \
$(pkdsm2shadow_SOURCES) $(pkdumpimg_SOURCES) \
- $(pkdumpogr_SOURCES) $(pkeditogr_SOURCES) $(pkegcs_SOURCES) \
- $(pkenhance_SOURCES) $(pkextract_SOURCES) \
+ $(pkdumpogr_SOURCES) $(pkegcs_SOURCES) $(pkextract_SOURCES) \
$(pkfillnodata_SOURCES) $(pkfilter_SOURCES) \
$(pkfilterascii_SOURCES) $(pkfilterdem_SOURCES) \
$(pkfsann_SOURCES) $(pkfssvm_SOURCES) $(pkgetmask_SOURCES) \
$(pkinfo_SOURCES) $(pkkalman_SOURCES) $(pklas2img_SOURCES) \
- $(pkndvi_SOURCES) $(pkoptsvm_SOURCES) $(pkpolygonize_SOURCES) \
+ $(pkoptsvm_SOURCES) $(pkpolygonize_SOURCES) \
$(pkreclass_SOURCES) $(pkregann_SOURCES) $(pksetmask_SOURCES) \
$(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatascii_SOURCES) \
$(pkstatogr_SOURCES) $(pksvm_SOURCES)
@@ -383,17 +364,16 @@ DIST_SOURCES = $(am__pkann_SOURCES_DIST) $(pkascii2img_SOURCES) \
$(pkascii2ogr_SOURCES) $(pkcomposite_SOURCES) \
$(pkcreatect_SOURCES) $(pkcrop_SOURCES) $(pkdiff_SOURCES) \
$(pkdsm2shadow_SOURCES) $(pkdumpimg_SOURCES) \
- $(pkdumpogr_SOURCES) $(pkeditogr_SOURCES) $(pkegcs_SOURCES) \
- $(pkenhance_SOURCES) $(pkextract_SOURCES) \
+ $(pkdumpogr_SOURCES) $(pkegcs_SOURCES) $(pkextract_SOURCES) \
$(pkfillnodata_SOURCES) $(pkfilter_SOURCES) \
$(pkfilterascii_SOURCES) $(pkfilterdem_SOURCES) \
$(am__pkfsann_SOURCES_DIST) $(pkfssvm_SOURCES) \
$(pkgetmask_SOURCES) $(pkinfo_SOURCES) $(pkkalman_SOURCES) \
- $(am__pklas2img_SOURCES_DIST) $(pkndvi_SOURCES) \
- $(am__pkoptsvm_SOURCES_DIST) $(pkpolygonize_SOURCES) \
- $(pkreclass_SOURCES) $(am__pkregann_SOURCES_DIST) \
- $(pksetmask_SOURCES) $(pksieve_SOURCES) $(pkstat_SOURCES) \
- $(pkstatascii_SOURCES) $(pkstatogr_SOURCES) $(pksvm_SOURCES)
+ $(am__pklas2img_SOURCES_DIST) $(am__pkoptsvm_SOURCES_DIST) \
+ $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \
+ $(am__pkregann_SOURCES_DIST) $(pksetmask_SOURCES) \
+ $(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatascii_SOURCES) \
+ $(pkstatogr_SOURCES) $(pksvm_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -571,7 +551,7 @@ LDADD = $(GSL_LIBS) $(GDAL_LDFLAGS) $(top_builddir)/src/algorithms/libalgorithms
@USE_FANN_TRUE at pkregann_CXXFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/base $(FANN_CFLAGS) -I$(top_srcdir)/src/algorithms $(AM_CXXFLAGS)
@USE_FANN_TRUE at pkregann_LDADD = $(GSL_LIBS) $(FANN_LIBS) $(FANN_CFLAGS) $(AM_LDFLAGS)
@USE_LAS_TRUE at pklas2img_SOURCES = pklas2img.cc
- at USE_LAS_TRUE@pklas2img_LDADD = $(top_srcdir)/src/lasclasses/liblasClasses.la -llas $(AM_LDFLAGS)
+ at USE_LAS_TRUE@pklas2img_LDADD = -lgsl $(top_srcdir)/src/lasclasses/liblasClasses.la -llas $(AM_LDFLAGS)
@USE_NLOPT_TRUE at pkoptsvm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h $(top_srcdir)/src/algorithms/CostFactorySVM.h pkoptsvm.cc
@USE_NLOPT_TRUE at pkoptsvm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt -lgsl
# list of sources for the binaries
@@ -579,7 +559,6 @@ pkinfo_SOURCES = pkinfo.cc
pkinfo_LDADD = -lgsl
pkcrop_SOURCES = pkcrop.cc
pkcrop_LDADD = -lgsl
-pkreclass_SOURCES = pkreclass.cc
pkdiff_SOURCES = pkdiff.cc
pkdiff_LDADD = -lgsl
pkgetmask_SOURCES = pkgetmask.cc
@@ -597,6 +576,7 @@ pkstatogr_LDADD = -lgsl
pkegcs_SOURCES = pkegcs.cc
pkegcs_LDADD = $(AM_LDFLAGS) -lgsl -lgdal
pkextract_SOURCES = pkextract.cc
+pkextract_LDADD = $(AM_LDFLAGS) -lgsl -lgdal
pkfillnodata_SOURCES = pkfillnodata.cc
pkfilter_SOURCES = pkfilter.cc
pkfilter_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lgsl -lgdal
@@ -604,14 +584,11 @@ pkkalman_SOURCES = pkkalman.cc $(top_srcdir)/src/algorithms/ImgRegression.h $(to
pkkalman_LDADD = -lalgorithms -lgsl $(GSL_LIBS) $(AM_LDFLAGS) -lalgorithms
pkfilterdem_SOURCES = pkfilterdem.cc
pkfilterdem_LDADD = -lgsl
-pkenhance_SOURCES = pkenhance.cc
-pkenhance_LDADD = $(AM_LDFLAGS) -lgdal
pkfilterascii_SOURCES = pkfilterascii.cc
pkfilterascii_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lgsl -lgdal
pkdsm2shadow_SOURCES = pkdsm2shadow.cc
pkdsm2shadow_LDADD = -lgsl
pkcomposite_SOURCES = pkcomposite.cc
-pkndvi_SOURCES = pkndvi.cc
pkpolygonize_SOURCES = pkpolygonize.cc
pksvm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pksvm.cc
pksvm_LDADD = -lgsl
@@ -619,8 +596,7 @@ pkfssvm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithm
pkfssvm_LDADD = -lgsl $(GSL_LIBS) $(AM_LDFLAGS) -lalgorithms
pkascii2img_SOURCES = pkascii2img.cc
pkascii2ogr_SOURCES = pkascii2ogr.cc
-pkeditogr_SOURCES = pkeditogr.cc
-pkeditogr_LDADD = $(AM_LDFLAGS)
+pkreclass_SOURCES = pkreclass.cc
all: all-am
.SUFFIXES:
@@ -754,18 +730,10 @@ pkdumpogr$(EXEEXT): $(pkdumpogr_OBJECTS) $(pkdumpogr_DEPENDENCIES) $(EXTRA_pkdum
@rm -f pkdumpogr$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(pkdumpogr_OBJECTS) $(pkdumpogr_LDADD) $(LIBS)
-pkeditogr$(EXEEXT): $(pkeditogr_OBJECTS) $(pkeditogr_DEPENDENCIES) $(EXTRA_pkeditogr_DEPENDENCIES)
- @rm -f pkeditogr$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(pkeditogr_OBJECTS) $(pkeditogr_LDADD) $(LIBS)
-
pkegcs$(EXEEXT): $(pkegcs_OBJECTS) $(pkegcs_DEPENDENCIES) $(EXTRA_pkegcs_DEPENDENCIES)
@rm -f pkegcs$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(pkegcs_OBJECTS) $(pkegcs_LDADD) $(LIBS)
-pkenhance$(EXEEXT): $(pkenhance_OBJECTS) $(pkenhance_DEPENDENCIES) $(EXTRA_pkenhance_DEPENDENCIES)
- @rm -f pkenhance$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(pkenhance_OBJECTS) $(pkenhance_LDADD) $(LIBS)
-
pkextract$(EXEEXT): $(pkextract_OBJECTS) $(pkextract_DEPENDENCIES) $(EXTRA_pkextract_DEPENDENCIES)
@rm -f pkextract$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(pkextract_OBJECTS) $(pkextract_LDADD) $(LIBS)
@@ -810,10 +778,6 @@ pklas2img$(EXEEXT): $(pklas2img_OBJECTS) $(pklas2img_DEPENDENCIES) $(EXTRA_pklas
@rm -f pklas2img$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(pklas2img_OBJECTS) $(pklas2img_LDADD) $(LIBS)
-pkndvi$(EXEEXT): $(pkndvi_OBJECTS) $(pkndvi_DEPENDENCIES) $(EXTRA_pkndvi_DEPENDENCIES)
- @rm -f pkndvi$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(pkndvi_OBJECTS) $(pkndvi_LDADD) $(LIBS)
-
pkoptsvm$(EXEEXT): $(pkoptsvm_OBJECTS) $(pkoptsvm_DEPENDENCIES) $(EXTRA_pkoptsvm_DEPENDENCIES)
@rm -f pkoptsvm$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(pkoptsvm_OBJECTS) $(pkoptsvm_LDADD) $(LIBS)
@@ -871,9 +835,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkdsm2shadow.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkdumpimg.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkdumpogr.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkeditogr.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkegcs.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkenhance.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkextract.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkfillnodata.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkfilter.Po at am__quote@
@@ -885,7 +847,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkinfo.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkkalman.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pklas2img.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkndvi.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkoptsvm.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkpolygonize.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pkreclass.Po at am__quote@
diff --git a/src/apps/pkann.cc b/src/apps/pkann.cc
index 932e3ce..f6ad25f 100644
--- a/src/apps/pkann.cc
+++ b/src/apps/pkann.cc
@@ -31,6 +31,81 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "floatfann.h"
#include "algorithms/myfann_cpp.h"
+/******************************************************************************/
+/*! \page pkann pkann
+ classify raster image using Artificial Neural Network
+## SYNOPSIS
+
+<code>
+ Usage: pkann -t training [-i input -o output] [-cv value]
+</code>
+
+<code>
+
+
+ Options: [-tln layer]* [-c name -r value]* [-of GDALformat|-f OGRformat] [-co NAME=VALUE]* [-ct filename] [-label attribute] [-prior value]* [-nn number]* [-m filename [-msknodata value]*] [-nodata value]
+
+ Advanced options:
+ [-b band] [-s band] [-e band] [-bal size]* [-min] [-bag value] [-bs value] [-comb rule] [-cb filename] [-prob filename] [-pim priorimage] [--offset value] [--scale value] [--connection 0|1] [-w weights]* [--learning rate] [--maxit number] [-extent vector]
+</code>
+
+\section pkann_description Description
+
+The utility pkann implements an artificial neural network (ANN) to solve a supervised classification problem. The implementation is based on the open source C++ library <a href="http://leenissen.dk/fann/wp/">fann</a>). Both raster and vector files are supported as input. The output will contain the classification result, either in raster or vector format, corresponding to the format of the input. A training sample must be provided as an OGR vector dataset that contains the class labels a [...]
+
+\section pkann_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input image |
+ | t | training | std::string | |training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) |
+ | tln | tln | std::string | |training layer name(s) |
+ | label | label | std::string | label |identifier for class label in training vector file. |
+ | bal | balance | unsigned int | 0 |balance the input data to this number of samples for each class |
+ | min | min | int | 0 |if number of training pixels is less then min, do not take this class into account (0: consider all classes) |
+ | b | band | short | |band index (starting from 0, either use band option or use start to end) |
+ | s | start | double | 0 |start band sequence number |
+ | e | end | double | 0 |end band sequence number (set to 0 to include bands) |
+ | | offset | double | 0 |offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | a | aggreg | unsigned short | 1 |how to combine aggregated classifiers, see also rc option (1: sum rule, 2: max rule). |
+ | prior | prior | double | 0 |prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ) |
+ | pim | priorimg | std::string | |prior probability image (multi-band img with band for each class |
+ | cv | cv | unsigned short | 0 |n-fold cross validation mode |
+ | cmf | cmf | std::string | ascii |Format for confusion matrix (ascii or latex) |
+ | nn | nneuron | unsigned int | 5 |number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) |
+ | | connection | float | 1 |connection reate (default: 1.0 for a fully connected network) |
+ | w | weights | float | 0 |weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer) |
+ | l | learning | float | 0.7 |learning rate (default: 0.7) |
+ | | maxit | unsigned int | 500 |number of maximum iterations (epoch) (default: 500) |
+ | comb | comb | unsigned short | 0 |how to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option. Default is sum rule (0) |
+ | bag | bag | unsigned short | 1 |Number of bootstrap aggregations (default is no bagging: 1) |
+ | bs | bsize | int | 100 |Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively |
+ | cb | classbag | std::string | |output for each individual bootstrap aggregation (default is blank) |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. |
+ | msknodata | msknodata | short | 0 |mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image. Default is 0 |
+ | nodata | nodata | unsigned short | 0 |nodata value to put where image is masked as nodata |
+ | o | output | std::string | |output classification image |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | ct | ct | std::string | |colour table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | | prob | std::string | |probability image. Default is no probability image |
+ | f | f | std::string | SQLite |Output ogr format for active training sample |
+ | na | nactive | unsigned int | 1 |number of active training points |
+ | c | class | std::string | |list of class names. |
+ | r | reclass | short | |list of class values (use same order as in class opt). |
+ | e | extent | std::string | |get boundary to classify from extent from polygons in vector file |
+
+Usage: pkann -t training [-i input -o output] [-cv value]
+
+
+Examples
+========
+Some examples how to use pkann can be found \ref examples_pkann "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
@@ -54,6 +129,7 @@ int main(int argc, char *argv[])
Optionpk<double> priors_opt("prior", "prior", "prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 )", 0.0);
Optionpk<string> priorimg_opt("pim", "priorimg", "prior probability image (multi-band img with band for each class","",2);
Optionpk<unsigned short> cv_opt("cv", "cv", "n-fold cross validation mode",0);
+ Optionpk<string> cmformat_opt("cmf","cmf","Format for confusion matrix (ascii or latex)","ascii");
Optionpk<unsigned int> nneuron_opt("nn", "nneuron", "number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons)", 5);
Optionpk<float> connection_opt("\0", "connection", "connection reate (default: 1.0 for a fully connected network)", 1.0);
Optionpk<float> learning_opt("l", "learning", "learning rate (default: 0.7)", 0.7);
@@ -78,6 +154,7 @@ int main(int argc, char *argv[])
Optionpk<unsigned int> nactive_opt("na", "nactive", "number of active training points",1);
Optionpk<string> classname_opt("c", "class", "list of class names.");
Optionpk<short> classvalue_opt("r", "reclass", "list of class values (use same order as in class opt).");
+ Optionpk<string> extent_opt("extent", "extent", "get boundary to classify from extent from polygons in vector file");
Optionpk<short> verbose_opt("v", "verbose", "set to: 0 (results only), 1 (confusion matrix), 2 (debug)",0,2);
band_opt.setHide(1);
@@ -99,6 +176,9 @@ int main(int argc, char *argv[])
weights_opt.setHide(1);
maxit_opt.setHide(1);
learning_opt.setHide(1);
+ extent_opt.setHide(1);
+
+ verbose_opt.setHide(2);
bool doProcess;//stop process when program was invoked with help option (-h --help)
try{
@@ -118,6 +198,7 @@ int main(int argc, char *argv[])
priors_opt.retrieveOption(argc,argv);
priorimg_opt.retrieveOption(argc,argv);
cv_opt.retrieveOption(argc,argv);
+ cmformat_opt.retrieveOption(argc,argv);
nneuron_opt.retrieveOption(argc,argv);
connection_opt.retrieveOption(argc,argv);
weights_opt.retrieveOption(argc,argv);
@@ -181,6 +262,22 @@ int main(int argc, char *argv[])
if(verbose_opt[0]>=1)
cout << "number of bootstrap aggregations: " << nbag << endl;
+ ImgReaderOgr extentReader;
+ OGRLayer *readLayer;
+
+ double ulx=0;
+ double uly=0;
+ double lrx=0;
+ double lry=0;
+ if(extent_opt.size()){
+ extentReader.open(extent_opt[0]);
+ readLayer = extentReader.getDataSource()->GetLayer(0);
+ if(!(extentReader.getExtent(ulx,uly,lrx,lry))){
+ cerr << "Error: could not get extent from " << extent_opt[0] << endl;
+ exit(1);
+ }
+ }
+
ImgWriterOgr activeWriter;
if(active_opt.size()){
ImgReaderOgr trainingReader(training_opt[0]);
@@ -227,7 +324,7 @@ int main(int argc, char *argv[])
classValueMap[classname_opt[iclass]]=classvalue_opt[iclass];
}
//----------------------------------- Training -------------------------------
- ConfusionMatrix cm;
+ confusionmatrix::ConfusionMatrix cm;
vector< vector<double> > offset(nbag);
vector< vector<double> > scale(nbag);
map<string,Vector2d<float> > trainingMap;
@@ -582,6 +679,8 @@ int main(int argc, char *argv[])
}//for ibag
if(cv_opt[0]>1){
assert(cm.nReference());
+ cm.setFormat(cmformat_opt[0]);
+ cm.reportSE95(false);
std::cout << cm << std::endl;
cout << "class #samples userAcc prodAcc" << endl;
double se95_ua=0;
@@ -629,22 +728,6 @@ int main(int argc, char *argv[])
cerr << error << endl;
exit(2);
}
- ImgReaderGdal maskReader;
- if(mask_opt.size()){
- try{
- if(verbose_opt[0]>=1)
- std::cout << "opening mask image file " << mask_opt[0] << std::endl;
- maskReader.open(mask_opt[0]);
- }
- catch(string error){
- cerr << error << endl;
- exit(2);
- }
- catch(...){
- cerr << "error catched" << endl;
- exit(1);
- }
- }
ImgReaderGdal priorReader;
if(priorimg_opt.size()){
try{
@@ -715,6 +798,45 @@ int main(int argc, char *argv[])
cerr << error << endl;
}
+ ImgWriterGdal maskWriter;
+ if(extent_opt.size()){
+ try{
+ maskWriter.open("/vsimem/mask.tif",ncol,nrow,1,GDT_Float32,imageType,option_opt);
+ maskWriter.GDALSetNoDataValue(nodata_opt[0]);
+ maskWriter.copyGeoTransform(testImage);
+ maskWriter.setProjection(testImage.getProjection());
+ vector<double> burnValues(1,1);//burn value is 1 (single band)
+ maskWriter.rasterizeOgr(extentReader,burnValues);
+ maskWriter.close();
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ mask_opt.clear();
+ mask_opt.push_back("/vsimem/mask.tif");
+ }
+ ImgReaderGdal maskReader;
+ if(mask_opt.size()){
+ try{
+ if(verbose_opt[0]>=1)
+ std::cout << "opening mask image file " << mask_opt[0] << std::endl;
+ maskReader.open(mask_opt[0]);
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ }
+
for(int iline=0;iline<nrow;++iline){
vector<float> buffer(ncol);
vector<short> lineMask;
@@ -788,13 +910,22 @@ int main(int argc, char *argv[])
//process per pixel
for(int icol=0;icol<ncol;++icol){
assert(hpixel[icol].size()==nband);
+ bool doClassify=true;
bool masked=false;
+ double geox=0;
+ double geoy=0;
+ if(extent_opt.size()){
+ doClassify=false;
+ testImage.image2geo(icol,iline,geox,geoy);
+ //check enveloppe first
+ if(uly>=geoy&&lry<=geoy&&ulx<=geox&&lrx>=geox){
+ doClassify=true;
+ }
+ }
if(mask_opt.size()){
//read mask
double colMask=0;
double rowMask=0;
- double geox=0;
- double geoy=0;
testImage.image2geo(icol,iline,geox,geoy);
maskReader.geo2image(geox,geoy,colMask,rowMask);
@@ -846,22 +977,25 @@ int main(int argc, char *argv[])
}
}
bool valid=false;
- for(int iband=0;iband<nband;++iband){
+ for(int iband=0;iband<hpixel[icol].size();++iband){
if(hpixel[icol][iband]){
valid=true;
break;
}
}
- if(!valid){
- if(classBag_opt.size())
- for(int ibag=0;ibag<nbag;++ibag)
- classBag[ibag][icol]=nodata_opt[0];
- classOut[icol]=nodata_opt[0];
- continue;//next column
- }
+ if(!valid)
+ doClassify=false;
+
}
- for(int iclass=0;iclass<nclass;++iclass)
+ for(short iclass=0;iclass<nclass;++iclass)
probOut[iclass][icol]=0;
+ if(!doClassify){
+ if(classBag_opt.size())
+ for(int ibag=0;ibag<nbag;++ibag)
+ classBag[ibag][icol]=nodata_opt[0];
+ classOut[icol]=nodata_opt[0];
+ continue;//next column
+ }
if(verbose_opt[0]>1)
std::cout << "begin classification " << std::endl;
//----------------------------------- classification -------------------
@@ -1161,21 +1295,21 @@ int main(int argc, char *argv[])
}
if(cm.nReference()){
std::cout << cm << std::endl;
- cout << "class #samples userAcc prodAcc" << endl;
- double se95_ua=0;
- double se95_pa=0;
- double se95_oa=0;
- double dua=0;
- double dpa=0;
- double doa=0;
- for(short iclass=0;iclass<cm.nClasses();++iclass){
- dua=cm.ua_pct(cm.getClass(iclass),&se95_ua);
- dpa=cm.pa_pct(cm.getClass(iclass),&se95_pa);
- cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
- }
- std::cout << "Kappa: " << cm.kappa() << std::endl;
- doa=cm.oa_pct(&se95_oa);
- std::cout << "Overall Accuracy: " << doa << " (" << se95_oa << ")" << std::endl;
+ // cout << "class #samples userAcc prodAcc" << endl;
+ // double se95_ua=0;
+ // double se95_pa=0;
+ // double se95_oa=0;
+ // double dua=0;
+ // double dpa=0;
+ // double doa=0;
+ // for(short iclass=0;iclass<cm.nClasses();++iclass){
+ // dua=cm.ua_pct(cm.getClass(iclass),&se95_ua);
+ // dpa=cm.pa_pct(cm.getClass(iclass),&se95_pa);
+ // cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
+ // }
+ // std::cout << "Kappa: " << cm.kappa() << std::endl;
+ // doa=cm.oa_pct(&se95_oa);
+ // std::cout << "Overall Accuracy: " << doa << " (" << se95_oa << ")" << std::endl;
}
}
try{
diff --git a/src/apps/pkascii2img.cc b/src/apps/pkascii2img.cc
index fbf24a6..6eac5ea 100644
--- a/src/apps/pkascii2img.cc
+++ b/src/apps/pkascii2img.cc
@@ -23,6 +23,52 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <assert.h>
#include "imageclasses/ImgWriterGdal.h"
+/******************************************************************************/
+/*! \page pkascii2img pkascii2img
+ program to create raster image based on ascii file
+## SYNOPSIS
+
+<code>
+ Usage: pkascii2img -i input.txt -o output
+</code>
+
+<code>
+
+
+ Options: [-ot type] [-of GDALformat] [-co NAME=VALUE]* [-dx value] [-dy value] [-ulx value] [-uly value] [-ct filename] [-a_srs EPSG:number] [-d description]
+
+</code>
+
+\section pkascii2img_description Description
+
+The utility pkascii2img creates a raster dataset from an ASCII textfile. The textfile is in matrix format (rows and columns). The dimensions in x and y are defined by the number of columns and rows respectively. The georeferencing can be defined by providing the options for cell size (-dx -dy), upper left position (-ulx -uly) and the projection (-a_srs). Some dataset formats can also store a description (-d) and a color table (-ct).
+
+\section pkascii2img_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input ASCII file |
+ | o | output | std::string | |Output image file |
+ | ot | otype | std::string | Byte |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | GTiff |image type string (see also gdal_translate) |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ulx | ulx | double | 0 |Upper left x value bounding box (in geocoordinates if georef is true) |
+ | uly | uly | double | 0 |Upper left y value bounding box (in geocoordinates if georef is true) |
+ | dx | dx | double | |Output resolution in x (in meter) |
+ | dy | dy | double | |Output resolution in y (in meter) |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | a_srs | a_srs | std::string | |Override the projection for the output file |
+ | d | description | std::string | |Set image description |
+
+Usage: pkascii2img -i input.txt -o output
+
+
+Examples
+========
+Some examples how to use pkascii2img can be found \ref examples_pkascii2img "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pkascii2ogr.cc b/src/apps/pkascii2ogr.cc
index 1cc32b3..1558adb 100644
--- a/src/apps/pkascii2ogr.cc
+++ b/src/apps/pkascii2ogr.cc
@@ -23,6 +23,50 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "imageclasses/ImgWriterOgr.h"
+/******************************************************************************/
+/*! \page pkascii2ogr pkascii2ogr
+ program to create vector points or polygons from text file
+## SYNOPSIS
+
+<code>
+ Usage: pkascii2ogr -i input.txt -o output
+</code>
+
+<code>
+
+
+ Options: [-f OGRformat] [-x col] [-y col] [--line] [-n fieldname -ot type]* [-fs separator]
+
+</code>
+
+\section pkascii2ogr_description Description
+
+Poor man's utility to create a vector dataset (points or single polygon) from an ASCII textfile. A better alternative is to use <a href="http://www.gdal.org/drv_vrt.html">virtual vector datasets</a>. Specify the position of the vertices (x and y) in the columns defined by the options (-x -y), starting from 0. The default is to use the first (-dx 0) and second (-dx 1) columns for x and y respectvely. Specify the names and types of the remaining columns in your input file via the option pa [...]
+
+\section pkascii2ogr_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input ASCII file |
+ | o | output | std::string | |Output file |
+ | f | f | std::string | ESRI Shapefile |Output sample file format |
+ | x | x | short | 0 |column number of x (0) |
+ | y | y | short | 1 |column number of y (1) |
+ | l | line | bool | false |create OGRPolygon as geometry instead of points. Fields are taken from first point and polygon is automatically closed (no need to repeat first point at last line). (false: use OGRPoint) |
+ | n | name | std::string | |Field names for the columns in the input ascii file |
+ | ot | ot | std::string | Real |Field type (Real, Integer, String) for each of the fields as defined by name |
+ | a_srs | a_srs | std::string | epsg:4326 |Override the projection for the output file, use epsg:<code> or Wkt string |
+ | fs | fs | char | |field separator. |
+
+Usage: pkascii2ogr -i input.txt -o output
+
+
+Examples
+========
+Some examples how to use pkascii2ogr can be found \ref examples_pkascii2ogr "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pkcomposite.cc b/src/apps/pkcomposite.cc
index 8fa7456..8928667 100644
--- a/src/apps/pkcomposite.cc
+++ b/src/apps/pkcomposite.cc
@@ -28,8 +28,91 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "algorithms/StatFactory.h"
+/******************************************************************************/
+/*! \page pkcomposite pkcomposite
+
+ program to mosaic and composite geo-referenced images
+## SYNOPSIS
+
+<code>
+ Usage: pkcomposite -i input [-i input]* -o output
+</code>
+
+<code>
+
+ Options: [-b band]* [-dx xres] [-dy yres] [-e vector] [-ulx ULX -uly ULY -lrx LRX -lry LRY] [-cr rule] [-cb band] [-srcnodata value] [-bndnodata band] [-min value] [-max value] [-dstnodata value] [-r resampling_method] [-ot {Byte / Int16 / UInt16 / UInt32 / Int32 / Float32 / Float64 / CInt16 / CInt32 / CFloat32 / CFloat64}] [-of format] [-co NAME=VALUE]* [-a_srs epsg:number]
+
+ Advanced options:
+ [-file] [-w weight]* [-c class]* [-ct colortable] [-d description]
+</code>
+
+\section pkcomposite_description Description
+
+The utility pkcomposite can be used to \em mosaic and \em composite multiple (georeferenced) raster datasets. A mosaic can merge images with different geographical extents into a single larger image. Compositing resolves the overlapping pixels according to some rule (e.g, the median of all overlapping pixels). This utility is complementary to GDAL, which currently does not support a composite step. Input datasets can have different bounding boxes and spatial resolutionsresolution.
+
+\anchor pkcomposite_rules
+composite rule | composite output
+------------- | -------------
+overwrite | Overwrite overlapping pixels: the latter input image on the command line overrules the previous image
+maxndvi | Create a maximum NDVI (normalized difference vegetation index) composite from multi-band input images. Use option -cb to set the indexes of the red and near infrared bands respectively (e.g., -cb 0 -cb 1)
+maxband | Select the pixel with a maximum value in the band specified by option -cb
+minband | Select the pixel with a minimum value in the band specified by option -cb
+mean | Calculate the mean (average) of overlapping pixels
+stdev | Calculate the standard deviation of overlapping pixels
+median | Calculate the median of overlapping pixels
+mode | Select the mode of overlapping pixels (maximum voting): use for Byte images only
+sum | Calculate the arithmetic sum of overlapping pixels
+maxallbands | For each individual band, assign the maximum value found in all overlapping pixels. Unlike maxband, output band values cannot be attributed to a single (date) pixel in the input time series
+minallbands | For each individual band, assign the minimum value found in all overlapping pixels. Unlike minband, output band values cannot be attributed to a single (date) pixel in the input time series
+
+\section pkcomposite_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file(s). If input contains multiple images, a multi-band output is created |
+ | o | output | std::string | |Output image file |
+ | b | band | int | |band index(es) to crop (leave empty if all bands must be retained) |
+ | dx | dx | double | |Output resolution in x (in meter) (empty: keep original resolution) |
+ | dy | dy | double | |Output resolution in y (in meter) (empty: keep original resolution) |
+ | e | extent | std::string | |get boundary from extent from polygons in vector file |
+ | cut | crop_to_cutline | bool | false |Crop the extent of the target dataset to the extent of the cutline |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask (0 is nodata) |
+ | msknodata | msknodata | float | 0 |Mask value not to consider for composite
+ | ulx | ulx | double | 0 |Upper left x value bounding box |
+ | uly | uly | double | 0 |Upper left y value bounding box |
+ | lrx | lrx | double | 0 |Lower right x value bounding box |
+ | lry | lry | double | 0 |Lower right y value bounding box |
+ | cr | crule | std::string | overwrite |Composite rule (overwrite, maxndvi, maxband, minband, mean, mode (only for byte images), median, sum, maxallbands, minallbands, stdev |
+ | cb | cband | int | 0 |band index used for the composite rule (e.g., for ndvi, use --cband=0 --cband=1 with 0 and 1 indices for red and nir band respectively |
+ | srcnodata | srcnodata | double | |invalid value(s) for input raster dataset |
+ | bndnodata | bndnodata | int | 0 |Band(s) in input image to check if pixel is valid (used for srcnodata, min and max options) |
+ | min | min | double | |flag values smaller or equal to this value as invalid. |
+ | max | max | double | |flag values larger or equal to this value as invalid. |
+ | dstnodata | dstnodata | double | 0 |nodata value to put in output raster dataset if not valid or out of bounds. |
+ | r | resampling-method | std::string | near |Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation). |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | a_srs | a_srs | std::string | |Override the spatial reference for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid |
+ | file | file | short | 0 |write number of observations (1) or sequence nr of selected file (2) for each pixels as additional layer in composite |
+ | w | weight | short | 1 |Weights (type: short) for the composite, use one weight for each input file in same order as input files are provided). Use value 1 for equal weights. |
+ | c | class | short | 0 |classes for multi-band output image: each band represents the number of observations for one specific class. Use value 0 for no multi-band output image. |
+ | ct | ct | std::string | |color table file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | d | description | std::string | |Set image description |
+
+Examples
+========
+Some examples how to use pkcomposite can be found \ref examples_pkcomposite "here"
+
+FAQ
+===
+Frequently asked questions on pkcomposite can be found \ref faq_pkcomposite "here
+**/
+
namespace crule{
- enum CRULE_TYPE {overwrite=0, maxndvi=1, maxband=2, minband=3, validband=4, mean=5, mode=6, median=7,sum=8,minallbands=9,maxallbands=10};
+ enum CRULE_TYPE {overwrite=0, maxndvi=1, maxband=2, minband=3, validband=4, mean=5, mode=6, median=7,sum=8,minallbands=9,maxallbands=10,stdev=11};
}
using namespace std;
@@ -42,17 +125,20 @@ int main(int argc, char *argv[])
Optionpk<double> dx_opt("dx", "dx", "Output resolution in x (in meter) (empty: keep original resolution)");
Optionpk<double> dy_opt("dy", "dy", "Output resolution in y (in meter) (empty: keep original resolution)");
Optionpk<string> extent_opt("e", "extent", "get boundary from extent from polygons in vector file");
+ Optionpk<bool> cut_opt("cut", "crop_to_cutline", "Crop the extent of the target dataset to the extent of the cutline.",false);
+ Optionpk<string> mask_opt("m", "mask", "Use the first band of the specified file as a validity mask (0 is nodata).");
+ Optionpk<float> msknodata_opt("msknodata", "msknodata", "Mask value not to consider for composite.", 0);
Optionpk<double> ulx_opt("ulx", "ulx", "Upper left x value bounding box", 0.0);
Optionpk<double> uly_opt("uly", "uly", "Upper left y value bounding box", 0.0);
Optionpk<double> lrx_opt("lrx", "lrx", "Lower right x value bounding box", 0.0);
Optionpk<double> lry_opt("lry", "lry", "Lower right y value bounding box", 0.0);
- Optionpk<string> crule_opt("cr", "crule", "Composite rule (overwrite, maxndvi, maxband, minband, mean, mode (only for byte images), median, sum, maxallbands, minallbands", "overwrite");
+ Optionpk<string> crule_opt("cr", "crule", "Composite rule (overwrite, maxndvi, maxband, minband, mean, mode (only for byte images), median, sum, maxallbands, minallbands, stdev", "overwrite");
Optionpk<int> ruleBand_opt("cb", "cband", "band index used for the composite rule (e.g., for ndvi, use --cband=0 --cband=1 with 0 and 1 indices for red and nir band respectively", 0);
- Optionpk<double> srcnodata_opt("srcnodata", "srcnodata", "invalid value for input image");
- Optionpk<int> bndnodata_opt("bndnodata", "bndnodata", "Bands in input image to check if pixel is valid (used for srcnodata, min and max options)", 0);
+ Optionpk<double> srcnodata_opt("srcnodata", "srcnodata", "invalid value(s) for input raster dataset");
+ Optionpk<int> bndnodata_opt("bndnodata", "bndnodata", "Band(s) in input image to check if pixel is valid (used for srcnodata, min and max options)", 0);
Optionpk<double> minValue_opt("min", "min", "flag values smaller or equal to this value as invalid.");
Optionpk<double> maxValue_opt("max", "max", "flag values larger or equal to this value as invalid.");
- Optionpk<double> dstnodata_opt("dstnodata", "dstnodata", "nodata value to put in output image if not valid or out of bounds.", 0);
+ Optionpk<double> dstnodata_opt("dstnodata", "dstnodata", "nodata value to put in output raster dataset if not valid or out of bounds.", 0);
Optionpk<string> resample_opt("r", "resampling-method", "Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation).", "near");
Optionpk<string> otype_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image", "");
Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image");
@@ -63,14 +149,18 @@ int main(int argc, char *argv[])
Optionpk<short> class_opt("c", "class", "classes for multi-band output image: each band represents the number of observations for one specific class. Use value 0 for no multi-band output image.", 0);
Optionpk<string> colorTable_opt("ct", "ct", "color table file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
Optionpk<string> description_opt("d", "description", "Set image description");
- Optionpk<bool> verbose_opt("v", "verbose", "verbose", false,2);
+ Optionpk<short> verbose_opt("v", "verbose", "verbose", 0,2);
+ extent_opt.setHide(1);
+ cut_opt.setHide(1);
+ mask_opt.setHide(1);
+ msknodata_opt.setHide(1);
+ option_opt.setHide(1);
file_opt.setHide(1);
weight_opt.setHide(1);
class_opt.setHide(1);
colorTable_opt.setHide(1);
description_opt.setHide(1);
- verbose_opt.setHide(1);
bool doProcess;//stop process when program was invoked with help option (-h --help)
try{
@@ -80,6 +170,9 @@ int main(int argc, char *argv[])
dx_opt.retrieveOption(argc,argv);
dy_opt.retrieveOption(argc,argv);
extent_opt.retrieveOption(argc,argv);
+ cut_opt.retrieveOption(argc,argv);
+ mask_opt.retrieveOption(argc,argv);
+ msknodata_opt.retrieveOption(argc,argv);
ulx_opt.retrieveOption(argc,argv);
uly_opt.retrieveOption(argc,argv);
lrx_opt.retrieveOption(argc,argv);
@@ -130,6 +223,7 @@ int main(int argc, char *argv[])
cruleMap["sum"]=crule::sum;
cruleMap["maxallbands"]=crule::maxallbands;
cruleMap["minallbands"]=crule::minallbands;
+ cruleMap["stdev"]=crule::stdev;
if(srcnodata_opt.size()){
while(srcnodata_opt.size()<bndnodata_opt.size())
@@ -165,6 +259,10 @@ int main(int argc, char *argv[])
exit(1);
}
+ if(input_opt.empty()){
+ std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl;
+ exit(0);
+ }
int nband=0;
int nwriteBand=0;
int writeBand=0;
@@ -201,15 +299,41 @@ int main(int argc, char *argv[])
//get bounding box from extentReader if defined
ImgReaderOgr extentReader;
if(extent_opt.size()){
- extentReader.open(extent_opt[0]);
- if(!(extentReader.getExtent(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){
- cerr << "Error: could not get extent from " << extent_opt[0] << endl;
- exit(1);
+ double e_ulx;
+ double e_uly;
+ double e_lrx;
+ double e_lry;
+ for(int iextent=0;iextent<extent_opt.size();++iextent){
+ extentReader.open(extent_opt[iextent]);
+ if(!(extentReader.getExtent(e_ulx,e_uly,e_lrx,e_lry))){
+ cerr << "Error: could not get extent from " << extent_opt[0] << endl;
+ exit(1);
}
- else if(verbose_opt[0])
- cout << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
+ if(!iextent){
+ ulx_opt[0]=e_ulx;
+ uly_opt[0]=e_uly;
+ lrx_opt[0]=e_lrx;
+ lry_opt[0]=e_lry;
+ }
+ else{
+ if(e_ulx<ulx_opt[0])
+ ulx_opt[0]=e_ulx;
+ if(e_uly>uly_opt[0])
+ uly_opt[0]=e_uly;
+ if(e_lrx>lrx_opt[0])
+ lrx_opt[0]=e_lrx;
+ if(e_lry<lry_opt[0])
+ lry_opt[0]=e_lry;
+ }
+ extentReader.close();
+ }
+ if(cut_opt.size())
+ extentReader.open(extent_opt[0]);
}
+ if(verbose_opt[0])
+ cout << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
+
ImgReaderGdal imgReader;
string theProjection="";
GDALColorTable* theColorTable=NULL;
@@ -275,6 +399,9 @@ int main(int argc, char *argv[])
case(crule::median):
cout << "Composite rule: median" << endl;
break;
+ case(crule::stdev):
+ cout << "Composite rule: stdev" << endl;
+ break;
case(crule::sum):
cout << "Composite rule: sum" << endl;
break;
@@ -450,6 +577,61 @@ int main(int argc, char *argv[])
else if(theColorTable)
imgWriter.setColorTable(theColorTable);
}
+
+ ImgWriterGdal maskWriter;
+ if(extent_opt.size()&&cut_opt[0]){
+ try{
+ maskWriter.open("/vsimem/mask.tif",ncol,nrow,1,GDT_Float32,"GTiff",option_opt);
+ double gt[6];
+ gt[0]=minULX;
+ gt[1]=dx;
+ gt[2]=0;
+ gt[3]=maxULY;
+ gt[4]=0;
+ gt[5]=-dy;
+ maskWriter.setGeoTransform(gt);
+ if(projection_opt.size())
+ maskWriter.setProjectionProj4(projection_opt[0]);
+ else if(theProjection!=""){
+ if(verbose_opt[0])
+ cout << "projection: " << theProjection << endl;
+ maskWriter.setProjection(theProjection);
+ }
+
+ //todo: handle multiple extent options
+ vector<double> burnValues(1,1);//burn value is 1 (single band)
+ maskWriter.rasterizeOgr(extentReader,burnValues);
+ maskWriter.close();
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ //todo: support multiple masks
+ mask_opt.clear();
+ mask_opt.push_back("/vsimem/mask.tif");
+ }
+ ImgReaderGdal maskReader;
+ if(mask_opt.size()){
+ try{
+ if(verbose_opt[0]>=1)
+ std::cout << "opening mask image file " << mask_opt[0] << std::endl;
+ maskReader.open(mask_opt[0]);
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ }
+
//create composite image
if(verbose_opt[0])
cout << "creating composite image" << endl;
@@ -476,10 +658,22 @@ int main(int argc, char *argv[])
double progress=0;
pfnProgress(progress,pszMessage,pProgressArg);
for(int irow=0;irow<imgWriter.nrOfRow();++irow){
+ vector<float> lineMask;
Vector2d< vector<double> > storeBuffer;
vector<bool> writeValid(ncol);
- if(cruleMap[crule_opt[0]]==crule::mean||cruleMap[crule_opt[0]]==crule::median||cruleMap[crule_opt[0]]==crule::sum||cruleMap[crule_opt[0]]==crule::minallbands||cruleMap[crule_opt[0]]==crule::maxallbands)//mean, median, (weighted) sum value, minallbands, maxallbands
+ //convert irow to geo
+ double x=0;
+ double y=0;
+ imgWriter.image2geo(0,irow,x,y);
+
+
+ if(cruleMap[crule_opt[0]]==crule::mean ||
+ cruleMap[crule_opt[0]]==crule::median ||
+ cruleMap[crule_opt[0]]==crule::sum ||
+ cruleMap[crule_opt[0]]==crule::minallbands ||
+ cruleMap[crule_opt[0]]==crule::maxallbands ||
+ cruleMap[crule_opt[0]]==crule::stdev)
storeBuffer.resize(nband,ncol);
for(int icol=0;icol<imgWriter.nrOfCol();++icol){
writeValid[icol]=false;
@@ -493,6 +687,9 @@ int main(int argc, char *argv[])
writeBuffer[iband][icol]=dstnodata_opt[0];
}
}
+
+ double oldRowMask=-1;//keep track of row mask to optimize number of line readings
+
for(int ifile=0;ifile<input_opt.size();++ifile){
try{
imgReader.open(input_opt[ifile]);
@@ -526,10 +723,6 @@ int main(int argc, char *argv[])
endCol=imgReader.nrOfCol()-1;
int readncol=endCol-startCol+1;
- //convert irow to geo
- double x=0;
- double y=0;
- imgWriter.image2geo(0,irow,x,y);
//lookup corresponding row for irow in this file
imgReader.geo2image(x,y,readCol,readRow);
if(readRow<0||readRow>=imgReader.nrOfRow()){
@@ -550,7 +743,42 @@ int main(int argc, char *argv[])
}
for(int ib=0;ib<ncol;++ib){
- assert(imgWriter.image2geo(ib,irow,x,y));
+ imgWriter.image2geo(ib,irow,x,y);
+ //check mask first
+ bool valid=true;
+ if(mask_opt.size()){
+ //read mask
+ double colMask=0;
+ double rowMask=0;
+
+ maskReader.geo2image(x,y,colMask,rowMask);
+ colMask=static_cast<int>(colMask);
+ rowMask=static_cast<int>(rowMask);
+ if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
+ if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
+
+ assert(rowMask>=0&&rowMask<maskReader.nrOfRow());
+ try{
+ maskReader.readData(lineMask,GDT_Float32,static_cast<int>(rowMask));
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ exit(1);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(3);
+ }
+ oldRowMask=rowMask;
+ }
+ if(lineMask[colMask]==msknodata_opt[0])
+ valid=false;
+ }
+ }
+
+ if(!valid)
+ continue;
+
//lookup corresponding row for irow in this file
imgReader.geo2image(x,y,readCol,readRow);
if(readCol<0||readCol>=imgReader.nrOfCol())
@@ -744,6 +972,7 @@ int main(int argc, char *argv[])
case(crule::sum)://sum value
case(crule::minallbands)://minimum for each and every band
case(crule::maxallbands)://maximum for each and every band
+ case(crule::stdev)://maximum for each and every band
switch(theResample){
case(BILINEAR):
lowerCol=readCol-0.5;
@@ -816,6 +1045,7 @@ int main(int argc, char *argv[])
case(crule::sum):
case(crule::minallbands):
case(crule::maxallbands):
+ case(crule::stdev):
switch(theResample){
case(BILINEAR):
lowerCol=readCol-0.5;
@@ -945,46 +1175,48 @@ int main(int argc, char *argv[])
// assert(writeBuffer[bands[iband]].size()==imgWriter.nrOfCol());
assert(writeBuffer[iband].size()==imgWriter.nrOfCol());
for(int icol=0;icol<imgWriter.nrOfCol();++icol){
- switch(cruleMap[crule_opt[0]]){
- case(crule::mean):
- if(file_opt[0]<2)
- // assert(storeBuffer[bands[iband]][icol].size()==fileBuffer[icol]);
- if(storeBuffer[bands[iband]][icol].size())
- writeBuffer[iband][icol]=stat.mean(storeBuffer[bands[iband]][icol]);
- break;
- case(crule::median):
- if(file_opt[0]<2)
- // assert(storeBuffer[bands[iband]][icol].size()==fileBuffer[icol]);
- if(storeBuffer[bands[iband]][icol].size())
- writeBuffer[iband][icol]=stat.median(storeBuffer[bands[iband]][icol]);
- break;
- case(crule::sum)://sum
- if(file_opt[0]<2)
- // assert(storeBuffer[bands[iband]][icol].size()==fileBuffer[icol]);
- if(storeBuffer[bands[iband]][icol].size())
- writeBuffer[iband][icol]=stat.sum(storeBuffer[bands[iband]][icol]);
- break;
- case(crule::minallbands):
- if(file_opt[0]<2)
- // assert(storeBuffer[bands[iband]][icol].size()==fileBuffer[icol]);
- if(storeBuffer[bands[iband]][icol].size())
- writeBuffer[iband][icol]=stat.mymin(storeBuffer[bands[iband]][icol]);
- break;
- case(crule::maxallbands):
- if(file_opt[0]<2)
- // assert(storeBuffer[bands[iband]][icol].size()==fileBuffer[icol]);
- if(storeBuffer[bands[iband]][icol].size())
- writeBuffer[iband][icol]=stat.mymax(storeBuffer[bands[iband]][icol]);
- break;
- default:
- break;
- }
+ try{
+ switch(cruleMap[crule_opt[0]]){
+ case(crule::mean):
+ // writeBuffer[iband][icol]=stat.mean(storeBuffer[bands[iband]][icol]);
+ writeBuffer[iband][icol]=stat.mean(storeBuffer[iband][icol]);
+ break;
+ case(crule::median):
+ // writeBuffer[iband][icol]=stat.median(storeBuffer[bands[iband]][icol]);
+ writeBuffer[iband][icol]=stat.median(storeBuffer[iband][icol]);
+ break;
+ case(crule::sum):
+ // writeBuffer[iband][icol]=stat.sum(storeBuffer[bands[iband]][icol]);
+ writeBuffer[iband][icol]=stat.sum(storeBuffer[iband][icol]);
+ break;
+ case(crule::minallbands):
+ // writeBuffer[iband][icol]=stat.mymin(storeBuffer[bands[iband]][icol]);
+ writeBuffer[iband][icol]=stat.mymin(storeBuffer[iband][icol]);
+ break;
+ case(crule::maxallbands):
+ // writeBuffer[iband][icol]=stat.mymax(storeBuffer[bands[iband]][icol]);
+ writeBuffer[iband][icol]=stat.mymax(storeBuffer[iband][icol]);
+ break;
+ case(crule::stdev):
+ // writeBuffer[iband][icol]=sqrt(stat.var(storeBuffer[bands[iband]][icol]));
+ writeBuffer[iband][icol]=sqrt(stat.var(storeBuffer[iband][icol]));
+ break;
+ default:
+ break;
+ }
+ }
+ catch(string error){
+ if(verbose_opt[0])
+ cerr << error << endl;
+ writeBuffer[iband][icol]=dstnodata_opt[0];
+ continue;
+ }
}
try{
imgWriter.writeData(writeBuffer[iband],GDT_Float64,irow,iband);
}
catch(string error){
- cerr << "error writing image file " << output_opt[0] << ": " << error << endl;
+ cerr << error << " in " << output_opt[0] << endl;
throw;
}
}
@@ -993,7 +1225,7 @@ int main(int argc, char *argv[])
imgWriter.writeData(fileBuffer,GDT_Int16,irow,bands.size());
}
catch(string error){
- cerr << "error writing image file " << output_opt[0] << ": " << error << endl;
+ cerr << error << " in " << output_opt[0] << endl;
throw;
}
}
@@ -1001,6 +1233,11 @@ int main(int argc, char *argv[])
progress=static_cast<float>(irow+1.0)/imgWriter.nrOfRow();
pfnProgress(progress,pszMessage,pProgressArg);
}
+ if(extent_opt.size()&&cut_opt.size()){
+ extentReader.close();
+ }
+ if(mask_opt.size())
+ maskReader.close();
imgWriter.close();
}
diff --git a/src/apps/pkcreatect.cc b/src/apps/pkcreatect.cc
index 0f8ae51..89313d0 100644
--- a/src/apps/pkcreatect.cc
+++ b/src/apps/pkcreatect.cc
@@ -22,6 +22,52 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgWriterGdal.h"
#include "base/Optionpk.h"
+/******************************************************************************/
+/*! \page pkcreatect pkcreatect
+ program to create and import colour table to GTiff image
+## SYNOPSIS
+
+<code>
+ Usage: pkcreatect -i input.txt -o output [-ct colortable | -min value -max value]
+</code>
+
+<code>
+
+
+ Options: [--grey] [-of GDALformat] [-co option]* [-d description]
+
+ Advanced options: [--legend filename [--dim cols --dim rows]]
+</code>
+
+\section pkascii2ogr_description Description
+
+Utility to include a color table to a raster dataset. You can either define an existing color table (ASCII text file) with the option -ct or define a minimum (-min) and maximum (-max) value.
+
+\section pkcreatect_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file |
+ | o | output | std::string | |Output image file |
+ | l | legend | std::string | |Create legend as png file |
+ | dim | dim | short | 100 |number of columns and rows in legend. |
+ | min | min | double | 0 |minimum value |
+ | max | max | double | 100 |maximum value |
+ | g | grey | bool | false |grey scale |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | d | description | std::string | |Set image description |
+ | of | oformat | std::string | GTiff |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+
+Usage: pkcreatect -i input.txt -o output [-ct colortable | -min value -max value]
+
+
+Examples
+========
+Some examples how to use pkcreatect can be found \ref examples_pkcreatect "here"
+**/
+
using namespace std;
int main(int argc,char **argv) {
diff --git a/src/apps/pkcrop.cc b/src/apps/pkcrop.cc
index 526a498..384ca23 100644
--- a/src/apps/pkcrop.cc
+++ b/src/apps/pkcrop.cc
@@ -29,6 +29,69 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "algorithms/Egcs.h"
+/******************************************************************************/
+/*! \page pkcrop pkcrop
+ perform raster data operations on image such as crop, extract and stack bands
+## SYNOPSIS
+
+<code>
+ Usage: pkcrop -i input -o output
+</code>
+
+<code>
+
+ Options: [-of out_format] [-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}] [-b band]* [-ulx ULX -uly ULY -lrx LRX -lry LRY] [-dx xres] [-dy yres] [-r resampling_method] [-a_srs epsg:number] [-nodata value]
+
+ Advanced options:
+ [-e vector [-cut]] [-co NAME=VALUE]* [-x center_x -y center_y] [-nx size_x -ny size_y] [-ns nsample -nl nlines] [-as min -as max] [-s scale]* [-off offset]* [-ct colortable] [-d description]
+</code>
+
+\section pkcrop_description Description
+
+The utility pkcrop can subset and stack raster images. In the spatial domain it can crop a bounding box from a larger image. The output bounding box is selected by setting the new corner coordinates using the options -ulx -uly -lrx -lry. Alternatively you can set the new image center (-x -y) and size. This can be done either in projected coordinates (using the options -nx -ny) or in image coordinates (using the options -ns -nl). You can also use a vector file to set the new bounding box [...]
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file(s). If input contains multiple images, a multi-band output is created |
+ | o | output | std::string | |Output image file |
+ | a_srs | a_srs | std::string | |Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid |
+ | ulx | ulx | double | 0 |Upper left x value bounding box |
+ | uly | uly | double | 0 |Upper left y value bounding box |
+ | lrx | lrx | double | 0 |Lower right x value bounding box |
+ | lry | lry | double | 0 |Lower right y value bounding box |
+ | b | band | int | |band index to crop (leave empty to retain all bands) |
+ | as | autoscale | double | |scale output to min and max, e.g., --autoscale 0 --autoscale 255 |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | dx | dx | double | |Output resolution in x (in meter) (empty: keep original resolution) |
+ | dy | dy | double | |Output resolution in y (in meter) (empty: keep original resolution) |
+ | r | resampling-method | std::string | near |Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation). |
+ | e | extent | std::string | |get boundary from extent from polygons in vector file |
+ | cut | crop_to_cutline | bool | false |Crop the extent of the target dataset to the extent of the cutline |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask (0 is nodata) |
+ | msknodata | msknodata | float | 0 |Mask value not to consider for composite
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | x | x | double | |x-coordinate of image center to crop (in meter) |
+ | y | y | double | |y-coordinate of image center to crop (in meter) |
+ | nx | nx | double | |image size in x to crop (in meter) |
+ | ny | ny | double | |image size in y to crop (in meter) |
+ | ns | ns | int | |number of samples to crop (in pixels) |
+ | nl | nl | int | |number of lines to crop (in pixels) |
+ | s | scale | double | |output=scale*input+offset |
+ | off | offset | double | |output=scale*input+offset |
+ | nodata | nodata | float | |Nodata value to put in image if out of bounds. |
+ | d | description | std::string | |Set image description |
+
+Usage: pkcrop -i input -o output
+
+
+Examples
+========
+Some examples how to use pkcrop can be found \ref examples_pkcrop "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
@@ -36,8 +99,11 @@ int main(int argc, char *argv[])
Optionpk<string> input_opt("i", "input", "Input image file(s). If input contains multiple images, a multi-band output is created");
Optionpk<string> output_opt("o", "output", "Output image file");
Optionpk<string> projection_opt("a_srs", "a_srs", "Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid");
+ //todo: support layer names
Optionpk<string> extent_opt("e", "extent", "get boundary from extent from polygons in vector file");
- Optionpk<bool> mask_opt("m","mask","mask values out of polygon in extent file to flag option (tip: for better performance, use gdal_rasterize -i -burn 0 -l extent extent.shp output (with output the result of pkcrop)",false);
+ Optionpk<bool> cut_opt("cut", "crop_to_cutline", "Crop the extent of the target dataset to the extent of the cutline.",false);
+ Optionpk<string> mask_opt("m", "mask", "Use the first band of the specified file as a validity mask (0 is nodata).");
+ Optionpk<float> msknodata_opt("msknodata", "msknodata", "Mask value not to consider for composite.", 0);
Optionpk<double> ulx_opt("ulx", "ulx", "Upper left x value bounding box", 0.0);
Optionpk<double> uly_opt("uly", "uly", "Upper left y value bounding box", 0.0);
Optionpk<double> lrx_opt("lrx", "lrx", "Lower right x value bounding box", 0.0);
@@ -58,13 +124,15 @@ int main(int argc, char *argv[])
Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image");
Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
- Optionpk<double> nodata_opt("nodata", "nodata", "Nodata value to put in image if out of bounds.");
+ Optionpk<float> nodata_opt("nodata", "nodata", "Nodata value to put in image if out of bounds.");
Optionpk<string> resample_opt("r", "resampling-method", "Resampling method (near: nearest neighbor, bilinear: bi-linear interpolation).", "near");
Optionpk<string> description_opt("d", "description", "Set image description");
Optionpk<short> verbose_opt("v", "verbose", "verbose", 0,2);
extent_opt.setHide(1);
+ cut_opt.setHide(1);
mask_opt.setHide(1);
+ msknodata_opt.setHide(1);
option_opt.setHide(1);
cx_opt.setHide(1);
cy_opt.setHide(1);
@@ -95,7 +163,9 @@ int main(int argc, char *argv[])
dy_opt.retrieveOption(argc,argv);
resample_opt.retrieveOption(argc,argv);
extent_opt.retrieveOption(argc,argv);
+ cut_opt.retrieveOption(argc,argv);
mask_opt.retrieveOption(argc,argv);
+ msknodata_opt.retrieveOption(argc,argv);
option_opt.retrieveOption(argc,argv);
cx_opt.retrieveOption(argc,argv);
cy_opt.retrieveOption(argc,argv);
@@ -113,7 +183,6 @@ int main(int argc, char *argv[])
std::cout << predefinedString << std::endl;
exit(0);
}
- //test
if(verbose_opt[0])
cout << setprecision(12) << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
@@ -133,7 +202,7 @@ int main(int argc, char *argv[])
exit(0);
}
- double nodataValue=nodata_opt.size()? nodata_opt[0] : 0;
+ float nodataValue=nodata_opt.size()? nodata_opt[0] : 0;
RESAMPLE theResample;
if(resample_opt[0]=="near"){
theResample=NEAR;
@@ -167,10 +236,13 @@ int main(int argc, char *argv[])
dy=dy_opt[0];
bool isGeoRef=false;
+ string projectionString;
for(int iimg=0;iimg<input_opt.size();++iimg){
imgReader.open(input_opt[iimg]);
if(!isGeoRef)
isGeoRef=imgReader.isGeoRef();
+ if(imgReader.isGeoRef()&&projection_opt.empty())
+ projectionString=imgReader.getProjection();
if(dx_opt.empty()){
if(!iimg||imgReader.getDeltaX()<dx)
dx=imgReader.getDeltaX();
@@ -211,20 +283,37 @@ int main(int argc, char *argv[])
double croplry=lry_opt[0];
//get bounding box from extentReader if defined
ImgReaderOgr extentReader;
- //test
- if(verbose_opt[0])
- cout << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
if(extent_opt.size()){
+ double e_ulx;
+ double e_uly;
+ double e_lrx;
+ double e_lry;
for(int iextent=0;iextent<extent_opt.size();++iextent){
extentReader.open(extent_opt[iextent]);
- if(!(extentReader.getExtent(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){
+ if(!(extentReader.getExtent(e_ulx,e_uly,e_lrx,e_lry))){
cerr << "Error: could not get extent from " << extent_opt[0] << endl;
exit(1);
}
+ if(!iextent){
+ ulx_opt[0]=e_ulx;
+ uly_opt[0]=e_uly;
+ lrx_opt[0]=e_lrx;
+ lry_opt[0]=e_lry;
+ }
+ else{
+ if(e_ulx<ulx_opt[0])
+ ulx_opt[0]=e_ulx;
+ if(e_uly>uly_opt[0])
+ uly_opt[0]=e_uly;
+ if(e_lrx>lrx_opt[0])
+ lrx_opt[0]=e_lrx;
+ if(e_lry<lry_opt[0])
+ lry_opt[0]=e_lry;
+ }
extentReader.close();
}
- if(mask_opt[0])
+ if(cut_opt.size())
extentReader.open(extent_opt[0]);
}
else if(cx_opt.size()&&cy_opt.size()&&nx_opt.size()&&ny_opt.size()){
@@ -232,26 +321,89 @@ int main(int argc, char *argv[])
uly_opt[0]=(isGeoRef) ? cy_opt[0]+ny_opt[0]/2.0 : cy_opt[0]-ny_opt[0]/2.0;
lrx_opt[0]=cx_opt[0]+nx_opt[0]/2.0;
lry_opt[0]=(isGeoRef) ? cy_opt[0]-ny_opt[0]/2.0 : cy_opt[0]+ny_opt[0]/2.0;
+ // if(cropulx<ulx_opt[0])
+ // cropulx=ulx_opt[0];
+ // if(cropuly>uly_opt[0])
+ // cropuly=uly_opt[0];
+ // if(croplrx>lrx_opt[0])
+ // croplrx=lrx_opt[0];
+ // if(croplry<lry_opt[0])
+ // croplry=lry_opt[0];
}
else if(cx_opt.size()&&cy_opt.size()&&ns_opt.size()&&nl_opt.size()){
ulx_opt[0]=cx_opt[0]-ns_opt[0]*dx/2.0;
uly_opt[0]=(isGeoRef) ? cy_opt[0]+nl_opt[0]*dy/2.0 : cy_opt[0]-nl_opt[0]*dy/2.0;
lrx_opt[0]=cx_opt[0]+ns_opt[0]*dx/2.0;
lry_opt[0]=(isGeoRef) ? cy_opt[0]-nl_opt[0]*dy/2.0 : cy_opt[0]+nl_opt[0]*dy/2.0;
+ // if(cropulx<ulx_opt[0])
+ // cropulx=ulx_opt[0];
+ // if(cropuly>uly_opt[0])
+ // cropuly=uly_opt[0];
+ // if(croplrx>lrx_opt[0])
+ // croplrx=lrx_opt[0];
+ // if(croplry<lry_opt[0])
+ // croplry=lry_opt[0];
}
- //test
- if(verbose_opt[0])
- cout << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
- if(ulx_opt[0]<cropulx)
- cropulx=ulx_opt[0];
- if(uly_opt[0]>cropuly)
- cropuly=uly_opt[0];
- if(lry_opt[0]<croplry)
- croplry=lry_opt[0];
- if(lrx_opt[0]>croplrx)
- croplrx=lrx_opt[0];
+
if(verbose_opt[0])
cout << "--ulx=" << ulx_opt[0] << " --uly=" << uly_opt[0] << " --lrx=" << lrx_opt[0] << " --lry=" << lry_opt[0] << endl;
+
+ int ncropcol=0;
+ int ncroprow=0;
+
+ ImgWriterGdal maskWriter;
+ if(extent_opt.size()&&cut_opt[0]){
+ try{
+ ncropcol=abs(static_cast<int>(ceil((lrx_opt[0]-ulx_opt[0])/dx)));
+ ncroprow=abs(static_cast<int>(ceil((uly_opt[0]-lry_opt[0])/dy)));
+ maskWriter.open("/vsimem/mask.tif",ncropcol,ncroprow,1,GDT_Float32,"GTiff",option_opt);
+ double gt[6];
+ gt[0]=ulx_opt[0];
+ gt[1]=dx;
+ gt[2]=0;
+ gt[3]=uly_opt[0];
+ gt[4]=0;
+ gt[5]=-dy;
+ maskWriter.setGeoTransform(gt);
+ if(projection_opt.size())
+ maskWriter.setProjectionProj4(projection_opt[0]);
+ else if(projectionString.size())
+ maskWriter.setProjection(projectionString);
+
+ //todo: handle multiple extent options
+ vector<double> burnValues(1,1);//burn value is 1 (single band)
+ maskWriter.rasterizeOgr(extentReader,burnValues);
+ maskWriter.close();
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ //todo: support multiple masks
+ mask_opt.clear();
+ mask_opt.push_back("/vsimem/mask.tif");
+ }
+ ImgReaderGdal maskReader;
+ if(mask_opt.size()){
+ try{
+ if(verbose_opt[0]>=1)
+ std::cout << "opening mask image file " << mask_opt[0] << std::endl;
+ maskReader.open(mask_opt[0]);
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ }
+
//determine number of output bands
int writeBand=0;//write band
@@ -288,8 +440,6 @@ int main(int argc, char *argv[])
}
int nrow=imgReader.nrOfRow();
int ncol=imgReader.nrOfCol();
- int ncropcol=0;
- int ncroprow=0;
// if(!dx||!dy){
// dx=imgReader.getDeltaX();
// dy=imgReader.getDeltaY();
@@ -424,6 +574,7 @@ int main(int argc, char *argv[])
imgWriter.setColorTable(imgReader.getColorTable());
}
}
+
double startCol=uli;
double endCol=lri;
if(uli<0)
@@ -445,6 +596,8 @@ int main(int argc, char *argv[])
else if(lrj>=imgReader.nrOfRow())
endRow=imgReader.nrOfRow()-1;
+
+
int readncol=endCol-startCol+1;
vector<double> readBuffer(readncol+1);
int nband=(band_opt.size())?band_opt.size() : imgReader.nrOfBand();
@@ -490,25 +643,20 @@ int main(int argc, char *argv[])
double lowerCol=0;
double upperCol=0;
for(int irow=0;irow<imgWriter.nrOfRow();++irow){
+ vector<float> lineMask;
double x=0;
double y=0;
//convert irow to geo
imgWriter.image2geo(0,irow,x,y);
//lookup corresponding row for irow in this file
- //test
- // cout << "x: " << x << ", y: " << y << endl;
imgReader.geo2image(x,y,readCol,readRow);
- //test
- // cout << "readRow: " << readRow << ", readCol: " << readCol << flush << endl;
- // double lowerCol=0;
- // double upperCol=0;
vector<double> writeBuffer;
if(readRow<0||readRow>=imgReader.nrOfRow()){
//if(readRow<0)
//readRow=0;
//else if(readRow>=imgReader.nrOfRow())
//readRow=imgReader.nrOfRow()-1;
- for(int ib=0;ib<imgWriter.nrOfCol();++ib)
+ for(int icol=0;icol<imgWriter.nrOfCol();++icol)
writeBuffer.push_back(nodataValue);
}
else{
@@ -519,9 +667,10 @@ int main(int argc, char *argv[])
imgReader.readData(readBuffer,GDT_Float64,startCol,endCol+1,readRow,readBand,theResample);
else
imgReader.readData(readBuffer,GDT_Float64,startCol,endCol,readRow,readBand,theResample);
- // for(int ib=0;ib<ncropcol;++ib){
- for(int ib=0;ib<imgWriter.nrOfCol();++ib){
- imgWriter.image2geo(ib,irow,x,y);
+ // for(int icol=0;icol<ncropcol;++icol){
+ double oldRowMask=-1;//keep track of row mask to optimize number of line readings
+ for(int icol=0;icol<imgWriter.nrOfCol();++icol){
+ imgWriter.image2geo(icol,irow,x,y);
//lookup corresponding row for irow in this file
imgReader.geo2image(x,y,readCol,readRow);
if(readCol<0||readCol>=imgReader.nrOfCol()){
@@ -534,43 +683,42 @@ int main(int argc, char *argv[])
}
else{
bool valid=true;
- if(mask_opt[0]&&extent_opt.size()){
- valid=false;
- OGRPoint thePoint;
- thePoint.setX(x);
- thePoint.setY(y);
- OGRLayer *readLayer;
- readLayer = extentReader.getDataSource()->GetLayer(0);
- readLayer->ResetReading();
- OGRFeature *readFeature;
- while( (readFeature = readLayer->GetNextFeature()) != NULL ){
- OGRGeometry *poGeometry;
- poGeometry = readFeature->GetGeometryRef();
- assert(poGeometry!=NULL);
- //check if point is on surface
- OGRPolygon readPolygon = *((OGRPolygon *) poGeometry);
- readPolygon.closeRings();
- if(readPolygon.Contains(&thePoint)){
- valid=true;
- break;
- }
- else
- continue;
- }
- }
+ double geox=0;
+ double geoy=0;
+ if(mask_opt.size()){
+ //read mask
+ double colMask=0;
+ double rowMask=0;
+
+ imgWriter.image2geo(icol,irow,geox,geoy);
+ maskReader.geo2image(geox,geoy,colMask,rowMask);
+ colMask=static_cast<int>(colMask);
+ rowMask=static_cast<int>(rowMask);
+ if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
+ if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
+
+ assert(rowMask>=0&&rowMask<maskReader.nrOfRow());
+ try{
+ maskReader.readData(lineMask,GDT_Float32,static_cast<int>(rowMask));
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ exit(1);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(3);
+ }
+ oldRowMask=rowMask;
+ }
+ if(lineMask[colMask]==msknodata_opt[0])
+ valid=false;
+ }
+ }
+
if(!valid)
writeBuffer.push_back(nodataValue);
else{
- // double theScale=1;
- // double theOffset=0;
- // if(autoscale_opt.size()){
- // theScale=(autoscale_opt[1]-autoscale_opt[0])/(theMax-theMin);
- // theOffset=autoscale_opt[0]-theScale*theMin;
- // }
- // else{
- // theScale=(scale_opt.size()>1)?scale_opt[iband]:scale_opt[0];
- // theOffset=(offset_opt.size()>1)?offset_opt[iband]:offset_opt[0];
- // }
switch(theResample){
case(BILINEAR):
lowerCol=readCol-0.5;
@@ -590,8 +738,8 @@ int main(int argc, char *argv[])
// writeBuffer.push_back(readBuffer[readCol]*theScale+theOffset);
writeBuffer.push_back(readBuffer[readCol]);
break;
- }
- }
+ }
+ }
}
}
}
@@ -628,8 +776,10 @@ int main(int argc, char *argv[])
}
imgReader.close();
}
- if(extent_opt.size()&&mask_opt[0]){
+ if(extent_opt.size()&&cut_opt.size()){
extentReader.close();
}
+ if(mask_opt.size())
+ maskReader.close();
imgWriter.close();
}
diff --git a/src/apps/pkdiff.cc b/src/apps/pkdiff.cc
index 39a2643..d3c2766 100644
--- a/src/apps/pkdiff.cc
+++ b/src/apps/pkdiff.cc
@@ -25,6 +25,70 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "algorithms/ConfusionMatrix.h"
+/******************************************************************************/
+/*! \page pkdiff pkdiff
+ program to compare two raster image files
+## SYNOPSIS
+
+<code>
+ Usage: pkdiff -i input -ref reference
+</code>
+
+<code>
+
+ Options: [-ln layer] [-b band] [-cm] [-lr attribute] [-c name -r value]* [-nodata value]* [-m mask] [-msknodata value]*
+
+ Advanced options:
+ [-o output] [-f OGR format] [-lc attribute] [-bnd value [-hom] [-circ]] [-ct colortable] [-co NAME=VALUE]*
+
+</code>
+
+\section pkdiff_description Description
+
+The utility pkdiff compares two datasets. The reference can either be a raster or a vector, but the input must be a raster dataset.
+In case the reference is a raster dataset, a pixel by pixel comparison is performed. With no further options, the utility reports if the rasters are identical or different. If required, an output raster dataset can be written with a qualitative information per pixel: 0 (input=reference), 1 (input>reference) or 2 (input<reference).
+If, however, the reference is a vector dataset, it must consist of point features. Polygon features are automatically converted to the centroid points before analyzing.
+
+A typical use of the utility is to assess the accuracy of an input raster land cover map, based on a reference vector dataset. The reference dataset must contain an attribute (label) for each class. A confusion matrix is produced if the option -cm|--confusion is set. Here too, an output dataset can be written, which will be a vector dataset in this case. It contains the reference feature points with the extracted data value of the raster input dataset as a new attribute.
+\section pkdiff_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input raster dataset. |
+ | ref | reference | std::string | |Reference (raster or vector) dataset |
+ | ln | ln | std::string | |Layer name(s) in sample. Leave empty to select all (for vector reference datasets only) |
+ | b | band | short | 0 |Input (reference) raster band. Optionally, you can define different bands for input and reference bands respectively: -b 1 -b 0. |
+ | rmse | rmse | bool | false |Report root mean squared error |
+ | reg | reg | bool | false |Report linear regression (Input = c0+c1*Reference) |
+ | cm | confusion | bool | false |Create confusion matrix (to std out) |
+ | lr | lref | std::string | label |Attribute name of the reference label (for vector reference datasets only) |
+ | c | class | std::string | |List of class names. |
+ | r | reclass | short | |List of class values (use same order as in classname option). |
+ | nodata | nodata | double | |No data value(s) in input or reference dataset are ignored |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. |
+ | msknodata | msknodata | double | 0 |Mask value(s) where image is invalid. Use negative value for valid data (example: use -t -1: if only -1 is valid value) |
+ | o | output | std::string | |Output dataset (optional) |
+ | f | f | std::string | SQLite |OGR format for output vector (for vector reference datasets only) |
+ | lc | lclass | std::string | class |Attribute name of the classified label (for vector reference datasets only) |
+ | cmf | cmf | std::string | ascii |Format for confusion matrix (ascii or latex) |
+ | cmo | cmo | std::string | |Output file for confusion matrix |
+ | se95 | se95 | bool | false |Report standard error for 95 confidence interval |
+ | bnd | boundary | short | 1 |Boundary for selecting the sample (for vector reference datasets only) |
+ | hom | homogeneous | bool | false |Only take regions with homogeneous boundary into account (for reference datasets only) |
+ | circ | circular | bool | false |Use circular boundary (for vector reference datasets only) |
+ | ct | ct | std::string | |Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid). |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | | commission | short | 2 |Value for commission errors: input label < reference label |
+
+Usage: pkdiff -i input -ref reference
+
+
+Examples
+========
+Some examples how to use pkdiff can be found \ref examples_pkdiff "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
@@ -39,6 +103,9 @@ int main(int argc, char *argv[])
Optionpk<bool> rmse_opt("rmse", "rmse", "Report root mean squared error", false);
Optionpk<bool> regression_opt("reg", "reg", "Report linear regression (Input = c0+c1*Reference)", false);
Optionpk<bool> confusion_opt("cm", "confusion", "Create confusion matrix (to std out)", false);
+ Optionpk<string> cmformat_opt("cmf","cmf","Format for confusion matrix (ascii or latex)","ascii");
+ Optionpk<string> cmoutput_opt("cmo","cmo","Output file for confusion matrix");
+ Optionpk<bool> se95_opt("se95","se95","Report standard error for 95 confidence interval",false);
Optionpk<string> labelref_opt("lr", "lref", "Attribute name of the reference label (for vector reference datasets only)", "label");
Optionpk<string> classname_opt("c", "class", "List of class names.");
Optionpk<short> classvalue_opt("r", "reclass", "List of class values (use same order as in classname option).");
@@ -82,6 +149,9 @@ int main(int argc, char *argv[])
output_opt.retrieveOption(argc,argv);
ogrformat_opt.retrieveOption(argc,argv);
labelclass_opt.retrieveOption(argc,argv);
+ cmformat_opt.retrieveOption(argc,argv);
+ cmoutput_opt.retrieveOption(argc,argv);
+ se95_opt.retrieveOption(argc,argv);
boundary_opt.retrieveOption(argc,argv);
homogeneous_opt.retrieveOption(argc,argv);
disc_opt.retrieveOption(argc,argv);
@@ -134,7 +204,7 @@ int main(int argc, char *argv[])
mask_opt.push_back(mask_opt[0]);
vector<short> inputRange;
vector<short> referenceRange;
- ConfusionMatrix cm;
+ confusionmatrix::ConfusionMatrix cm;
int nclass=0;
map<string,short> classValueMap;
vector<std::string> nameVector(255);//the inverse of the classValueMap
@@ -856,23 +926,29 @@ int main(int argc, char *argv[])
}//raster dataset
if(confusion_opt[0]){
-
- // assert(cm.nReference());
- cout << cm << endl;
- cout << "class #samples userAcc prodAcc" << endl;
- double se95_ua=0;
- double se95_pa=0;
- double se95_oa=0;
- double dua=0;
- double dpa=0;
- double doa=0;
- for(int iclass=0;iclass<cm.nClasses();++iclass){
- dua=cm.ua_pct(classNames[iclass],&se95_ua);
- dpa=cm.pa_pct(classNames[iclass],&se95_pa);
- cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
+ cm.setFormat(cmformat_opt[0]);
+ cm.reportSE95(se95_opt[0]);
+ ofstream outputFile;
+ if(cmoutput_opt.size()){
+ outputFile.open(cmoutput_opt[0].c_str(),ios::out);
+ outputFile << cm << endl;
}
- doa=cm.oa(&se95_oa);
- cout << "Kappa: " << cm.kappa() << endl;
- cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << endl;
+ else
+ cout << cm << endl;
+ // cout << "class #samples userAcc prodAcc" << endl;
+ // double se95_ua=0;
+ // double se95_pa=0;
+ // double se95_oa=0;
+ // double dua=0;
+ // double dpa=0;
+ // double doa=0;
+ // for(int iclass=0;iclass<cm.nClasses();++iclass){
+ // dua=cm.ua_pct(classNames[iclass],&se95_ua);
+ // dpa=cm.pa_pct(classNames[iclass],&se95_pa);
+ // cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
+ // }
+ // doa=cm.oa(&se95_oa);
+ // cout << "Kappa: " << cm.kappa() << endl;
+ // cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << endl;
}
}
diff --git a/src/apps/pkdsm2shadow.cc b/src/apps/pkdsm2shadow.cc
index b91a900..edd0d5e 100644
--- a/src/apps/pkdsm2shadow.cc
+++ b/src/apps/pkdsm2shadow.cc
@@ -30,6 +30,52 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
+/******************************************************************************/
+/*! \page pkdsm2shadow pkdsm2shadow
+ program to calculate sun shadow based on digital surface model and sun angles
+## SYNOPSIS
+
+<code>
+ Usage: pkdsm2shadow -i input.txt -o output [-sza angle] [-saa angle]
+</code>
+
+<code>
+
+
+ Options: [-f value] [-ot type] [-of GDALformat] [-ct filename] [-co option]*
+
+ Advanced options: [--scale value] [--offset value]
+</code>
+
+\section pkdsm2shadow_description Description
+
+Utility to create a binary shadow mask from a digital surface model, based on Sun zenith (-sza) and azimuth angles (-saa).
+
+\section pkdsm2shadow_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input image file |
+ | o | output | std::string | |Output image file |
+ | sza | sza | double | |Sun zenith angle. |
+ | saa | saa | double | |Sun azimuth angle (N=0 E=90 S=180 W=270). |
+ | f | flag | int | 0 |Flag to put in image if pixel shadow |
+ | s | scale | double | |scale used for input dsm: height=scale*input+offset |
+ | off | offset | double | |offset used for input dsm: height=scale*input+offset |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+
+Usage: pkdsm2shadow -i input.txt -o output [-sza angle] [-saa angle]
+
+
+Examples
+========
+Some examples how to use pkdsm2shadow can be found \ref examples_pkdsm2shadow "here"
+**/
+
using namespace std;
/*------------------
diff --git a/src/apps/pkdumpimg.cc b/src/apps/pkdumpimg.cc
index 149f50f..9cd433c 100644
--- a/src/apps/pkdumpimg.cc
+++ b/src/apps/pkdumpimg.cc
@@ -31,6 +31,56 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pkdumpimg pkdumpimg
+ program to dump image content to ascii or std out
+## SYNOPSIS
+
+<code>
+ Usage: pkdumpimg -i input.txt [-o output]
+</code>
+
+<code>
+
+
+ Options: [-of matrix | line] [-b band] [-e vector | -ulx value -uly value -lrx value -lry value]
+
+ Advanced options: [-dx value -dy value] [-r resampling] -srcnodata value -dstnodata value
+
+</code>
+
+\section pkdumpimg_description Description
+
+The utility pkdumpimg dumps the content of a raster dataset to (standard) output (screen or filename). The default is to dump the output in matrix format. Use -of line to dump each pixel value on a separate line, preceded by its position (x and y value). You can specify a bounding box to dump with either the extent of an OGR vector dataset or via the options -ulx -uly -lrx and -lry.
+
+\section pkdumpimg_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input image file |
+ | o | output | std::string | |Output ascii file (Default is empty: use stdout |
+ | of | oformat | std::string | matrix |Output format (matrix form or list (x,y,z) form. Default is matrix form |
+ | b | band | int | |band index to crop |
+ | e | extent | std::string | |get boundary from extent from polygons in vector file |
+ | ulx | ulx | double | 0 |Upper left x value bounding box (in geocoordinates if georef is true) |
+ | uly | uly | double | 0 |Upper left y value bounding box (in geocoordinates if georef is true) |
+ | lrx | lrx | double | 0 |Lower left x value bounding box (in geocoordinates if georef is true) |
+ | lry | lry | double | 0 |Lower left y value bounding box (in geocoordinates if georef is true) |
+ | dx | dx | double | 0 |Output resolution in x (in meter) (0.0: keep original resolution) |
+ | dy | dy | double | 0 |Output resolution in y (in meter) (0.0: keep original resolution) |
+ | r | resampling-method | std::string | near |Resampling method (near: nearest neighbour, bilinear: bi-linear interpolation). |
+ | srcnodata | srcnodata | double | |set no data value(s) for input image |
+ | dstnodata | dstnodata | short | 0 |nodata value for output if out of bounds. |
+
+Usage: pkdumpimg -i input.txt [-o output]
+
+
+Examples
+========
+Some examples how to use pkdumpimg can be found \ref examples_pkdumpimg "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pkdumpogr.cc b/src/apps/pkdumpogr.cc
index ccdbccf..ffa3cca 100644
--- a/src/apps/pkdumpogr.cc
+++ b/src/apps/pkdumpogr.cc
@@ -25,6 +25,50 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderOgr.h"
#include "pkdumpogr.h"
+/******************************************************************************/
+/*! \page pkdumpogr pkdumpogr
+ dump ogr file to text file or standard output
+## SYNOPSIS
+
+<code>
+ Usage: pkdumpogr -i input [-o output]
+</code>
+
+<code>
+
+ Options: [-ln layername] [-n attribute]* [-pos] [-transpose]
+
+ Advanced options:
+
+</code>
+
+\section pkdumpogr_description Description
+
+The utility pkdumpogr dumps the content of a vector dataset to (standard) output (screen or filename). The default is to dump all the attributes. Individual attributes can be selected with the option -n. The X and Y positions can be printed with the option -pos. Use the option -transpose to transpose the output (only in combination with the option -n attribute).
+
+\section pkdumpogr_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input shape file |
+ | ln | lname | std::string | |Layer name(s) in sample (leave empty to select all) |
+ | o | output | std::string | |Output ASCII file |
+ | n | name | std::string | ALL |names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes |
+ | pos | pos | bool | false |include position (x and y) |
+ | t | transpose | bool | false |transpose output (does not work for -n ALL |
+ | fs | fs | char | |field separator. |
+
+Usage: pkdumpogr -i input. [-o output]
+
+
+Examples
+========
+Some examples how to use pkdumpogr can be found \ref examples_pkdumpogr "here"
+**/
+
+using namespace std;
+
int main(int argc, char *argv[])
{
Optionpk<string> input_opt("i", "input", "Input shape file");
@@ -33,8 +77,12 @@ int main(int argc, char *argv[])
Optionpk<string> attribute_opt("n", "name", "names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes", "ALL");
Optionpk<bool> pos_opt("pos","pos","include position (x and y)",false);
Optionpk<bool> transpose_opt("t","transpose","transpose output (does not work for -n ALL ",false);
+ Optionpk<char> fs_opt("fs","fs","field separator.",' ');
Optionpk<short> verbose_opt("v", "verbose", "verbose (Default: 0)", 0,2);
+ fs_opt.setHide(1);
+ verbose_opt.setHide(2);
+
bool doProcess;//stop process when program was invoked with help option (-h --help)
try{
doProcess=input_opt.retrieveOption(argc,argv);
@@ -43,6 +91,7 @@ int main(int argc, char *argv[])
attribute_opt.retrieveOption(argc,argv);
pos_opt.retrieveOption(argc,argv);
transpose_opt.retrieveOption(argc,argv);
+ fs_opt.retrieveOption(argc,argv);
verbose_opt.retrieveOption(argc,argv);
}
catch(string predefinedString){
@@ -51,16 +100,20 @@ int main(int argc, char *argv[])
}
if(!doProcess){
cout << endl;
- cout << "Usage: pkdumpogr -i input.txt [-o output]" << endl;
+ cout << "Usage: pkdumpogr -i input [-o output]" << endl;
cout << endl;
std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
exit(0);//help was invoked, stop processing
}
- assert(input_opt.size());
- ImgReaderOgr imgReader;
+ if(input_opt.empty()){
+ std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl;
+ exit(0);
+ }
+
+ ImgReaderOgr inputReader;
try{
- imgReader.open(input_opt[0]);
+ inputReader.open(input_opt[0]);
}
catch(string errorstring){
cerr << errorstring << endl;
@@ -69,7 +122,7 @@ int main(int argc, char *argv[])
if(output_opt.size())
outputFile.open(output_opt[0].c_str(),ios::out);
- ImgReaderOgr inputReader(input_opt[0]);
+ inputReader.setFieldSeparator(fs_opt[0]);
//support multiple layers
int nlayerRead=inputReader.getDataSource()->GetLayerCount();
@@ -84,10 +137,19 @@ int main(int argc, char *argv[])
continue;
if(verbose_opt[0])
cout << "processing layer " << currentLayername << endl;
- if(layer_opt.size())
- cout << " --lname " << currentLayername;
+ // if(layer_opt.size())
+ // cout << " --lname " << currentLayername << endl;
- if(attribute_opt[0]!="ALL"){
+ if(attribute_opt[0]=="ALL"){
+ attribute_opt.clear();
+ OGRFeatureDefn *poFDefn = readLayer->GetLayerDefn();
+ for(int iField=0;iField<poFDefn->GetFieldCount();++iField){
+ OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
+ std::string fieldname=poFieldDefn->GetNameRef();
+ attribute_opt.push_back(fieldname);
+ }
+ }
+ // if(attribute_opt[0]!="ALL"){
vector<double> xvector;
vector<double> yvector;
if(inputReader.getGeometryType()==wkbPoint)
@@ -106,37 +168,37 @@ int main(int argc, char *argv[])
if(transpose_opt[0]){
if(pos_opt[0]&&(inputReader.getGeometryType()==wkbPoint)){
if(output_opt.size()){
- outputFile << "X" << " ";
+ outputFile << "X" << fs_opt[0];
for(int isample=0;isample<xvector.size();++isample){
outputFile << xvector[isample];
if(isample<xvector.size()-1)
- outputFile << " ";
+ outputFile << fs_opt[0];
else
outputFile << std::endl;
}
- outputFile << "Y" << " ";
+ outputFile << "Y" << fs_opt[0];
for(int isample=0;isample<yvector.size();++isample){
outputFile << yvector[isample];
if(isample<yvector.size()-1)
- outputFile << " ";
+ outputFile << fs_opt[0];
else
outputFile << std::endl;
}
}
else{
- std::cout << "X" << " ";
+ std::cout << "X" << fs_opt[0];
for(int isample=0;isample<xvector.size();++isample){
std::cout << xvector[isample];
if(isample<xvector.size()-1)
- std::cout << " ";
+ std::cout << fs_opt[0];
else
std::cout << std::endl;
}
- std::cout << "Y" << " ";
+ std::cout << "Y" << fs_opt[0];
for(int isample=0;isample<yvector.size();++isample){
std::cout << yvector[isample];
if(isample<yvector.size()-1)
- std::cout << " ";
+ std::cout << fs_opt[0];
else
std::cout << std::endl;
}
@@ -144,21 +206,21 @@ int main(int argc, char *argv[])
}
for(int ifield=0;ifield<theData.size();++ifield){
if(output_opt.size()){
- outputFile << ifield << " ";
+ outputFile << ifield << fs_opt[0];
for(int isample=0;isample<theData[0].size();++isample){
outputFile << theData[ifield][isample];
if(isample<theData[0].size()-1)
- outputFile << " ";
+ outputFile << fs_opt[0];
else
outputFile << std::endl;
}
}
else{
- std::cout << ifield << " ";
+ std::cout << ifield << fs_opt[0];
for(int isample=0;isample<theData[0].size();++isample){
std::cout << theData[ifield][isample];
if(isample<theData[0].size()-1)
- std::cout << " ";
+ std::cout << fs_opt[0];
else
std::cout << std::endl;
}
@@ -168,25 +230,25 @@ int main(int argc, char *argv[])
else{
for(int isample=0;isample<theData[0].size();++isample){
if(output_opt.size()){
- outputFile << isample << " ";
+ outputFile << isample << fs_opt[0];
if(pos_opt[0])
- outputFile << xvector[isample] << " " << yvector[isample] << " ";
+ outputFile << xvector[isample] << fs_opt[0] << yvector[isample] << fs_opt[0];
for(int ifield=0;ifield<theData.size();++ifield){
outputFile << theData[ifield][isample];
if(ifield<theData.size()-1)
- outputFile << " ";
+ outputFile << fs_opt[0];
else
outputFile << std::endl;
}
}
else{
- std::cout << isample << " ";
+ std::cout << isample << fs_opt[0];
if(pos_opt[0])
- std::cout << xvector[isample] << " " << yvector[isample] << " ";
+ std::cout << xvector[isample] << fs_opt[0] << yvector[isample] << fs_opt[0];
for(int ifield=0;ifield<theData.size();++ifield){
std::cout << theData[ifield][isample];
if(ifield<theData.size()-1)
- std::cout << " ";
+ std::cout << fs_opt[0];
else
std::cout << std::endl;
}
@@ -195,18 +257,17 @@ int main(int argc, char *argv[])
}
if(output_opt.size())
outputFile.close();
- }
- else{
- if(output_opt.size()){
- ofstream outputFile(output_opt[0].c_str(),ios::out);
- outputFile << imgReader;
- outputFile.close();
- }
- else
- std::cout << imgReader;
- }
+ // }
+ // else{
+ // if(output_opt.size()){
+ // ofstream outputFile(output_opt[0].c_str(),ios::out);
+ // outputFile << inputReader;
+ // outputFile.close();
+ // }
+ // else
+ // std::cout << inputReader;
+ // }
}
inputReader.close();
- imgReader.close();
}
diff --git a/src/apps/pkeditogr.cc b/src/apps/pkeditogr.cc
deleted file mode 100644
index ba625b8..0000000
--- a/src/apps/pkeditogr.cc
+++ /dev/null
@@ -1,286 +0,0 @@
-/**********************************************************************
-pkeditogr.cc: program to edit (rename fields) ogr fil
-Copyright (C) 2008-2014 Pieter Kempeneers
-
-This file is part of pktools
-
-pktools is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-pktools is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with pktools. If not, see <http://www.gnu.org/licenses/>.
-***********************************************************************/
-#include <assert.h>
-#include <map>
-#include "base/Optionpk.h"
-#include "imageclasses/ImgReaderOgr.h"
-#include "imageclasses/ImgWriterOgr.h"
-#include "imageclasses/ImgReaderGdal.h"
-#include "imageclasses/ImgWriterGdal.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
- Optionpk<string> input_opt("i", "input", "Input vector file");
- Optionpk<string> output_opt("o", "output", "Output vector file");
- Optionpk<string> ogrformat_opt("f", "f", "Output OGR file format","ESRI Shapefile");
- Optionpk<string> selectField_opt("select", "select", "select field (combined with like opt)");
- //selectField can also be done via ogr2ogr using the -select option
- Optionpk<string> like_opt("like", "like", "substring(s) to be found in select field. If multiple substrings are provided, feature will be selected if one of them is found (stringent option must be false)");
- Optionpk<bool> stringent_opt("st", "stringent", "string in like option must exactly match to select feature)",false);
- // Optionpk<string> field_opt("as_field", "_field", "output field names (number must exactly match input fields)");
- //renaming fields can also be done via ogr2ogr using the -sql option:
- //ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"
- Optionpk<long int> setfeature_opt("sf", "sf", "id of feature(s) to set (start from 0)");
- Optionpk<string> setname_opt("sn", "sn", "name(s) of field(s) to set");
- Optionpk<string> setvalue_opt("sv", "sv", "value(s) of field(s) to set");
- Optionpk<string> addname_opt("an", "an", "name(s) of field(s) to add (number must exactly match field types)");
- Optionpk<string> addtype_opt("at", "at", "type(s) of field(s) to add (number must exactly match fieldnames to add", "Real");
- Optionpk<string> addvalue_opt("av", "av", "value(s) of field(s) to add");
- Optionpk<short> verbose_opt("v", "verbose", "verbose", 0);
-
- bool doProcess;//stop process when program was invoked with help option (-h --help)
- try{
- doProcess=input_opt.retrieveOption(argc,argv);
- output_opt.retrieveOption(argc,argv);
- ogrformat_opt.retrieveOption(argc,argv);
- selectField_opt.retrieveOption(argc,argv);
- like_opt.retrieveOption(argc,argv);
- stringent_opt.retrieveOption(argc,argv);
- // field_opt.retrieveOption(argc,argv);
- addname_opt.retrieveOption(argc,argv);
- addtype_opt.retrieveOption(argc,argv);
- addvalue_opt.retrieveOption(argc,argv);
- setfeature_opt.retrieveOption(argc,argv);
- setname_opt.retrieveOption(argc,argv);
- setvalue_opt.retrieveOption(argc,argv);
- verbose_opt.retrieveOption(argc,argv);
- }
- catch(string predefinedString){
- std::cout << predefinedString << std::endl;
- exit(0);
- }
- if(!doProcess){
- std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
- exit(0);//help was invoked, stop processing
- }
- if(input_opt.empty()){
- std::cerr << "No input file provided (use option -i). Use --help for help information";
- exit(0);//help was invoked, stop processing
- }
- if(output_opt.empty()){
- std::cerr << "No output file provided (use option -o). Use --help for help information";
- exit(0);//help was invoked, stop processing
- }
- if(verbose_opt[0])
- cout << "opening " << input_opt[0] << " for reading " << endl;
- ImgReaderOgr ogrReader(input_opt[0]);
- if(verbose_opt[0])
- cout << "opening " << output_opt[0] << " for writing " << endl;
-
- OGRFieldType fieldType[addtype_opt.size()];
- int ogr_typecount=11;//hard coded for now!
- for(int it=0;it<addtype_opt.size();++it){
- for(int iType = 0; iType < ogr_typecount; ++iType){
- if( OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType) != NULL
- && EQUAL(OGRFieldDefn::GetFieldTypeName((OGRFieldType)iType),
- addtype_opt[it].c_str()))
- fieldType[it]=(OGRFieldType) iType;
- }
- if(verbose_opt[0]>1)
- std::cout << std::endl << "field type is: " << OGRFieldDefn::GetFieldTypeName(fieldType[it]) << std::endl;
- }
-
- //start reading features from the layer
- // if(field_opt.size())
- // assert(field_opt.size()==ogrReader.getFieldCount());
- unsigned long int ifeature=0;
- if(verbose_opt[0])
- cout << "going through features" << endl << flush;
-
- ImgWriterOgr ogrWriter(output_opt[0],ogrformat_opt[0]);
-
- //support multiple layers
- int nlayer=ogrReader.getLayerCount();
- if(verbose_opt[0])
- std::cout << "number of layers: " << nlayer << endl;
-
- for(int ilayer=0;ilayer<nlayer;++ilayer){
- OGRLayer *readLayer=ogrReader.getLayer(ilayer);
- if(verbose_opt[0])
- cout << "reset reading" << endl;
- readLayer->ResetReading();
-
- OGRLayer *writeLayer=ogrWriter.createLayer(output_opt[0],ogrReader.getProjection(),ogrReader.getGeometryType(ilayer),NULL);
- std::vector<OGRFieldDefn*> readFields;
- std::vector<OGRFieldDefn*> writeFields;
- ogrReader.getFields(readFields,ilayer);
- writeFields=readFields;
- try{
- for(int ifield=0;ifield<readFields.size();++ifield){
- // if(field_opt.size()>ifield)
- // writeFields[ifield]->SetName(field_opt[ifield].c_str());
- if(verbose_opt[0])
- std::cout << readFields[ifield]->GetNameRef() << " -> " << writeFields[ifield]->GetNameRef() << std::endl;
- if(writeLayer->CreateField(writeFields[ifield]) != OGRERR_NONE ){
- ostringstream es;
- // if(field_opt.size()>ifield)
- // es << "Creating field " << field_opt[ifield] << " failed";
- // else
- es << "Creating field " << readFields[ifield] << " failed";
- string errorString=es.str();
- throw(errorString);
- }
- }
- }
- catch(string errorString){
- std::cerr << errorString << std::endl;
- exit(1);
- }
- if(verbose_opt[0])
- std::cout << "add " << addname_opt.size() << " fields" << std::endl;
- if(addname_opt.size()){
- assert(addname_opt.size()==addtype_opt.size());
- while(addvalue_opt.size()<addname_opt.size())
- addvalue_opt.push_back(addvalue_opt.back());
- }
- for(int iname=0;iname<addname_opt.size();++iname){
- if(verbose_opt[0])
- std::cout << addname_opt[iname] << " " << std::endl;
- ogrWriter.createField(addname_opt[iname],fieldType[iname]);
- }
- if(verbose_opt[0]){
- std::cout << std::endl;
- std::cout << addname_opt.size() << " fields created" << std::endl;
- }
- const char* pszMessage;
- void* pProgressArg=NULL;
- GDALProgressFunc pfnProgress=GDALTermProgress;
- double progress=0;
- OGRFeature *poFeature;
- unsigned long int nfeature=ogrReader.getFeatureCount(ilayer);
- while((poFeature = ogrReader.getLayer(ilayer)->GetNextFeature()) != NULL ){
- if(verbose_opt[0])
- std::cout << "feature " << ifeature << std::endl;
- ++ifeature;
- bool doSelect;
- if(like_opt.empty())
- doSelect=true;
- else{
- assert(selectField_opt.size());
- int fieldIndex=poFeature->GetFieldIndex(selectField_opt[0].c_str());
- string fieldValue=poFeature->GetFieldAsString(fieldIndex);
- if(stringent_opt[0]){
- if(fieldValue==like_opt[0])
- doSelect=true;
- else
- doSelect=false;
- }
- else{
- doSelect=false;
- for(int ilike=0;ilike<like_opt.size();++ilike){
- if(fieldValue.find(like_opt[ilike])!=std::string::npos){
- if(verbose_opt[0])
- std::cout << "found " << like_opt[ilike] << " in " << fieldValue << std::endl;
- doSelect=true;
- break;
- }
- }
- }
- }
- if(!doSelect){
- if(verbose_opt[0])
- std::cout << "string not found in feature " << ifeature << std::endl;
- continue;
- }
- OGRFeature *poDstFeature = NULL;
- poDstFeature=ogrWriter.createFeature(ilayer);
- if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){
- const char* fmt;
- string errorString="Unable to translate feature %d from layer %s.\n";
- fmt=errorString.c_str();
- CPLError( CE_Failure, CPLE_AppDefined,
- fmt,
- poFeature->GetFID(), ogrWriter.getLayerName().c_str() );
- OGRFeature::DestroyFeature( poFeature );
- OGRFeature::DestroyFeature( poDstFeature );
- }
- long int fid=poFeature->GetFID();
- poDstFeature->SetFID( poFeature->GetFID() );
- for(int ifeature=0;ifeature<setfeature_opt.size();++ifeature){
- if(fid==setfeature_opt[ifeature]){
- switch(poDstFeature->GetFieldDefnRef(fid)->GetType()){
- case(OFTReal):
- poDstFeature->SetField(setname_opt[ifeature].c_str(),string2type<float>(setvalue_opt[ifeature]));
- break;
- case(OFTInteger):
- poDstFeature->SetField(setname_opt[ifeature].c_str(),string2type<int>(setvalue_opt[ifeature]));
- break;
- case(OFTString):
- poDstFeature->SetField(setname_opt[ifeature].c_str(),setvalue_opt[ifeature].c_str());
- break;
- default:
- std::cerr << "Error: field type not supported" << std::endl;
- exit(1);
- break;
- }
- }
- }
-
- //set default values for new fields
- if(verbose_opt[0])
- std::cout << "set default values for new fields in feature " << ifeature << std::endl;
- for(int iname=0;iname<addname_opt.size();++iname){
- switch(fieldType[iname]){
- case(OFTReal):
- if(verbose_opt[0])
- std::cout << "set field " << addname_opt[iname] << " to default " << string2type<float>(addvalue_opt[iname]) << std::endl;
- poDstFeature->SetField(addname_opt[iname].c_str(),string2type<float>(addvalue_opt[iname]));
- break;
- case(OFTInteger):
- if(verbose_opt[0])
- std::cout << "set field " << addname_opt[iname] << " to default " << string2type<int>(addvalue_opt[iname]) << std::endl;
- poDstFeature->SetField(addname_opt[iname].c_str(),string2type<int>(addvalue_opt[iname]));
- break;
- case(OFTString):
- if(verbose_opt[0])
- std::cout << "set field " << addname_opt[iname] << " to default " << addvalue_opt[iname] << std::endl;
- poDstFeature->SetField(addname_opt[iname].c_str(),addvalue_opt[iname].c_str());
- break;
- default:
- std::cerr << "Error: field type not supported" << std::endl;
- exit(1);
- break;
- }
- }
- CPLErrorReset();
- if(verbose_opt[0])
- std::cout << "create feature" << std::endl;
- if(ogrWriter.createFeature( poDstFeature,ilayer ) != OGRERR_NONE){
- const char* fmt;
- string errorString="Unable to translate feature %d from layer %s.\n";
- fmt=errorString.c_str();
- CPLError( CE_Failure, CPLE_AppDefined,
- fmt,
- poFeature->GetFID(), ogrWriter.getLayerName().c_str() );
- OGRFeature::DestroyFeature( poDstFeature );
- }
- OGRFeature::DestroyFeature( poFeature );
- OGRFeature::DestroyFeature( poDstFeature );
- progress=static_cast<float>(ifeature+1)/nfeature;
- pfnProgress(progress,pszMessage,pProgressArg);
- }
- }
- if(verbose_opt[0])
- std::cout << "replaced " << ifeature << " features" << std::endl;
- ogrReader.close();
- ogrWriter.close();
-}
diff --git a/src/apps/pkegcs.cc b/src/apps/pkegcs.cc
index 77f4234..bd58834 100644
--- a/src/apps/pkegcs.cc
+++ b/src/apps/pkegcs.cc
@@ -21,6 +21,34 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "algorithms/Egcs.h"
+/******************************************************************************/
+/*! \page pkegcs pkegcs
+ Utility for raster files in European Grid Coordinate System
+## SYNOPSIS
+
+<code>
+
+</code>
+
+\section pkegcs_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | image | std::string | |input image to analyse |
+ | b | band | unsigned short | 0 |Band specific information |
+ | c2b | cell2bb | std::string | |convert cell code to geo coordinates of boundingbox (e.g. 32-AB) |
+ | c2m | cell2mid | std::string | |convert cell code to centre in geo coordinates (e.g. 32-AB) |
+ | g2c | geo2cell | bool | false |get cell code for coordinates in x_opt and y_opt given the resolution in dx_opt |
+ | ref | ref | bool | false |get reference pixel (lower left corner of centre of gravity pixel) |
+ | m | mask | double | 0 |mask value(s) for no data to calculate reference pixel in image |
+ | dx | dx | int | 250 |resolution |
+ | x | x | double | 0 |x coordinate in epsg:3035 |
+ | y | y | double | 0 |y coordinate in epsg:3035 |
+
+**/
+
+using namespace std;
int main(int argc, char *argv[])
{
Optionpk<std::string> image_opt("i","image","input image to analyse","");
diff --git a/src/apps/pkenhance.cc b/src/apps/pkenhance.cc
deleted file mode 100644
index 200ae1d..0000000
--- a/src/apps/pkenhance.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-/**********************************************************************
-pkenhance.cc: program to enhance raster images: histogram matching
-Copyright (C) 2008-2014 Pieter Kempeneers
-
-This file is part of pktools
-
-pktools is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-pktools is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with pktools. If not, see <http://www.gnu.org/licenses/>.
-***********************************************************************/
-#include <assert.h>
-#include <iostream>
-#include <string>
-#include "base/Optionpk.h"
-#include "imageclasses/ImgReaderGdal.h"
-#include "imageclasses/ImgWriterGdal.h"
-
-using namespace std;
-
-int main(int argc,char **argv) {
- Optionpk<std::string> input_opt("i","input","input image file");
- Optionpk<string> reference_opt("r", "reference", "Reference image file");
- Optionpk<std::string> output_opt("o", "output", "Output image file");
- Optionpk<double> minRef_opt("minref", "minref", "Sets minimum for histogram of reference image");
- Optionpk<double> maxRef_opt("maxref", "maxref", "Sets maximum for histogram of reference image");
- Optionpk<double> minInput_opt("mininput", "mininput", "Sets minimum for histogram of input image");
- Optionpk<double> maxInput_opt("maxinput", "maxinput", "Sets maximum for histogram of input image");
- Optionpk<double> nodata_opt("nodata", "nodata", "Sets no data value(s) for calculations (nodata values in input image)");
- Optionpk<std::string> method_opt("m", "method", "enhancement method (histmatch)", "histmatch");
- // Optionpk<std::string> wavelet_type_opt("wt", "wavelet", "wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered", "daubechies");
- // Optionpk<int> family_opt("wf", "family", "wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html)", 4);
- // Optionpk<double> quantize_opt("q", "quantize", "Quantize threshold",0);
- Optionpk<short> nbin_opt("nbin", "nbin", "Number of bins used in histogram. Use 0 for all input values as integers",0);
- Optionpk<string> otype_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image","");
- Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image");
- Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
- Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
-
- bool doProcess;//stop process when program was invoked with help option (-h --help)
- try{
- doProcess=input_opt.retrieveOption(argc,argv);
- reference_opt.retrieveOption(argc,argv);
- output_opt.retrieveOption(argc,argv);
- minRef_opt.retrieveOption(argc,argv);
- maxRef_opt.retrieveOption(argc,argv);
- minInput_opt.retrieveOption(argc,argv);
- maxInput_opt.retrieveOption(argc,argv);
- nodata_opt.retrieveOption(argc,argv);
- method_opt.retrieveOption(argc,argv);
- nbin_opt.retrieveOption(argc,argv);
- otype_opt.retrieveOption(argc,argv);
- oformat_opt.retrieveOption(argc,argv);
- option_opt.retrieveOption(argc,argv);
- verbose_opt.retrieveOption(argc,argv);
- }
- catch(string predefinedString){
- std::cout << predefinedString << std::endl;
- exit(0);
- }
- if(!doProcess){
- std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
- exit(0);//help was invoked, stop processing
- }
-
- ImgReaderGdal inputImg;
- ImgReaderGdal referenceImg;
- ImgWriterGdal outputImg;
- assert(input_opt.size());
- inputImg.open(input_opt[0]);
- for(int inodata=0;inodata<nodata_opt.size();++inodata){
- if(!inodata)
- inputImg.GDALSetNoDataValue(nodata_opt[0],0);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
- inputImg.pushNoDataValue(nodata_opt[inodata]);
- }
-
- int nband=inputImg.nrOfBand();
- GDALDataType theType=GDT_Unknown;
- if(verbose_opt[0])
- cout << "possible output data types: ";
- for(int iType = 0; iType < GDT_TypeCount; ++iType){
- if(verbose_opt[0])
- cout << " " << GDALGetDataTypeName((GDALDataType)iType);
- if( GDALGetDataTypeName((GDALDataType)iType) != NULL
- && EQUAL(GDALGetDataTypeName((GDALDataType)iType),
- otype_opt[0].c_str()))
- theType=(GDALDataType) iType;
- }
- if(theType==GDT_Unknown)
- theType=inputImg.getDataType();
-
- if(verbose_opt[0])
- std::cout << std::endl << "Output pixel type: " << GDALGetDataTypeName(theType) << endl;
-
- string imageType=inputImg.getImageType();
- if(oformat_opt.size())
- imageType=oformat_opt[0];
-
- if(option_opt.findSubstring("INTERLEAVE=")==option_opt.end()){
- string theInterleave="INTERLEAVE=";
- theInterleave+=inputImg.getInterleave();
- option_opt.push_back(theInterleave);
- }
- try{
- assert(output_opt.size());
- if(verbose_opt[0])
- std::cout << "opening output image " << output_opt[0] << std::endl;
- outputImg.open(output_opt[0],inputImg.nrOfCol(),inputImg.nrOfRow(),inputImg.nrOfBand(),theType,imageType,option_opt);
- }
- catch(string errorstring){
- cout << errorstring << endl;
- exit(1);
- }
-
- if(method_opt[0]=="histmatch"){
- assert(reference_opt.size());
- referenceImg.open(reference_opt[0]);
- assert(nband==referenceImg.nrOfBand());
- for(int inodata=0;inodata<nodata_opt.size();++inodata){
- if(!inodata)
- referenceImg.GDALSetNoDataValue(nodata_opt[0],0);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
- referenceImg.pushNoDataValue(nodata_opt[inodata]);
- }
- const char* pszMessage;
- void* pProgressArg=NULL;
- GDALProgressFunc pfnProgress=GDALTermProgress;
- double progress=0;
- pfnProgress(progress,pszMessage,pProgressArg);
- for(int iband=0;iband<nband;++iband){
- //calculate histograms
- unsigned int nbinRef=nbin_opt[0];
- unsigned int nbinInput=nbin_opt[0];
- std::vector<double> histRef(nbinRef);
- std::vector<double> histInput(nbinInput);
- double minValueRef=0;
- double maxValueRef=0;
- double minValueInput=0;
- double maxValueInput=0;
- if(minRef_opt.size())
- minValueRef=minRef_opt[0];
- if(maxRef_opt.size())
- maxValueRef=maxRef_opt[0];
- if(minInput_opt.size())
- minValueInput=minInput_opt[0];
- if(maxInput_opt.size())
- maxValueInput=maxInput_opt[0];
- unsigned long int nsampleRef=referenceImg.getHistogram(histRef,minValueRef,maxValueRef,nbinRef,iband);
- unsigned long int nsampleInput=inputImg.getHistogram(histInput,minValueInput,maxValueInput,nbinInput,iband);
- //create cumulative historgrams
- for(unsigned int bin=0;bin<nbinRef;++bin){
- histRef[bin]+=100.0*static_cast<double>(histRef[bin])/static_cast<double>(nsampleRef);
- }
- for(unsigned int bin=0;bin<nbinInput;++bin)
- histInput[bin]+=100.0*static_cast<double>(histInput[bin])/static_cast<double>(nsampleInput);
- //match histograms
- vector<double> lineBuffer(inputImg.nrOfCol());
- for(int irow=0;irow<inputImg.nrOfRow();++irow){
- inputImg.readData(lineBuffer,GDT_Float64, irow, iband);
- for(int icol=0;icol<inputImg.nrOfCol();++icol){
- //find bin in input image histogram
- int inputBin=static_cast<int>(static_cast<double>(lineBuffer[icol]-minValueInput)/(maxValueInput-minValueInput)*(histInput.size()-1));
- //find corresponding bin in reference image histogram
- //todo: optimize with lower_bound?
- // std::vector<unsigned long int>::const_iterator hit=histRef.begin();
- int ibin=0;
- for(ibin=0;ibin<histRef.size();++ibin){
- if(histRef[ibin]>histInput[inputBin])
- break;
- }
- if(ibin)
- --ibin;
- lineBuffer[icol]=(maxValueRef-minValueRef)/(histRef.size()-1)*(ibin)+minValueRef;
- // std::vector<unsigned long int>::const_iterator it=std::lower_bound(histRef.begin(),histRef.end(),culInput);
- }
- outputImg.writeData(lineBuffer,GDT_Float64,irow,iband);
- progress=(1.0+irow);
- progress+=(outputImg.nrOfRow()*iband);
- progress/=outputImg.nrOfBand()*outputImg.nrOfRow();
- assert(progress>=0);
- assert(progress<=1);
- pfnProgress(progress,pszMessage,pProgressArg);
- }
- }
- }
-
- inputImg.close();
- if(method_opt[0]=="histmatch")
- referenceImg.close();
- outputImg.close();
- return 0;
-}
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index de7eabe..5215460 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -34,8 +34,72 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#define PI 3.1415926535897932384626433832795
#endif
+/******************************************************************************/
+/*! \page pkextract pkextract
+ extract pixel values from raster image from a (vector or raster) sample
+## SYNOPSIS
+
+<code>
+ Usage: pkextract -i input [-s sample | -rand number | -grid size] -o output
+</code>
+
+<code>
+
+ Options: [-ln layer]* [-c class]* [-t threshold]* [-f format] [-ft fieldType] [-lt labelType] [-polygon] [-b band]* [-r rule]
+
+ Advanced options:
+ [-bndnodata band -srcnodata value]* [-tp threshold] [-test testSample] [-bn attribute] [-cn attribute] [-geo value] [-down value] [-buf value [-circ]]
+</code>
+
+\section pkextract_description Description
+
+The utility pkextract extracts pixel values from an input raster dataset, based on the locations you provide via a sample file. Alternatively, a random sample or systematic grid of points can also be extracted. The sample can be a vector file with points or polygons. In the case of polygons, you can either extract the values for all raster pixels that are covered by the polygons, or extract a single value for each polygon such as the centroid, mean, median, etc. As output, a new copy of [...]
+
+Instead of a vector dataset, the sample can also be a raster dataset with categorical values. The typical use case is a land cover map that overlaps the input raster dataset. The utility then extracts pixels from the input raster for the respective land cover classes. To select a random subset of the sample raster dataset you can set the threshold option -t with a percentage value.
+
+A typical usage of pkextract is to prepare a training sample for one of the classifiers implemented in pktools.
+
+\section pkextract_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Raster input dataset containing band information |
+ | s | sample | std::string | |OGR vector dataset with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset. |
+ | ln | ln | std::string | |Layer name(s) in sample (leave empty to select all) |
+ | rand | random | unsigned int | |Create simple random sample of points. Provide number of points to generate |
+ | grid | grid | double | |Create systematic grid of points. Provide cell grid size (in projected units, e.g,. m) |
+ | o | output | std::string | |Output sample dataset |
+ | c | class | int | |Class(es) to extract from input sample image. Leave empty to extract all valid data pixels from sample dataset. Make sure to set classes if rule is set to mode or proportion |
+ | t | threshold | float | 100 |Probability threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). Use a single threshold for vector sample datasets. If using raster land cover maps as a sample dataset, you can provide a threshold value for each class (e.g. -t 80 -t 60). Use value 100 to select all pixels for selected class(es) |
+ | perc | perc | double | 95 |Percentile value used for rule percentile |
+ | f | f | std::string | SQLite |Output sample dataset format |
+ | ft | ftype | std::string | Real |Field type (only Real or Integer) |
+ | lt | ltype | std::string | Integer |Label type: In16 or String |
+ | polygon | polygon | bool | false |Create OGRPolygon as geometry instead of OGRPoint. |
+ | b | band | int | |Band index(es) to extract (0 based). Leave empty to use all bands |
+ | r | rule | std::string | centroid |Rule how to report image information per feature (only for vector sample). point (value at each point or at centroid if polygon), centroid, mean, stdev, median, proportion, min, max, mode, sum, percentile. |
+ | bndnodata | bndnodata | int | 0 |Band(s) in input image to check if pixel is valid (used for srcnodata) |
+ | srcnodata | srcnodata | double | |Invalid value(s) for input image |
+ | tp | thresholdPolygon | float | |(absolute) threshold for selecting samples in each polygon |
+ | test | test | std::string | |Test sample dataset (use this option in combination with threshold<100 to create a training (output) and test set |
+ | bn | bname | std::string | b |For single band input data, this extra attribute name will correspond to the raster values. For multi-band input data, multiple attributes with this prefix will be added (e.g. b0, b1, b2, etc.) |
+ | cn | cname | std::string | label |Name of the class label in the output vector dataset |
+ | geo | geo | short | 1 |Use geo coordinates (set to 0 to use image coordinates) |
+ | down | down | short | 1 |Down sampling factor (for raster sample datasets only). Can be used to create grid points |
+ | buf | buffer | short | |Buffer for calculating statistics for point features |
+ | circ | circular | bool | false |Use a circular disc kernel buffer (for vector point sample datasets only, use in combination with buffer option) |
+
+Usage: pkextract -i input [-s sample | -rand number | -grid size] -o output
+
+
+Examples
+========
+Some examples how to use pkextract can be found \ref examples_pkextract "here"
+**/
+
namespace rule{
- enum RULE_TYPE {point=0, mean=1, proportion=2, custom=3, min=4, max=5, mode=6, centroid=7, sum=8, median=9, stdev=10};
+ enum RULE_TYPE {point=0, mean=1, proportion=2, custom=3, min=4, max=5, mode=6, centroid=7, sum=8, median=9, stdev=10, percentile=11};
}
using namespace std;
@@ -50,12 +114,13 @@ int main(int argc, char *argv[])
Optionpk<string> output_opt("o", "output", "Output sample dataset");
Optionpk<int> class_opt("c", "class", "Class(es) to extract from input sample image. Leave empty to extract all valid data pixels from sample dataset. Make sure to set classes if rule is set to mode or proportion");
Optionpk<float> threshold_opt("t", "threshold", "Probability threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). Use a single threshold for vector sample datasets. If using raster land cover maps as a sample dataset, you can provide a threshold value for each class (e.g. -t 80 -t 60). Use value 100 to select all pixels for selected class(es)", 100);
+ Optionpk<double> percentile_opt("perc","perc","Percentile value used for rule percentile",95);
Optionpk<string> ogrformat_opt("f", "f", "Output sample dataset format","SQLite");
Optionpk<string> ftype_opt("ft", "ftype", "Field type (only Real or Integer)", "Real");
Optionpk<string> ltype_opt("lt", "ltype", "Label type: In16 or String", "Integer");
Optionpk<bool> polygon_opt("polygon", "polygon", "Create OGRPolygon as geometry instead of OGRPoint.", false);
Optionpk<int> band_opt("b", "band", "Band index(es) to extract (0 based). Leave empty to use all bands");
- Optionpk<string> rule_opt("r", "rule", "Rule how to report image information per feature (only for vector sample). point (value at each point or at centroid if polygon), centroid, mean, stdev, median, proportion, min, max, mode, sum.", "centroid");
+ Optionpk<string> rule_opt("r", "rule", "Rule how to report image information per feature (only for vector sample). point (value at each point or at centroid if polygon), centroid, mean, stdev, median, proportion, min, max, mode, sum, percentile.", "centroid");
Optionpk<double> srcnodata_opt("srcnodata", "srcnodata", "Invalid value(s) for input image");
Optionpk<int> bndnodata_opt("bndnodata", "bndnodata", "Band(s) in input image to check if pixel is valid (used for srcnodata)", 0);
Optionpk<float> polythreshold_opt("tp", "thresholdPolygon", "(absolute) threshold for selecting samples in each polygon");
@@ -71,6 +136,7 @@ int main(int argc, char *argv[])
bndnodata_opt.setHide(1);
srcnodata_opt.setHide(1);
polythreshold_opt.setHide(1);
+ percentile_opt.setHide(1);
test_opt.setHide(1);
fieldname_opt.setHide(1);
label_opt.setHide(1);
@@ -89,6 +155,7 @@ int main(int argc, char *argv[])
output_opt.retrieveOption(argc,argv);
class_opt.retrieveOption(argc,argv);
threshold_opt.retrieveOption(argc,argv);
+ percentile_opt.retrieveOption(argc,argv);
ogrformat_opt.retrieveOption(argc,argv);
ftype_opt.retrieveOption(argc,argv);
ltype_opt.retrieveOption(argc,argv);
@@ -134,6 +201,7 @@ int main(int argc, char *argv[])
ruleMap["custom"]=rule::custom;
ruleMap["mode"]=rule::mode;
ruleMap["sum"]=rule::sum;
+ ruleMap["percentile"]=rule::percentile;
if(srcnodata_opt.size()){
while(srcnodata_opt.size()<bndnodata_opt.size())
@@ -259,7 +327,12 @@ int main(int argc, char *argv[])
}
}
else{
- sampleWriterOgr.open("/vsimem/sample",ogrformat_opt[0]);
+ try{
+ sampleWriterOgr.open("/vsimem/virtual",ogrformat_opt[0]);
+ }
+ catch(string errorString){
+ cerr << errorString << endl;
+ }
char **papszOptions=NULL;
sampleWriterOgr.createLayer("points", imgReader.getProjection(), wkbPoint, papszOptions);
sampleIsVirtual=true;
@@ -316,7 +389,13 @@ int main(int argc, char *argv[])
std::cerr << "No sample dataset provided (use option -s). Use --help for help information";
exit(0);
}
- sampleReaderOgr.open("/vsimem/sample");
+ try{
+ sampleWriterOgr.close();
+ sampleReaderOgr.open("/vsimem/virtual");
+ }
+ catch(string errorString){
+ cerr << errorString << endl;
+ }
}
if(sampleIsRaster){
@@ -731,9 +810,13 @@ int main(int argc, char *argv[])
if(test_opt.size()){
if(verbose_opt[0]>1)
std::cout << "creating image test writer " << test_opt[0] << std::endl;
- ogrTestWriter.open(test_opt[0],ogrformat_opt[0]);
+ try{
+ ogrTestWriter.open(test_opt[0],ogrformat_opt[0]);
+ }
+ catch(string errorString){
+ cerr << errorString << endl;
+ }
}
-
//support multiple layers
int nlayerRead=sampleReaderOgr.getDataSource()->GetLayerCount();
int ilayerWrite=0;
@@ -897,10 +980,6 @@ int main(int argc, char *argv[])
double ulj=j_centre-buffer_opt[0]/2;
double lri=i_centre+buffer_opt[0]/2;
double lrj=j_centre+buffer_opt[0]/2;
- // double uli=i_centre-buffer_opt[0]/2-0.5;
- // double ulj=j_centre-buffer_opt[0]/2-0.5;
- // double lri=i_centre+buffer_opt[0]/2+0.5;
- // double lrj=j_centre+buffer_opt[0]/2+0.5;
//nearest neighbour
ulj=static_cast<int>(ulj);
@@ -908,12 +987,12 @@ int main(int argc, char *argv[])
lrj=static_cast<int>(lrj);
lri=static_cast<int>(lri);
- if((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){
- uli=i_centre;
- ulj=j_centre;
- lri=i_centre;
- lrj=j_centre;
- }
+ // if((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){
+ // uli=i_centre;
+ // ulj=j_centre;
+ // lri=i_centre;
+ // lrj=j_centre;
+ // }
//check if j is out of bounds
if(static_cast<int>(ulj)<0||static_cast<int>(ulj)>=imgReader.nrOfRow())
@@ -933,8 +1012,8 @@ int main(int argc, char *argv[])
unsigned short nstep = 25;
for(int i=0;i<nstep;++i){
OGRPoint aPoint;
- aPoint.setX(x+radius*cos(2*PI*i/nstep));
- aPoint.setY(y+radius*sin(2*PI*i/nstep));
+ aPoint.setX(x+imgReader.getDeltaX()/2.0+radius*cos(2*PI*i/nstep));
+ aPoint.setY(y-imgReader.getDeltaY()/2.0+radius*sin(2*PI*i/nstep));
writeRing.addPoint(&aPoint);
}
writePolygon.addRing(&writeRing);
@@ -963,6 +1042,13 @@ int main(int argc, char *argv[])
}
}
+ if((polygon_opt[0]&&ruleMap[rule_opt[0]]==rule::point)||(ruleMap[rule_opt[0]]==rule::centroid)){
+ uli=i_centre;
+ ulj=j_centre;
+ lri=i_centre;
+ lrj=j_centre;
+ }
+
int nPointWindow=0;//similar to nPointPolygon for polygons
if(polygon_opt[0]){
if(writeTest)
@@ -1238,6 +1324,8 @@ int main(int argc, char *argv[])
theValue=sqrt(stat.var(windowValues[index]));
else if(ruleMap[rule_opt[0]]==rule::median)
theValue=stat.median(windowValues[index]);
+ else if(ruleMap[rule_opt[0]]==rule::percentile)
+ theValue=stat.percentile(windowValues[index],windowValues[index].begin(),windowValues[index].end(),percentile_opt[0]);
else if(ruleMap[rule_opt[0]]==rule::sum)
theValue=stat.sum(windowValues[index]);
else if(ruleMap[rule_opt[0]]==rule::max)
@@ -1728,6 +1816,8 @@ int main(int argc, char *argv[])
theValue=sqrt(stat.var(polyValues[index]));
else if(ruleMap[rule_opt[0]]==rule::median)
theValue=stat.median(polyValues[index]);
+ else if(ruleMap[rule_opt[0]]==rule::percentile)
+ theValue=stat.percentile(polyValues[index],polyValues[index].begin(),polyValues[index].end(),percentile_opt[0]);
else if(ruleMap[rule_opt[0]]==rule::sum)
theValue=stat.sum(polyValues[index]);
else if(ruleMap[rule_opt[0]]==rule::max)
@@ -2224,6 +2314,8 @@ int main(int argc, char *argv[])
theValue=sqrt(stat.var(polyValues[index]));
else if(ruleMap[rule_opt[0]]==rule::median)
theValue=stat.median(polyValues[index]);
+ else if(ruleMap[rule_opt[0]]==rule::percentile)
+ theValue=stat.percentile(polyValues[index],polyValues[index].begin(),polyValues[index].end(),percentile_opt[0]);
else if(ruleMap[rule_opt[0]]==rule::sum)
theValue=stat.sum(polyValues[index]);
else if(ruleMap[rule_opt[0]]==rule::max)
@@ -2400,8 +2492,6 @@ int main(int argc, char *argv[])
++ilayerWrite;
}//for ilayer
ogrWriter.close();
- if(sampleIsVirtual)
- sampleWriterOgr.close();
if(test_opt.size())
ogrTestWriter.close();
}//else (vector)
diff --git a/src/apps/pkfillnodata.cc b/src/apps/pkfillnodata.cc
index 681d1bf..3663b62 100644
--- a/src/apps/pkfillnodata.cc
+++ b/src/apps/pkfillnodata.cc
@@ -26,6 +26,43 @@ extern "C" {
#include <string>
#include "base/Optionpk.h"
+/******************************************************************************/
+/*! \page pkfillnodata pkfillnodata
+ program to fill holes in raster image
+## SYNOPSIS
+
+<code>
+ Usage: pkfillnodata -i input.txt -m mask -o output
+</code>
+
+<code>
+
+ Options: [-b band]*
+
+ Advanced options: [-d distance] [-it iterations]
+
+</code>
+
+\section pkfillnodata_description Description
+
+The utility pkfillnodata fills nodata values in a raster dataset. Nodata values are defined as 0 values in the mask raster dataset. You can use the input file as the mask image if 0 values in the input raster have to be filled. Per default, all bands are filled. Use the option -b to fill individual band(s) in a multiband raster input image.
+\section pkfillnodata_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input raster dataset |
+ | b | band | int | |band(s) to process (Default is -1: process all bands) |
+ | o | output | std::string | |Output image file |
+ | m | mask | std::string | |Mask raster dataset indicating pixels to be interpolated (zero valued) |
+ | d | distance | double | 0 |Maximum number of pixels to search in all directions to find values to interpolate from |
+ | it | iteration | int | 0 |Number of 3x3 smoothing filter passes to run (default 0) |
+
+Usage: pkfillnodata -i input.txt -m mask -o output
+
+
+**/
+
using namespace std;
int main(int argc,char **argv) {
diff --git a/src/apps/pkfilter.cc b/src/apps/pkfilter.cc
index 3c352ce..252ac8a 100644
--- a/src/apps/pkfilter.cc
+++ b/src/apps/pkfilter.cc
@@ -31,6 +31,88 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "fileclasses/FileReaderAscii.h"
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
+//test
+#include "algorithms/StatFactory.h"
+
+/******************************************************************************/
+/*! \page pkfilter pkfilter
+ program to filter raster images
+## SYNOPSIS
+
+<code>
+ Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*]
+</code>
+
+<code>
+ Options: [-dx value [-dy value] | -dz value] [-nodata value]
+
+ Advanced options: check table
+</code>
+
+\section pkfilter_description Description
+
+This utility implements spatial and spectral filtering for raster data. In the spatial domain (X, Y), the filter typically involves a rectangular convolution kernel (moving window). To avoid image shifting, the size of the window should be odd (3, 5, 7, ...). You can set the window sizes in X and Y directions separately with the options -dx and -dy. A circular kernel (disc) is applied if option -circ is set. An overview of the supported filters (option -f|--filter) is given below. You ca [...]
+
+\anchor pkfilter_functions
+//hiero
+composite rule | composite output
+------------- | -------------
+overwrite | Overwrite overlapping pixels: the latter input image on the command line overrules the previous image
+maxndvi | Create a maximum NDVI (normalized difference vegetation index) composite from multi-band input images. Use option -cb to set the indexes of the red and near infrared bands respectively (e.g., -cb 0 -cb 1)
+maxband | Select the pixel with a maximum value in the band specified by option -cb
+minband | Select the pixel with a minimum value in the band specified by option -cb
+mean | Calculate the mean (average) of overlapping pixels
+stdev | Calculate the standard deviation of overlapping pixels
+median | Calculate the median of overlapping pixels
+mode | Select the mode of overlapping pixels (maximum voting): use for Byte images only
+sum | Calculate the arithmetic sum of overlapping pixels
+maxallbands | For each individual band, assign the maximum value found in all overlapping pixels. Unlike maxband, output band values cannot be attributed to a single (date) pixel in the input time series
+minallbands | For each individual band, assign the minimum value found in all overlapping pixels. Unlike minband, output band values cannot be attributed to a single (date) pixel in the input time series
+
+\section pkfilter_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input image file |
+ | o | output | std::string | |Output image file |
+ | f | filter | std::string | |filter function (median, var, min, max, sum, mean, dilate, erode, close, open, homog (central pixel must be identical to all other pixels within window), heterog (central pixel must be different than all other pixels within window), sobelx (horizontal edge detection), sobely (vertical edge detection), sobelxy (diagonal edge detection NE-SW),sobelyx (diagonal edge detection NW-SE), smooth, density, countid, mode (majority voting, onl [...]
+ | srf | srf | std::string | |list of ASCII files containing spectral response functions (two columns: wavelength response) |
+ | fwhm | fwhm | double | |list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...) |
+ | dx | dx | double | 3 |filter kernel size in x, better use odd value to avoid image shift |
+ | dy | dy | double | 3 |filter kernel size in y, better use odd value to avoid image shift |
+ | dz | dz | int | |filter kernel size in z (spectral/temporal dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain |
+ | nodata | nodata | double | |nodata value(s) (used for smoothnodata filter) |
+ | r | resampling-method | std::string | near |Resampling method for shifting operation (near: nearest neighbour, bilinear: bi-linear interpolation). |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | wt | wavelet | std::string | daubechies |wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered |
+ | wf | family | int | 4 |wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html) |
+ | nl | nl | int | 2 |Number of leftward (past) data points used in Savitzky-Golay filter) |
+ | nr | nr | int | 2 |Number of rightward (future) data points used in Savitzky-Golay filter) |
+ | ld | ld | int | 0 |order of the derivative desired in Savitzky-Golay filter (e.g., ld=0 for smoothed function) |
+ | m | m | int | 2 |order of the smoothing polynomial in Savitzky-Golay filter, also equal to the highest conserved moment; usual values are m = 2 or m = 4) |
+ | class | class | short | |class value(s) to use for density, erosion, dilation, openening and closing, thresholding |
+ | t | threshold | double | 0 |threshold value(s) to use for threshold filter (one for each class), or threshold to cut for dwt_cut (use 0 to keep all) or dwt_cut_from, or sigma for shift |
+ | tap | tap | std::string | |text file containing taps used for spatial filtering (from ul to lr). Use dimX and dimY to specify tap dimensions in x and y. Leave empty for not using taps |
+ | tapz | tapz | double | |taps used for spectral filtering |
+ | pad | pad | std::string | symmetric |Padding method for filtering (how to handle edge effects). Choose between: symmetric, replicate, circular, zero (pad with 0). |
+ | win | wavelengthIn | double | |list of wavelengths in input spectrum (-win band1 -win band2 ...) |
+ | wout | wavelengthOut | double | |list of wavelengths in output spectrum (-wout band1 -wout band2 ...) |
+ | d | down | short | 1 |down sampling factor. Use value 1 for no downsampling). Use value n>1 for downsampling (aggregation) |
+ | beta | beta | std::string | |ASCII file with beta for each class transition in Markov Random Field |
+ | interp | interp | std::string | akima |type of interpolation for spectral filtering (see http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html) |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table |
+ | circ | circular | bool | false |circular disc kernel for dilation and erosion |
+
+Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*]
+
+
+Examples
+========
+Some examples how to use pkfilter can be found \ref examples_pkfilter "here"
+**/
using namespace std;
/*------------------
@@ -42,11 +124,11 @@ int main(int argc,char **argv) {
// Optionpk<std::string> tmpdir_opt("tmp", "tmp", "Temporary directory","/tmp",2);
Optionpk<bool> disc_opt("circ", "circular", "circular disc kernel for dilation and erosion", false);
// Optionpk<double> angle_opt("a", "angle", "angle used for directional filtering in dilation (North=0, East=90, South=180, West=270).");
- Optionpk<std::string> method_opt("f", "filter", "filter function (median, var, min, max, sum, mean, dilate, erode, close, open, homog (central pixel must be identical to all other pixels within window), heterog, sobelx (horizontal edge detection), sobely (vertical edge detection), sobelxy (diagonal edge detection NE-SW),sobelyx (diagonal edge detection NW-SE), smooth, density, countid, mode (majority voting, only for classes), smoothnodata (smooth nodata values only) values, threshold [...]
+ Optionpk<std::string> method_opt("f", "filter", "filter function (median, var, min, max, sum, mean, dilate, erode, close, open, homog (central pixel must be identical to all other pixels within window), heterog (central pixel must be different than all other pixels within window), sobelx (horizontal edge detection), sobely (vertical edge detection), sobelxy (diagonal edge detection NE-SW),sobelyx (diagonal edge detection NW-SE), smooth, density, countid, mode (majority voting, only for [...]
Optionpk<std::string> resample_opt("r", "resampling-method", "Resampling method for shifting operation (near: nearest neighbour, bilinear: bi-linear interpolation).", "near");
Optionpk<double> dimX_opt("dx", "dx", "filter kernel size in x, better use odd value to avoid image shift", 3);
Optionpk<double> dimY_opt("dy", "dy", "filter kernel size in y, better use odd value to avoid image shift", 3);
- Optionpk<int> dimZ_opt("dz", "dz", "filter kernel size in z (band or spectral dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain");
+ Optionpk<int> dimZ_opt("dz", "dz", "filter kernel size in z (spectral/temporal dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain");
Optionpk<std::string> wavelet_type_opt("wt", "wavelet", "wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered", "daubechies");
Optionpk<int> family_opt("wf", "family", "wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html)", 4);
Optionpk<int> savgolay_nl_opt("nl", "nl", "Number of leftward (past) data points used in Savitzky-Golay filter)", 2);
@@ -70,16 +152,17 @@ int main(int argc,char **argv) {
Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
Optionpk<short> down_opt("d", "down", "down sampling factor. Use value 1 for no downsampling). Use value n>1 for downsampling (aggregation)", 1);
Optionpk<string> beta_opt("beta", "beta", "ASCII file with beta for each class transition in Markov Random Field");
- Optionpk<double> eps_opt("eps","eps", "error marging for linear feature",0);
- Optionpk<bool> l1_opt("l1","l1", "obtain longest object length for linear feature",false);
- Optionpk<bool> l2_opt("l2","l2", "obtain shortest object length for linear feature",false,2);
- Optionpk<bool> a1_opt("a1","a1", "obtain angle found for longest object length for linear feature",false);
- Optionpk<bool> a2_opt("a2","a2", "obtain angle found for shortest object length for linear feature",false);
+ // Optionpk<double> eps_opt("eps","eps", "error marging for linear feature",0);
+ // Optionpk<bool> l1_opt("l1","l1", "obtain longest object length for linear feature",false);
+ // Optionpk<bool> l2_opt("l2","l2", "obtain shortest object length for linear feature",false,2);
+ // Optionpk<bool> a1_opt("a1","a1", "obtain angle found for longest object length for linear feature",false);
+ // Optionpk<bool> a2_opt("a2","a2", "obtain angle found for shortest object length for linear feature",false);
Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0,2);
resample_opt.setHide(1);
option_opt.setHide(1);
wavelet_type_opt.setHide(1);
+ family_opt.setHide(1);
savgolay_nl_opt.setHide(1);
savgolay_nr_opt.setHide(1);
savgolay_ld_opt.setHide(1);
@@ -93,11 +176,11 @@ int main(int argc,char **argv) {
wavelengthOut_opt.setHide(1);
down_opt.setHide(1);
beta_opt.setHide(1);
- eps_opt.setHide(1);
- l1_opt.setHide(1);
- l2_opt.setHide(1);
- a1_opt.setHide(1);
- a2_opt.setHide(1);
+ // eps_opt.setHide(1);
+ // l1_opt.setHide(1);
+ // l2_opt.setHide(1);
+ // a1_opt.setHide(1);
+ // a2_opt.setHide(1);
interpolationType_opt.setHide(1);
otype_opt.setHide(1);
oformat_opt.setHide(1);
@@ -120,6 +203,7 @@ int main(int argc,char **argv) {
resample_opt.retrieveOption(argc,argv);
option_opt.retrieveOption(argc,argv);
wavelet_type_opt.retrieveOption(argc,argv);
+ family_opt.retrieveOption(argc,argv);
savgolay_nl_opt.retrieveOption(argc,argv);
savgolay_nr_opt.retrieveOption(argc,argv);
savgolay_ld_opt.retrieveOption(argc,argv);
@@ -133,11 +217,11 @@ int main(int argc,char **argv) {
wavelengthOut_opt.retrieveOption(argc,argv);
down_opt.retrieveOption(argc,argv);
beta_opt.retrieveOption(argc,argv);
- eps_opt.retrieveOption(argc,argv);
- l1_opt.retrieveOption(argc,argv);
- l2_opt.retrieveOption(argc,argv);
- a1_opt.retrieveOption(argc,argv);
- a2_opt.retrieveOption(argc,argv);
+ // eps_opt.retrieveOption(argc,argv);
+ // l1_opt.retrieveOption(argc,argv);
+ // l2_opt.retrieveOption(argc,argv);
+ // a1_opt.retrieveOption(argc,argv);
+ // a2_opt.retrieveOption(argc,argv);
interpolationType_opt.retrieveOption(argc,argv);
otype_opt.retrieveOption(argc,argv);
oformat_opt.retrieveOption(argc,argv);
@@ -151,7 +235,7 @@ int main(int argc,char **argv) {
}
if(!doProcess){
cout << endl;
- cout << "Usage: pkfilter -i input -o ouptut [-f filter | -srf file [-srf file]* | -fwhm value [-fwhm value]*]" << endl;
+ cout << "Usage: pkfilter -i input -o ouptut [-f filter | -perc value | -srf file [-srf file]* -win wavelength [-win wavelength]* | -wout wavelength -fwhm value [-wout wavelength -fwhm value]* -win wavelength [-win wavelength]*]" << endl;
cout << endl;
std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
exit(0);//help was invoked, stop processing
@@ -170,10 +254,6 @@ int main(int argc,char **argv) {
cerr << "Error: no output file selected, use option -o" << endl;
exit(1);
}
- if(method_opt.empty()){
- cerr << "Error: no filter selected, use option -f" << endl;
- exit(1);
- }
input.open(input_opt[0]);
GDALDataType theType=GDT_Unknown;
if(verbose_opt[0])
@@ -202,48 +282,112 @@ int main(int argc,char **argv) {
option_opt.push_back(theInterleave);
}
try{
- if(filter2d::Filter2d::getFilterType(method_opt[0])==filter2d::mrf){
- assert(class_opt.size()>1);
- if(verbose_opt[0])
- std::cout << "opening output image " << output_opt[0] << std::endl;
- output.open(output_opt[0],(input.nrOfCol()+down_opt[0]-1)/down_opt[0],(input.nrOfRow()+down_opt[0]-1)/down_opt[0],class_opt.size(),theType,imageType,option_opt);
- }
- else if(filter2d::Filter2d::getFilterType(method_opt[0])==filter2d::linearfeature){
- if(verbose_opt[0])
- std::cout << "opening output image " << output_opt[0] << std::endl;
- int nband=0;
- if(l1_opt[0])
- ++nband;
- if(a1_opt[0])
- ++nband;
- if(l2_opt[0])
- ++nband;
- if(a2_opt[0])
- ++nband;
- output.open(output_opt[0],input.nrOfCol(),input.nrOfRow(),nband,theType,imageType,option_opt);
- }
- else if(fwhm_opt.size()||srf_opt.size()){
- //todo: support down and offset
- int nband=fwhm_opt.size()? fwhm_opt.size():srf_opt.size();
- output.open(output_opt[0],(input.nrOfCol()+down_opt[0]-1)/down_opt[0],(input.nrOfRow()+down_opt[0]-1)/down_opt[0],nband,theType,imageType,option_opt);
- }
+ int nband=input.nrOfBand();
+
+ if(fwhm_opt.size())
+ nband=fwhm_opt.size();
+ else if(srf_opt.size())
+ nband=srf_opt.size();
+ else if(tap_opt.size()||tapz_opt.size())
+ nband=input.nrOfBand();
else{
- int nband=input.nrOfBand();
- if(dimZ_opt.size()){
- if(filter2d::Filter2d::getFilterType(method_opt[0])==filter2d::smoothnodata)
- dimZ_opt[0]=nband;
- if(dimZ_opt[0]==1){
- nband=1;
- if(verbose_opt[0])
- std::cout << "opening single band output image " << output_opt[0] << std::endl;
+ if(method_opt.empty()){
+ cerr << "Error: no filter selected, use option -f" << endl;
+ exit(1);
+ }
+ switch(filter2d::Filter2d::getFilterType(method_opt[0])){
+ case(filter2d::dilate):
+ case(filter2d::erode):
+ case(filter2d::close):
+ case(filter2d::open):
+ case(filter2d::smooth):
+ //implemented in spectral/temporal domain (dimZ>1) and spatial domain
+ if(dimZ_opt.size())
+ assert(dimZ_opt[0]>1);
+ nband=input.nrOfBand();
+ break;
+ case(filter2d::dwt):
+ case(filter2d::dwti):
+ case(filter2d::dwt_cut):
+ case(filter2d::smoothnodata):
+ //implemented in spectral/temporal/spatial domain and nband always input.nrOfBand()
+ nband=input.nrOfBand();
+ break;
+ case(filter2d::savgolay):
+ nband=input.nrOfBand();
+ if(dimZ_opt.empty())
+ dimZ_opt.push_back(1);
+ case(filter2d::dwt_cut_from):
+ //only implemented in spectral/temporal domain
+ if(dimZ_opt.size()){
+ nband=input.nrOfBand();
+ assert(threshold_opt.size());
+ }
+ else{
+ cerr << "filter not implemented in spectral/temporal domain" << endl;
+ exit(1);
}
- else if(verbose_opt[0])
- std::cout << "opening multi-band output image " << output_opt[0] << std::endl;
+ break;
+ case(filter2d::mrf)://deliberate fall through
+ assert(class_opt.size()>1);
+ if(verbose_opt[0])
+ std::cout << "opening output image " << output_opt[0] << std::endl;
+ nband=class_opt.size();
+ case(filter2d::ismin):
+ case(filter2d::ismax):
+ case(filter2d::shift):
+ case(filter2d::scramble):
+ case(filter2d::mode):
+ case(filter2d::sobelx):
+ case(filter2d::sobely):
+ case(filter2d::sobelxy):
+ case(filter2d::countid):
+ case(filter2d::order):
+ case(filter2d::density):
+ case(filter2d::homog):
+ case(filter2d::heterog):
+ //only implemented in spatial domain
+ if(dimZ_opt.size()){
+ cerr << "filter not implemented in spectral/temporal domain" << endl;
+ exit(1);
+ }
+ break;
+ // case(filter2d::percentile):
+ // //implemented in spectral/temporal/spatial domain and nband 1 if dimZ>0
+ // if(dimZ_opt.size()){
+ // dimZ_opt[0]=1;
+ // nband=1;
+ // }
+ // else
+ // nband=input.nrOfBand();
+ // break;
+ case(filter2d::sum):
+ case(filter2d::mean):
+ case(filter2d::min):
+ case(filter2d::max):
+ case(filter2d::var):
+ case(filter2d::stdev):
+ case(filter2d::median):
+ case(filter2d::percentile):
+ //implemented in spectral/temporal/spatial domain and nband 1 if dimZ==1
+ if(dimZ_opt.size()==1)
+ if(dimZ_opt[0]==1)
+ nband=1;
+ else
+ nband=input.nrOfBand();
+ break;
+ default:
+ cerr << "filter not implemented" << endl;
+ exit(1);
+ // if(dimZ_opt.size())
+ // nband=dimZ_opt[0];
+ // else
+ // nband=input.nrOfBand();
+ break;
}
- else
- std::cout << "opening output image " << output_opt[0] << std::endl;
- output.open(output_opt[0],(input.nrOfCol()+down_opt[0]-1)/down_opt[0],(input.nrOfRow()+down_opt[0]-1)/down_opt[0],nband,theType,imageType,option_opt);
}
+ std::cout << "opening output image " << output_opt[0] << " with " << nband << " bands" << std::endl;
+ output.open(output_opt[0],(input.nrOfCol()+down_opt[0]-1)/down_opt[0],(input.nrOfRow()+down_opt[0]-1)/down_opt[0],nband,theType,imageType,option_opt);
}
catch(string errorstring){
cout << errorstring << endl;
@@ -323,8 +467,13 @@ int main(int argc,char **argv) {
std::cout<< std::endl;
}
}
- filter2d.setTaps(taps);
- filter2d.filter(input,output);
+ filter2d.setTaps(taps);
+ try{
+ filter2d.filter(input,output);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
tapfile.close();
}
else if(tapz_opt.size()){
@@ -367,7 +516,6 @@ int main(int argc,char **argv) {
progress=(1.0+y)/output.nrOfRow();
pfnProgress(progress,pszMessage,pProgressArg);
}
- // filter1d.applyFwhm(wavelengthIn_opt,input,wavelengthOut_opt,fwhm_opt,interpolationType_opt[0],output,verbose_opt[0]);
}
else if(srf_opt.size()){
if(verbose_opt[0])
@@ -412,10 +560,10 @@ int main(int argc,char **argv) {
for(int iband=0;iband<input.nrOfBand();++iband)
input.readData(lineInput[iband],GDT_Float64,y,iband);
for(int isrf=0;isrf<srf.size();++isrf){
- vector<double> lineOutput(input.nrOfCol());
+ vector<double> lineOutput(output.nrOfCol());
double delta=1.0;
bool normalize=true;
- centreWavelength=filter1d.applySrf<double>(wavelengthIn_opt,lineInput,srf[isrf], interpolationType_opt[0], lineOutput, delta, normalize, verbose_opt[0]);
+ centreWavelength=filter1d.applySrf<double>(wavelengthIn_opt,lineInput,srf[isrf], interpolationType_opt[0], lineOutput, delta, normalize);
if(verbose_opt[0])
std::cout << "centre wavelength srf " << isrf << ": " << centreWavelength << std::endl;
try{
@@ -430,7 +578,6 @@ int main(int argc,char **argv) {
pfnProgress(progress,pszMessage,pProgressArg);
}
- // filter1d.applySrf(wavelengthIn_opt,input,srf,interpolationType_opt[0],output,verbose_opt[0]);
}
else{
switch(filter2d::Filter2d::getFilterType(method_opt[0])){
@@ -439,13 +586,17 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for morphological operator" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
std::cout<< "1-D filtering: dilate" << std::endl;
- filter1d.morphology(input,output,"dilate",dimZ_opt[0],verbose_opt[0]);
+ filter1d.morphology(input,output,"dilate",dimZ_opt[0],verbose_opt[0]);
+ }
+ else
+ filter2d.morphology(input,output,"dilate",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
}
- else{
- filter2d.morphology(input,output,"dilate",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
break;
case(filter2d::erode):
@@ -453,26 +604,28 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for morphological operator" << std::endl;
exit(1);
}
- if(dimZ_opt.size()>0){
- if(verbose_opt[0])
- std::cout<< "1-D filtering: dilate" << std::endl;
- filter1d.morphology(input,output,"erode",dimZ_opt[0]);
+ try{
+ if(dimZ_opt.size()>0){
+ if(verbose_opt[0])
+ std::cout<< "1-D filtering: dilate" << std::endl;
+ filter1d.morphology(input,output,"erode",dimZ_opt[0]);
+ }
+ else{
+ filter2d.morphology(input,output,"erode",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ }
}
- else{
- filter2d.morphology(input,output,"erode",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- break;
+ break;
case(filter2d::close):{//closing
if(down_opt[0]!=1){
std::cerr << "Error: down option not supported for morphological operator" << std::endl;
exit(1);
}
- // ostringstream tmps;
- // tmps << tmpdir_opt[0] << "/dilation_" << getpid() << ".tif";
ImgWriterGdal tmpout;
- tmpout.open("/vsimem/dilation",input);
- // tmpout.open(tmps.str(),input);
+ tmpout.open("/vsimem/dilation.tif",input.nrOfCol(),input.nrOfRow(),input.nrOfBand(),input.getDataType(),input.getImageType());
try{
if(dimZ_opt.size()){
filter1d.morphology(input,tmpout,"dilate",dimZ_opt[0]);
@@ -485,21 +638,21 @@ int main(int argc,char **argv) {
std::cout<< errorString;
exit(1);
}
- // tmpout.close();
+ tmpout.close();
ImgReaderGdal tmpin;
- tmpin.open("/vsimem/dilation");
- // tmpin.open(tmps.str());
- if(dimZ_opt.size()){
- filter1d.morphology(tmpin,output,"erode",dimZ_opt[0]);
+ tmpin.open("/vsimem/dilation.tif");
+ try{
+ if(dimZ_opt.size()){
+ filter1d.morphology(tmpin,output,"erode",dimZ_opt[0]);
+ }
+ else{
+ filter2d.morphology(tmpin,output,"erode",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ }
}
- else{
- filter2d.morphology(tmpin,output,"erode",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
tmpin.close();
- tmpout.close();
- // if(remove(tmps.str().c_str( )) !=0){
- // cerr << "could not remove " << tmps.str() << std::endl;
- // }
break;
}
case(filter2d::open):{//opening
@@ -507,11 +660,8 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for morphological operator" << std::endl;
exit(1);
}
- // ostringstream tmps;
- // tmps << tmpdir_opt[0] << "/erosion_" << getpid() << ".tif";
ImgWriterGdal tmpout;
- tmpout.open("/vsimem/erosion",input);
- // tmpout.open(tmps.str(),input);
+ tmpout.open("/vsimem/erosion.tif",input.nrOfCol(),input.nrOfRow(),input.nrOfBand(),input.getDataType(),input.getImageType());
try{
if(dimZ_opt.size()){
filter1d.morphology(input,tmpout,"erode",dimZ_opt[0]);
@@ -524,98 +674,113 @@ int main(int argc,char **argv) {
std::cout<< errorString;
exit(1);
}
- // tmpout.close();
+ tmpout.close();
ImgReaderGdal tmpin;
- tmpin.open("/vsimem/erosion");
- // tmpin.open(tmps.str());
- if(dimZ_opt.size()){
- filter1d.morphology(tmpin,output,"dilate",dimZ_opt[0]);
+ try{
+ tmpin.open("/vsimem/erosion.tif");
+ if(dimZ_opt.size()){
+ filter1d.morphology(tmpin,output,"dilate",dimZ_opt[0]);
+ }
+ else{
+ filter2d.morphology(tmpin,output,"dilate",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ }
+ tmpin.close();
+ tmpout.close();
}
- else{
- filter2d.morphology(tmpin,output,"dilate",dimX_opt[0],dimY_opt[0],angle_opt,disc_opt[0]);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- tmpin.close();
- tmpout.close();
- // if(remove(tmps.str().c_str( )) !=0){
- // cerr << "could not remove " << tmps.str() << std::endl;
- // }
break;
}
case(filter2d::homog):{//spatially homogeneous
- filter2d.doit(input,output,"homog",dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
- // filter2d.homogeneousSpatial(input,output,dimX_opt[0],disc_opt[0]);
- break;
+ try{
+ filter2d.doit(input,output,"homog",dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
+ break;
}
case(filter2d::heterog):{//spatially heterogeneous
- filter2d.doit(input,output,"heterog",dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
- break;
- }
- case(filter2d::shift):{//shift
- if(down_opt[0]!=1){
- std::cerr << "Error: down option not supported for shift operator" << std::endl;
- exit(1);
- }
- assert(input.nrOfBand());
- assert(input.nrOfCol());
- assert(input.nrOfRow());
try{
- filter2d.shift(input,output,dimX_opt[0],dimY_opt[0],threshold_opt[0],filter2d::Filter2d::getResampleType(resample_opt[0]));
+ filter2d.doit(input,output,"heterog",dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
}
catch(string errorstring){
- cerr << errorstring << endl;
+ cerr << errorstring << endl;
}
break;
}
- case(filter2d::linearfeature):{
+ case(filter2d::shift):{//shift
if(down_opt[0]!=1){
- std::cerr << "Error: down option not supported for linear feature" << std::endl;
+ std::cerr << "Error: down option not supported for shift operator" << std::endl;
exit(1);
}
assert(input.nrOfBand());
assert(input.nrOfCol());
assert(input.nrOfRow());
- float theAngle=361;
- if(angle_opt.size())
- theAngle=angle_opt[0];
- if(verbose_opt[0])
- std::cout << "using angle " << theAngle << std::endl;
try{
- //using an angle step of 5 degrees and no maximum distance
- filter2d.linearFeature(input,output,theAngle,5,0,eps_opt[0],l1_opt[0],a1_opt[0],l2_opt[0],a2_opt[0],0,verbose_opt[0]);
+ filter2d.shift(input,output,dimX_opt[0],dimY_opt[0],threshold_opt[0],filter2d::Filter2d::getResampleType(resample_opt[0]));
}
catch(string errorstring){
cerr << errorstring << endl;
}
break;
}
+ // case(filter2d::linearfeature):{
+ // if(down_opt[0]!=1){
+ // std::cerr << "Error: down option not supported for linear feature" << std::endl;
+ // exit(1);
+ // }
+ // assert(input.nrOfBand());
+ // assert(input.nrOfCol());
+ // assert(input.nrOfRow());
+ // float theAngle=361;
+ // if(angle_opt.size())
+ // theAngle=angle_opt[0];
+ // if(verbose_opt[0])
+ // std::cout << "using angle " << theAngle << std::endl;
+ // try{
+ // //using an angle step of 5 degrees and no maximum distance
+ // filter2d.linearFeature(input,output,theAngle,5,0,eps_opt[0],l1_opt[0],a1_opt[0],l2_opt[0],a2_opt[0],0,verbose_opt[0]);
+ // }
+ // catch(string errorstring){
+ // cerr << errorstring << endl;
+ // }
+ // break;
+ // }
case(filter2d::mrf):{//Markov Random Field
if(verbose_opt[0])
std::cout << "Markov Random Field filtering" << std::endl;
- if(beta_opt.size()){
- //in file: classFrom classTo
- //in variable: beta[classTo][classFrom]
- FileReaderAscii betaReader(beta_opt[0]);
- Vector2d<double> beta(class_opt.size(),class_opt.size());
- vector<int> cols(class_opt.size());
- for(int iclass=0;iclass<class_opt.size();++iclass)
- cols[iclass]=iclass;
- betaReader.readData(beta,cols);
- if(verbose_opt[0]){
- std::cout << "using values for beta:" << std::endl;
- for(int iclass1=0;iclass1<class_opt.size();++iclass1)
- std::cout << " " << iclass1 << " (" << class_opt[iclass1] << ")";
- std::cout << std::endl;
- for(int iclass1=0;iclass1<class_opt.size();++iclass1){
- std::cout << iclass1 << " (" << class_opt[iclass1] << ")";
- for(int iclass2=0;iclass2<class_opt.size();++iclass2)
- std::cout << " " << beta[iclass2][iclass1] << " (" << class_opt[iclass2] << ")";
+ try{
+ if(beta_opt.size()){
+ //in file: classFrom classTo
+ //in variable: beta[classTo][classFrom]
+ FileReaderAscii betaReader(beta_opt[0]);
+ Vector2d<double> beta(class_opt.size(),class_opt.size());
+ vector<int> cols(class_opt.size());
+ for(int iclass=0;iclass<class_opt.size();++iclass)
+ cols[iclass]=iclass;
+ betaReader.readData(beta,cols);
+ if(verbose_opt[0]){
+ std::cout << "using values for beta:" << std::endl;
+ for(int iclass1=0;iclass1<class_opt.size();++iclass1)
+ std::cout << " " << iclass1 << " (" << class_opt[iclass1] << ")";
std::cout << std::endl;
+ for(int iclass1=0;iclass1<class_opt.size();++iclass1){
+ std::cout << iclass1 << " (" << class_opt[iclass1] << ")";
+ for(int iclass2=0;iclass2<class_opt.size();++iclass2)
+ std::cout << " " << beta[iclass2][iclass1] << " (" << class_opt[iclass2] << ")";
+ std::cout << std::endl;
+ }
}
+ filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], beta, true, down_opt[0], verbose_opt[0]);
}
- filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], beta, true, down_opt[0], verbose_opt[0]);
+ else
+ filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], 1, true, down_opt[0], verbose_opt[0]);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- else
- filter2d.mrf(input, output, dimX_opt[0], dimY_opt[0], 1, true, down_opt[0], verbose_opt[0]);
break;
}
case(filter2d::sobelx):{//Sobel edge detection in X
@@ -634,7 +799,12 @@ int main(int argc,char **argv) {
theTaps[2][1]=0.0;
theTaps[2][2]=1.0;
filter2d.setTaps(theTaps);
- filter2d.filter(input,output,true,true);//absolute and normalize
+ try{
+ filter2d.filter(input,output,true,true);//absolute and normalize
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
break;
}
case(filter2d::sobely):{//Sobel edge detection in Y
@@ -653,7 +823,12 @@ int main(int argc,char **argv) {
theTaps[2][1]=-2.0;
theTaps[2][2]=-1.0;
filter2d.setTaps(theTaps);
- filter2d.filter(input,output,true,true);//absolute and normalize
+ try{
+ filter2d.filter(input,output,true,true);//absolute and normalize
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
break;
}
case(filter2d::sobelxy):{//Sobel edge detection in XY
@@ -672,7 +847,12 @@ int main(int argc,char **argv) {
theTaps[2][1]=-1.0;
theTaps[2][2]=0.0;
filter2d.setTaps(theTaps);
- filter2d.filter(input,output,true,true);//absolute and normalize
+ try{
+ filter2d.filter(input,output,true,true);//absolute and normalize
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
break;
}
case(filter2d::sobelyx):{//Sobel edge detection in XY
@@ -691,7 +871,12 @@ int main(int argc,char **argv) {
theTaps[2][1]=-1.0;
theTaps[2][2]=-2.0;
filter2d.setTaps(theTaps);
- filter2d.filter(input,output,true,true);//absolute and normalize
+ try{
+ filter2d.filter(input,output,true,true);//absolute and normalize
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
+ }
break;
}
case(filter2d::smooth):{//Smoothing filter
@@ -699,13 +884,18 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for this filter" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
- std::cout<< "1-D filtering: smooth" << std::endl;
- filter1d.smooth(input,output,dimZ_opt[0]);
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
+ std::cout<< "1-D filtering: smooth" << std::endl;
+ filter1d.smooth(input,output,dimZ_opt[0]);
+ }
+ else{
+ filter2d.smooth(input,output,dimX_opt[0],dimY_opt[0]);
+ }
}
- else{
- filter2d.smooth(input,output,dimX_opt[0],dimY_opt[0]);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
break;
}
@@ -714,13 +904,21 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for this filter" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
- std::cout<< "1-D filtering: smooth" << std::endl;
- filter1d.smoothNoData(input,interpolationType_opt[0],output);
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
+ std::cout<< "1-D filtering: smooth" << std::endl;
+ filter1d.smoothNoData(input,interpolationType_opt[0],output);
+ }
+ else{
+ if(verbose_opt[0])
+ std::cout<< "2-D filtering: smooth" << std::endl;
+ filter2d.smoothNoData(input,output,dimX_opt[0],dimY_opt[0]);
+ }
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- else
- filter2d.smoothNoData(input,output,dimX_opt[0],dimY_opt[0]);
break;
}
case(filter2d::dwt):
@@ -728,26 +926,36 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for this filter" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
- std::cout<< "DWT in spectral domain" << std::endl;
- filter1d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
+ std::cout<< "DWT in spectral domain" << std::endl;
+ filter1d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);
+ }
+ else
+ filter2d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- else
- filter2d.dwtForward(input, output, wavelet_type_opt[0], family_opt[0]);
break;
case(filter2d::dwti):
if(down_opt[0]!=1){
std::cerr << "Error: down option not supported for this filter" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
- std::cout<< "inverse DWT in spectral domain" << std::endl;
- filter1d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
+ std::cout<< "inverse DWT in spectral domain" << std::endl;
+ filter1d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);
+ }
+ else
+ filter2d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- else
- filter2d.dwtInverse(input, output, wavelet_type_opt[0], family_opt[0]);
break;
case(filter2d::dwt_cut):
if(down_opt[0]!=1){
@@ -767,14 +975,19 @@ int main(int argc,char **argv) {
std::cerr << "Error: down option not supported for this filter" << std::endl;
exit(1);
}
- if(dimZ_opt.size()){
- if(verbose_opt[0])
- std::cout<< "DWT approximation in spectral domain" << std::endl;
- filter1d.dwtCutFrom(input, output, wavelet_type_opt[0], family_opt[0], static_cast<int>(threshold_opt[0]));
+ try{
+ if(dimZ_opt.size()){
+ if(verbose_opt[0])
+ std::cout<< "DWT approximation in spectral domain" << std::endl;
+ filter1d.dwtCutFrom(input, output, wavelet_type_opt[0], family_opt[0], static_cast<int>(threshold_opt[0]));
+ }
+ else{
+ string errorString="Error: this filter is not supported in 2D";
+ throw(errorString);
+ }
}
- else{
- std::cerr << "Error: this filter is not supported in 2D" << std::endl;
- exit(1);
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
break;
case(filter2d::savgolay):{
@@ -795,23 +1008,33 @@ int main(int argc,char **argv) {
filter1d.filter(input,output);
break;
}
- case(filter2d::threshold):
- filter2d.setThresholds(threshold_opt);//deliberate fall through
- case(filter2d::density):
- filter2d.setClasses(class_opt);//deliberate fall through
+ case(filter2d::percentile)://deliberate fall through
+ case(filter2d::threshold)://deliberate fall through
+ assert(threshold_opt.size());
+ if(dimZ_opt.size())
+ filter1d.setThresholds(threshold_opt);
+ else
+ filter2d.setThresholds(threshold_opt);
+ case(filter2d::density)://deliberate fall through
+ filter2d.setClasses(class_opt);
if(verbose_opt[0])
std::cout << "classes set" << std::endl;
default:
- if(dimZ_opt.size()){
- if(dimZ_opt[0]==1)
- filter1d.stat(input,output,method_opt[0]);
- else{
- assert(down_opt[0]==1);//not implemented yet...
- filter1d.filter(input,output,method_opt[0],dimZ_opt[0]);
+ try{
+ if(dimZ_opt.size()){
+ if(dimZ_opt[0]==1)
+ filter1d.stat(input,output,method_opt[0]);
+ else{
+ assert(down_opt[0]==1);//not implemented yet...
+ filter1d.filter(input,output,method_opt[0],dimZ_opt[0]);
+ }
}
+ else
+ filter2d.doit(input,output,method_opt[0],dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
+ }
+ catch(string errorstring){
+ cerr << errorstring << endl;
}
- else
- filter2d.doit(input,output,method_opt[0],dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
break;
}
}
diff --git a/src/apps/pkfilterascii.cc b/src/apps/pkfilterascii.cc
index 9699244..11c06b1 100644
--- a/src/apps/pkfilterascii.cc
+++ b/src/apps/pkfilterascii.cc
@@ -33,6 +33,51 @@ extern "C" {
#include <gsl/gsl_sort.h>
}
+/******************************************************************************/
+/*! \page pkfilterascii pkfilterascii
+ program to filter data in an ASCII file
+## SYNOPSIS
+
+<code>
+ Usage: pkfilterascii -i input.txt [-ic column]*
+</code>
+
+<code>
+
+ Options: [-f filter] [-dz value] [-t]
+
+ Advanced options: [-tapz value]* [-fwhm value]* [-srf filename]* [-win col] [-wout value]* [-interp type] [-wt type] [-wf family] [-cut threshold]
+
+</code>
+
+\section pkfilterascii_description Description
+
+The utility pkfilterascii filters the columns defined by the option -ic. A varietey of filters can be selected from with the option -f. The kernel size is defined with the option -dz. Alternatively, you can define your own filter tap values (use the option -tapz for each tap). In case of spectral filtering, define the full width half max values (-fwhm value) or spectral response functions in ASCII files (-srf filename).\section pkfilterascii_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input ASCII file |
+ | o | output | std::string | |Output ASCII file |
+ | ic | inputCols | int | |input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2 |
+ | f | filter | std::string | |filter function (to be implemented: dwt, dwti,dwt_cut) |
+ | dz | dz | int | |filter kernel size in z (band or spectral dimension), must be odd (example: 3).. Set dz>0 if 1-D filter must be used in band domain |
+ | tapz | tapz | double | |taps used for spectral filtering |
+ | fwhm | fwhm | double | |list of full width half to apply spectral filtering (-fwhm band1 -fwhm band2 ...) |
+ | srf | srf | std::string | |list of ASCII files containing spectral response functions (two columns: wavelength response) |
+ | win | wavelengthIn | int | |column number of input ASCII file containing wavelengths |
+ | wout | wavelengthOut | double | |list of wavelengths in output spectrum (-wout band1 -wout band2 ...) |
+ | interp | interp | std::string | akima |type of interpolation for spectral filtering (see http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html) |
+ | t | transpose | bool | false |transpose output with samples in rows and wavelengths in cols |
+ | wt | wavelet | std::string | daubechies |wavelet type: daubechies,daubechies_centered, haar, haar_centered, bspline, bspline_centered |
+ | wf | family | int | 4 |wavelet family (vanishing moment, see also http://www.gnu.org/software/gsl/manual/html_node/DWT-Initialization.html) |
+ | cut | cut | double | 0 |threshold to cut dwt coefficients. Use 0 to keep all. |
+
+Usage: pkfilterascii -i input.txt [-ic column]*
+
+
+**/
+
using namespace std;
/*------------------
diff --git a/src/apps/pkfilterdem.cc b/src/apps/pkfilterdem.cc
index 8848258..4bb4f57 100644
--- a/src/apps/pkfilterdem.cc
+++ b/src/apps/pkfilterdem.cc
@@ -26,6 +26,49 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
+/******************************************************************************/
+/*! \page pkfilterdem pkfilterdem
+ Filter digital elevation model raster datasets
+## SYNOPSIS
+
+<code>
+ Usage: pkfilterdem -i input.txt -o output
+</code>
+
+<code>
+
+ Options: [-f filter] [-dim maxsize]
+
+ Advanced options: [-ot type] [-of format] [-ct colortable] [-nodata value] [-circ] [-st threshold] [-ht threshold] [-minchange value]
+
+</code>
+
+\section pkfilterdem_description Description
+
+The utility pkfilterdem can be used to filter digital elevation models. It is typically used after the utility \ref pklas2img "pklas2img" to create a digital terrain model. The default filter operation is the <a href="http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1202973&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1202973">progressive morphological filter</a>.
+\section pkfilterdem_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input image file |
+ | o | output | std::string | |Output image file |
+ | f | filter | std::string | |post processing filter: vito, etew_min, promorph (progressive morphological filter),open,close). |
+ | dim | dim | double | 17 |maximum filter kernel size |
+ | circ | circular | bool | false |circular disc kernel for dilation and erosion |
+ | st | st | double | 0 |slope threshold used for morphological filtering. Use a low values to remove more height objects in flat terrains |
+ | ht | ht | double | 0.2 |initial height threshold for progressive morphological filtering. Use low values to remove more height objects. Optionally, a maximum height threshold can be set via a second argument (e.g., -ht 0.2 -ht 2.5 sets an initial threshold at 0.2 m and caps the threshold at 2.5 m). |
+ | minchange | minchange | short | 0 |Stop iterations when no more pixels are changed than this threshold. |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid). Use none to ommit color table |
+ | nodata | nodata | short | |nodata value |
+
+Usage: pkfilterdem -i input.txt -o output
+
+
+**/
+
using namespace std;
/*------------------
Main procedure
diff --git a/src/apps/pkfsann.cc b/src/apps/pkfsann.cc
index 3d931af..31dd3f0 100644
--- a/src/apps/pkfsann.cc
+++ b/src/apps/pkfsann.cc
@@ -35,6 +35,62 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pkfsann pkfsann
+ feature selection for artificial neural network classifier pkann
+## SYNOPSIS
+
+<code>
+ Usage: pkfsann -t training -n number
+</code>
+
+<code>
+
+ Options:
+
+ Advanced options:
+</code>
+
+\section pkfsann_description Description
+
+Classification problems dealing with high dimensional input data can be challenging due to the Hughes phenomenon. Hyperspectral data, for instance, can have hundreds of spectral bands and require special attention when being classified. In particular when limited training data are available, the classification of such data can be problematic without reducing the dimension.
+
+The utility pkfsann implements a number of feature selection techniques, among which a sequential floating forward search (SFFS). Also consider the SVM classifier implemented in pksvm, which has been shown to be more robust to this type of problem than others.
+\section pkfsann_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input test set (leave empty to perform a cross validation based on training only) |
+ | t | training | std::string | |training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) |
+ | n | nf | unsigned short | 0 |number of features to select (0 to select optimal number, see also ecost option) |
+ | tln | tln | std::string | |training layer name(s) |
+ | label | label | std::string | label |identifier for class label in training vector file. |
+ | | balance | unsigned int | 0 |balance the input data to this number of samples for each class |
+ | random | random | bool | true |in case of balance, randomize input data |
+ | min | min | int | 0 |if number of training pixels is less then min, do not take this class into account |
+ | b | band | short | |band index (starting from 0, either use band option or use start to end) |
+ | s | start | double | 0 |start band sequence number |
+ | e | end | double | 0 |end band sequence number (set to 0 to include all bands) |
+ | | offset | double | 0 |offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | a | aggreg | unsigned short | 0 |how to combine aggregated classifiers, see also rc option (0: no aggregation, 1: sum rule, 2: max rule). |
+ | sm | sm | std::string | sffs |feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search) |
+ | ecost | ecost | float | 0.001 |epsilon for stopping criterion in cost function to determine optimal number of features |
+ | cv | cv | unsigned short | 2 |n-fold cross validation mode |
+ | c | class | std::string | |list of class names. |
+ | r | reclass | short | |list of class values (use same order as in classname opt. |
+ | n | nneuron | unsigned int | 5 |number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) |
+ | | connection | float | 1 |connection reate (default: 1.0 for a fully connected network) |
+ | w | weights | float | 0 |weights for neural network. Apply to fully connected network only, starting from first input neuron to last output neuron, including the bias neurons (last neuron in each but last layer) |
+ | l | learning | float | 0.7 |learning rate (default: 0.7) |
+ | | maxit | unsigned int | 500 |number of maximum iterations (epoch) (default: 500) |
+
+Usage: pkfsann -t training -n number
+
+
+**/
+
using namespace std;
#define Malloc(type,n) (type *)malloc((n)*sizeof(type))
diff --git a/src/apps/pkfssvm.cc b/src/apps/pkfssvm.cc
index 0ca3ab8..9b3d3a9 100644
--- a/src/apps/pkfssvm.cc
+++ b/src/apps/pkfssvm.cc
@@ -33,6 +33,68 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pkfssvm pkfssvm
+ feature selection for support vector machine classifier pksvm
+## SYNOPSIS
+
+<code>
+ Usage: pkfssvm -t training -n number
+</code>
+
+<code>
+
+ Options:
+
+ Advanced options:
+</code>
+
+\section pkfssvm_description Description
+
+Classification problems dealing with high dimensional input data can be challenging due to the Hughes phenomenon. Hyperspectral data, for instance, can have hundreds of spectral bands and require special attention when being classified. In particular when limited training data are available, the classification of such data can be problematic without reducing the dimension.
+
+The SVM classifier has been shown to be more robust to this type of problem than others. Nevertheless, classification accuracy can often be improved with feature selection methods. The utility pkfssvm implements a number of feature selection techniques, among which a sequential floating forward search (SFFS).
+\section pkfssvm_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input test set (leave empty to perform a cross validation based on training only) |
+ | t | training | std::string | |training vector file. A single vector file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). |
+ | n | nf | unsigned short | 0 |number of features to select (0 to select optimal number, see also ecost option) |
+ | tln | tln | std::string | |training layer name(s) |
+ | label | label | std::string | label |identifier for class label in training vector file. |
+ | bal | balance | unsigned int | 0 |balance the input data to this number of samples for each class |
+ | random | random | bool | true |in case of balance, randomize input data |
+ | min | min | int | 0 |if number of training pixels is less then min, do not take this class into account |
+ | b | band | short | |band index (starting from 0, either use band option or use start to end) |
+ | s | start | double | 0 |start band sequence number |
+ | e | end | double | 0 |end band sequence number (set to 0 to include all bands) |
+ | | offset | double | 0 |offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | svmt | svmtype | std::string | C_SVC |type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) |
+ | kt | kerneltype | std::string | radial |type of kernel function (linear,polynomial,radial,sigmoid) |
+ | kd | kd | unsigned short | 3 |degree in kernel function |
+ | g | gamma | float | 1 |gamma in kernel function |
+ | c0 | coef0 | float | 0 |coef0 in kernel function |
+ | cc | ccost | float | 1000 |the parameter C of C-SVC, epsilon-SVR, and nu-SVR |
+ | nu | nu | float | 0.5 |the parameter nu of nu-SVC, one-class SVM, and nu-SVR |
+ | eloss | eloss | float | 0.1 |the epsilon in loss function of epsilon-SVR |
+ | cache | cache | int | 100 |cache memory size in MB |
+ | etol | etol | float | 0.001 |the tolerance of termination criterion |
+ | shrink | shrink | bool | false |whether to use the shrinking heuristics |
+ | pe | probest | bool | true |whether to train a SVC or SVR model for probability estimates |
+ | sm | sm | std::string | sffs |feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search) |
+ | ecost | ecost | float | 0.001 |epsilon for stopping criterion in cost function to determine optimal number of features |
+ | cv | cv | unsigned short | 2 |n-fold cross validation mode |
+ | c | class | std::string | |list of class names. |
+ | r | reclass | short | |list of class values (use same order as in classname opt. |
+
+Usage: pkfssvm -t training -n number
+
+
+**/
+
using namespace std;
enum SelectorValue { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4};
diff --git a/src/apps/pkgetmask.cc b/src/apps/pkgetmask.cc
index 8ba8b9d..0cddafb 100644
--- a/src/apps/pkgetmask.cc
+++ b/src/apps/pkgetmask.cc
@@ -23,6 +23,51 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgWriterGdal.h"
#include "base/Optionpk.h"
+/******************************************************************************/
+/*! \page pkgetmask pkgetmask
+ program to create mask image based on values in input raster image
+## SYNOPSIS
+
+<code>
+ Usage: pkgetmask -i input -o output
+</code>
+
+<code>
+
+ Options: [-min value]* [-max value]* [-data value]* [-nodata value]*
+
+ Advanced options: [-b band]* [--operator AND|OR] [-ot type] [-of format] [-co option]* [-ct table]
+
+</code>
+
+\section pkgetmask_description Description
+
+The utility pkgetmask creates a mask raster dataset from an input raster dataset. Values smaller than the minimum value (-min) or larger than the maximum value (-max) will result in a -nodata value in the mask.\section pkgetmask_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file |
+ | o | output | std::string | |Output mask file |
+ | min | min | double | |Values smaller than min threshold(s) are masked as invalid. Use one threshold for each band |
+ | max | max | double | |Values greater than max threshold(s) are masked as invalid. Use one threshold for each band |
+ | data | data | unsigned short | 1 |value(s) for valid pixels: between min and max |
+ | nodata | nodata | unsigned short | 0 |value(s) for invalid pixels: not between min and max |
+ | b | band | short | 0 |band(s) used for mask |
+ | p | operator | std::string | OR |Operator: [AND,OR]. |
+ | ot | otype | std::string | Byte |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+
+Usage: pkgetmask -i input -o output
+
+
+Examples
+========
+Some examples how to use pkgetmask can be found \ref examples_pkgetmask "here"
+**/
+
using namespace std;
int main(int argc,char **argv) {
Optionpk<string> input_opt("i", "input", "Input image file");
diff --git a/src/apps/pkinfo.cc b/src/apps/pkinfo.cc
index 9e433cb..3375e4f 100644
--- a/src/apps/pkinfo.cc
+++ b/src/apps/pkinfo.cc
@@ -24,6 +24,69 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgReaderOgr.h"
+/******************************************************************************/
+/*! \page pkinfo pkinfo
+ Report basic information from raster datasets (similar to gdalinfo)
+## SYNOPSIS
+
+<code>
+ Usage: pkinfo -i input [options]
+</code>
+
+<code>
+
+</code>
+
+\section pkinfo_description Description
+
+The utility pkinfo retrieves basic information about a raster data set. An important difference with gdalinfo is that pkinfo only reports the information that is requested via the corresponding command line option, whereas gdalinfo provides all basic information at once. The reported information is in a format that can be used as input for other pktools utilities. This mechanism facilitates command substitution in the bash scripting language. Some examples are given in later in this sect [...]
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file |
+ | bb | bbox | bool | false |Shows bounding box |
+ | te | te | bool | false |Shows bounding box in GDAL format: xmin ymin xmax ymax |
+ | c | center | bool | false |Image center in projected X,Y coordinates |
+ | ct | colortable | bool | false |Shows colour table |
+ | ns | nsample | bool | false |Number of samples in image |
+ | nl | nline | bool | false |Number of lines in image |
+ | nb | nband | bool | false |Show number of bands in image |
+ | b | band | short | 0 |Band specific information |
+ | dx | dx | bool | false |Gets resolution in x (in m) |
+ | dy | dy | bool | false |Gets resolution in y (in m) |
+ | mm | minmax | bool | false |Shows min and max value of the image |
+ | min | minimum | bool | false |Shows min value of the image |
+ | max | maximum | bool | false |Shows max value of the image |
+ | stats | statistics | bool | false |Shows statistics (min,max, mean and stdDev of the image) |
+ | a_srs | a_srs | bool | false |Shows projection of the image |
+ | geo | geo | bool | false |Gets geotransform |
+ | il | interleave | bool | false |Shows interleave |
+ | f | filename | bool | false |Shows image filename |
+ | cover | cover | bool | false |Print filename to stdout if current image covers the provided coordinates via bounding box, (x y) coordinates or extent of vector file |
+ | x | xpos | double | |x pos |
+ | y | ypos | double | |y pos |
+ | r | read | bool | false |Reads row y (in projected coordinates if geo option is set, otherwise in image coordinates, 0 based) |
+ | ref | reference | bool | false |Gets reference pixel (lower left corner of center of gravity pixel) |
+ | of | oformat | bool | false |Gets driver description |
+ | e | extent | std::string | |Gets boundary from vector file |
+ | ulx | ulx | double | |Upper left x value bounding box |
+ | uly | uly | double | |Upper left y value bounding box |
+ | lrx | lrx | double | |Lower right x value bounding box |
+ | lry | lry | double | |Lower right y value bounding box |
+ | ot | otype | bool | false |Returns data type |
+ | d | description | bool | false |Returns image description |
+ | meta | meta | bool | false |Shows meta data |
+ | nodata | nodata | double | |Sets no data value(s) for calculations (nodata values in input image) |
+
+Usage: pkinfo -i input [options]
+
+
+Examples
+========
+Some examples how to use pkinfo can be found \ref examples_pkinfo "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pkkalman.cc b/src/apps/pkkalman.cc
index 3d5cc7c..9774098 100644
--- a/src/apps/pkkalman.cc
+++ b/src/apps/pkkalman.cc
@@ -1,5 +1,5 @@
/**********************************************************************
-pkkalman.cc: program to kalman raster images: median, min/max, morphological, kalmaning
+pkkalman.cc: produce kalman filtered raster time series
Copyright (C) 2008-2014 Pieter Kempeneers
This file is part of pktools
@@ -27,14 +27,60 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "algorithms/StatFactory.h"
#include "algorithms/ImgRegression.h"
+/******************************************************************************/
+/*! \page pkkalman pkkalman
+produce kalman filtered raster time series
+## SYNOPSIS
+
+<code>
+
+</code>
+
+\section pkkalman_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | dir | direction | std::string | forward |direction to run model (forward\|backward\|smooth) |
+ | mod | model | std::string | |model input datasets, e.g., MODIS (use: -mod model1 -mod model2 etc. |
+ | obs | observation | std::string | |observation input datasets, e.g., landsat (use: -obs obs1 -obs obs2 etc. |
+ | tmod | tmodel | int | |time sequence of model input. Sequence must have exact same length as model input. Leave empty to have default sequence 0,1,2,etc. |
+ | tobs | tobservation | int | |time sequence of observation input. Sequence must have exact same length as observation input) |
+ | a_srs | a_srs | std::string | |Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid |
+ | ofw | outputfw | std::string | |Output raster dataset for forward model |
+ | obw | outputbw | std::string | |Output raster dataset for backward model |
+ | ofb | outputfb | std::string | |Output raster dataset for smooth model |
+ | modnodata | modnodata | double | 0 |invalid value for model input |
+ | obsnodata | obsnodata | double | 0 |invalid value for observation input |
+ | modoffset | modoffset | double | |offset used to read model input dataset (value=offset+scale*readValue |
+ | modscale | modscale | double | |scale used to read model input dataset (value=offset+scale*readValue |
+ | obsoffset | obsoffset | double | |offset used to read observation input dataset (value=offset+scale*readValue |
+ | obsscale | obsscale | double | |scale used to read observation input dataset (value=offset+scale*readValue |
+ | eps | eps | double | 1e-05 |epsilon for non zero division |
+ | um | uncertmodel | double | 2 |Multiply this value with std dev of first model image to obtain uncertainty of model |
+ | uo | uncertobs | double | 0 |Uncertainty of valid observations |
+ | w | weight | double | |Set observation uncertainty as weighted difference between observation and model (use -w 0 to use a constant observation uncertainty, use -w value >> 1 to penalize low observation values with respect to model, use -w value << 0 to penalize a high observation values with respect to model |
+ | dobs | deltaobs | double | |Lower and upper thresholds for relative pixel differences (in percentage): (observation-model)/model. For instance to force the observation within a +/- 10 % interval, use: -dobs -10 -dobs 10 (equivalent to -dobs 10). Leave empty to always update on observation |
+ | unodata | uncertnodata | double | 10000 |Uncertainty in case of no-data values in observation |
+ | rt | regtime | double | 1 |Set optional regression for sensor difference (model - observation). |
+ | rs | regsensor | double | 1 |Set optional regression for sensor difference (model - observation). |
+ | down | down | int | |Downsampling factor for reading model data to calculate regression |
+ | th | threshold | float | 0 |threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). |
+ | win | window | unsigned short | 0 |window size for calculating regression (use 0 for global) |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | v | verbose | short | 0 |verbose mode when positive |
+
+**/
+
using namespace std;
/*------------------
Main procedure
----------------*/
int main(int argc,char **argv) {
Optionpk<string> direction_opt("dir","direction","direction to run model (forward|backward|smooth)","forward");
- Optionpk<string> model_opt("mod","model","model input datasets, e.g., MODIS (use: -mod model1 -mod model2 etc.");
- Optionpk<string> observation_opt("obs","observation","observation input datasets, e.g., landsat (use: -obs obs1 -obs obs2 etc.");
+ Optionpk<string> model_opt("mod","model","model input datasets, e.g., MODIS (use: -mod model1 -mod model2 etc.)");
+ Optionpk<string> observation_opt("obs","observation","observation input datasets, e.g., landsat (use: -obs obs1 -obs obs2 etc.)");
Optionpk<int> tmodel_opt("tmod","tmodel","time sequence of model input. Sequence must have exact same length as model input. Leave empty to have default sequence 0,1,2,etc.");
Optionpk<int> tobservation_opt("tobs","tobservation","time sequence of observation input. Sequence must have exact same length as observation input)");
Optionpk<string> projection_opt("a_srs", "a_srs", "Override the projection for the output file (leave blank to copy from input file, use epsg:3035 to use European projection and force to European grid");
@@ -43,18 +89,18 @@ int main(int argc,char **argv) {
Optionpk<string> outputfb_opt("ofb", "outputfb", "Output raster dataset for smooth model");
Optionpk<double> modnodata_opt("modnodata", "modnodata", "invalid value for model input", 0);
Optionpk<double> obsnodata_opt("obsnodata", "obsnodata", "invalid value for observation input", 0);
- Optionpk<double> modoffset_opt("modoffset", "modoffset", "offset used to read model input dataset (value=offset+scale*readValue");
- Optionpk<double> obsoffset_opt("obsoffset", "obsoffset", "offset used to read observation input dataset (value=offset+scale*readValue");
- Optionpk<double> modscale_opt("modscale", "modscale", "scale used to read model input dataset (value=offset+scale*readValue");
- Optionpk<double> obsscale_opt("obsscale", "obsscale", "scale used to read observation input dataset (value=offset+scale*readValue");
+ Optionpk<double> modoffset_opt("modoffset", "modoffset", "offset used to read model input dataset (value=offset+scale*readValue)");
+ Optionpk<double> obsoffset_opt("obsoffset", "obsoffset", "offset used to read observation input dataset (value=offset+scale*readValue)");
+ Optionpk<double> modscale_opt("modscale", "modscale", "scale used to read model input dataset (value=offset+scale*readValue)");
+ Optionpk<double> obsscale_opt("obsscale", "obsscale", "scale used to read observation input dataset (value=offset+scale*readValue)");
Optionpk<double> eps_opt("eps", "eps", "epsilon for non zero division", 0.00001);
Optionpk<double> uncertModel_opt("um", "uncertmodel", "Multiply this value with std dev of first model image to obtain uncertainty of model",2);
Optionpk<double> uncertObs_opt("uo", "uncertobs", "Uncertainty of valid observations",0);
- Optionpk<double> weight_opt("w", "weight", "Set observation uncertainty as weighted difference between observation and model (use -w 0 to use a constant observation uncertainty, use -w value >> 1 to penalize low observation values with respect to model, use -w value << 0 to penalize a high observation values with respect to model");
+ Optionpk<double> weight_opt("w", "weight", "Penalize outliers in measurement via weights. Use first weight to penalize small measurements wrt model and second weight to penalize large measurements wrt model");
Optionpk<double> deltaObs_opt("dobs", "deltaobs", "Lower and upper thresholds for relative pixel differences (in percentage): (observation-model)/model. For instance to force the observation within a +/- 10 % interval, use: -dobs -10 -dobs 10 (equivalent to -dobs 10). Leave empty to always update on observation");
Optionpk<double> uncertNodata_opt("unodata", "uncertnodata", "Uncertainty in case of no-data values in observation", 10000);
- // Optionpk<double> regTime_opt("rt", "regtime", "Relative Weight for regression in time series", 1.0);
- Optionpk<bool> regSensor_opt("rs", "regsensor", "Set optional regression for sensor difference (model - observation).", false);
+ Optionpk<double> regTime_opt("rt", "regtime", "Weight for regression in time series", 1.0);
+ Optionpk<double> regSensor_opt("rs", "regsensor", "Weight for regression model - measurement (model - observation).");
Optionpk<int> down_opt("down", "down", "Downsampling factor for reading model data to calculate regression");
Optionpk<float> threshold_opt("th", "threshold", "threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0).", 0);
Optionpk<int> minreg_opt("minreg", "minreg", "Minimum number of pixels to take into account for regression", 5, 2);
@@ -91,7 +137,7 @@ int main(int argc,char **argv) {
weight_opt.retrieveOption(argc,argv);
deltaObs_opt.retrieveOption(argc,argv);
uncertNodata_opt.retrieveOption(argc,argv);
- // regTime_opt.retrieveOption(argc,argv);
+ regTime_opt.retrieveOption(argc,argv);
regSensor_opt.retrieveOption(argc,argv);
down_opt.retrieveOption(argc,argv);
threshold_opt.retrieveOption(argc,argv);
@@ -110,7 +156,7 @@ int main(int argc,char **argv) {
exit(0);
}
if(!doProcess){
- std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+ std::cerr << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
exit(0);//help was invoked, stop processing
}
@@ -120,7 +166,14 @@ int main(int argc,char **argv) {
else
deltaObs_opt.insert(deltaObs_opt.begin(),-deltaObs_opt[0]);
}
+ if(weight_opt.size()==1){
+ weight_opt.push_back(weight_opt[0]);
+ }
+ if(down_opt.empty()){
+ std::cerr << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+ exit(0);//help was invoked, stop processing
+ }
try{
ostringstream errorStream;
if(model_opt.size()<2){
@@ -219,6 +272,9 @@ int main(int argc,char **argv) {
}
imgReaderObs.close();
+ if(regSensor_opt.empty())
+ regSensor_opt.push_back(1.0/down_opt[0]);
+ //hiero
// ImgReaderGdal maskReader;
// double colMask=0;
// double rowMask=0;
@@ -265,17 +321,18 @@ int main(int argc,char **argv) {
for(int tindex=0;tindex<tobservation_opt.size();++tindex){
vector<int>::iterator modit;
- modit=lower_bound(tmodel_opt.begin(),tmodel_opt.end(),tobservation_opt[tindex]);
- int relpos=modit-tmodel_opt.begin();
- // if(relpos<0)
- // relpos=0;
+ modit=upper_bound(tmodel_opt.begin(),tmodel_opt.end(),tobservation_opt[tindex]);
+ int relpos=modit-tmodel_opt.begin()-1;
+ assert(relpos>=0);//todo: for now, we assume model is available at time before first measurement
relobsindex.push_back(relpos);
if(verbose_opt[0])
- cout << "tobservation_opt[tindex] " << tobservation_opt[tindex] << " " << relobsindex.back() << " " << observation_opt[tindex] << " " << model_opt[relpos] << endl;
+ cout << "observation " << tindex << ": " << "relative position in model time series is " << relpos << ", date of observation is (tobservation_opt[tindex]): " << tobservation_opt[tindex] << ", relobsindex.back(): " << relobsindex.back() << ", filename observation: " << observation_opt[tindex] << ", filename of corresponding model: " << model_opt[relpos] << endl;
// if(verbose_opt[0])
// cout << "tobservation_opt[tindex] " << tobservation_opt[tindex] << " " << relobsindex.back() << endl;
}
+ int ndigit=log(1.0*tmodel_opt.back())/log(10.0)+1;
+
double geox=0;
double geoy=0;
@@ -285,15 +342,21 @@ int main(int argc,char **argv) {
obsindex=0;
//initialization
string output;
- if(outputfw_opt.size()==model_opt.size())
+ if(outputfw_opt.size()==model_opt.size()){
output=outputfw_opt[0];
+ }
else{
ostringstream outputstream;
- outputstream << outputfw_opt[0] << "_" << tmodel_opt[0] << ".tif";
+ outputstream << outputfw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[0];
+ outputstream << ".tif";
+ //test
+ // outputstream << outputfw_opt[0] << "_" << tmodel_opt[0] << ".tif";
output=outputstream.str();
}
if(verbose_opt[0])
cout << "Opening image " << output << " for writing " << endl;
+
imgWriterEst.open(output,ncol,nrow,2,GDT_Float32,imageType,option_opt);
imgWriterEst.setProjectionProj4(projection_opt[0]);
imgWriterEst.setGeoTransform(geotransform);
@@ -341,7 +404,10 @@ int main(int argc,char **argv) {
// vector<double> lineMask;
imgWriterEst.image2geo(0,irow,geox,geoy);
imgReaderModel1.geo2image(geox,geoy,modCol,modRow);
- assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());
+ if(modRow<0||modRow>=imgReaderModel1.nrOfRow()){
+ cerr << "Error: geo coordinates (" << geox << "," << geoy << ") not covered in model image " << imgReaderModel1.getFileName() << endl;
+ assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());
+ }
try{
imgReaderModel1.readData(estReadBuffer,GDT_Float64,modRow);
//simple nearest neighbor
@@ -350,33 +416,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<ncol;++icol){
imgWriterEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
imgReaderModel1.geo2image(geox,geoy,modCol,modRow);
double modValue=estReadBuffer[modCol];
if(imgReaderModel1.isNoData(modValue)){
@@ -384,6 +423,7 @@ int main(int argc,char **argv) {
uncertWriteBuffer[icol]=uncertNodata_opt[0];
}
else{
+ //todo: should take into account regression model-obs...
estWriteBuffer[icol]=modValue;
uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;
}
@@ -399,9 +439,9 @@ int main(int argc,char **argv) {
}
}
}
- else{//we have an observation at time 0
+ else{//we have a measurement
if(verbose_opt[0])
- cout << "we have an observation at time 0" << endl;
+ cout << "we have a measurement at initial time" << endl;
imgReaderObs.open(observation_opt[0]);
imgReaderObs.getGeoTransform(geotransform);
imgReaderObs.setNoData(obsnodata_opt);
@@ -410,8 +450,13 @@ int main(int argc,char **argv) {
if(obsscale_opt.size())
imgReaderObs.setScale(obsscale_opt[0]);
- if(regSensor_opt[0])
- errObs=imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(regSensor_opt[0]>0){
+ errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(errObs<0){
+ c0obs=0;
+ c1obs=1;
+ }
+ }
else{
c0obs=0;
c1obs=1;
@@ -439,33 +484,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<ncol;++icol){
imgWriterEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
imgReaderModel1.geo2image(geox,geoy,modCol,modRow);
assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());
double modValue=estReadBuffer[modCol];
@@ -482,27 +500,27 @@ int main(int argc,char **argv) {
}
else{//model is valid: calculate estimate from model
double errMod=uncertModel_opt[0]*stdDev;
- double certNorm=(errMod*errMod+errObs*errObs);
- double certMod=errObs*errObs/certNorm;
- double certObs=errMod*errMod/certNorm;
- double regTime=0;
- double regSensor=(c0obs+c1obs*modValue)*certObs;
- estWriteBuffer[icol]=regTime+regSensor;
- double totalUncertainty=0;
- if(errMod<eps_opt[0])
- totalUncertainty=errObs;
- else if(errObs<eps_opt[0])
- totalUncertainty=errMod;
- else{
- totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
- totalUncertainty=sqrt(1.0/totalUncertainty);
- }
+ errMod*=regTime_opt[0];
+ // double certNorm=(errMod*errMod+errObs*errObs);
+ // double certMod=errObs*errObs/certNorm;
+ // double certObs=errMod*errMod/certNorm;
+ // double regTime=0;
+ // double regSensor=(c0obs+c1obs*modValue)*certMod;
+ // estWriteBuffer[icol]=regTime+regSensor;
+ estWriteBuffer[icol]=modValue;
+ double totalUncertainty=errMod;
+ // if(errMod<eps_opt[0])
+ // totalUncertainty=errObs;
+ // else if(errObs<eps_opt[0])
+ // totalUncertainty=errMod;
+ // else{
+ // totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
+ // totalUncertainty=sqrt(1.0/totalUncertainty);
+ // }
uncertWriteBuffer[icol]=totalUncertainty;//in case observation is not valid
}
- //todo: check with Fernando? (here uncertainty only relates to modeled estimate. In case of observation update, we include uncertainty of observation
- // uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
- //observation update if observation is valid
-
+ // uncertWriteBuffer[icol]+=uncertReadBuffer[icol];
+ //measurement update
if(!imgReaderObs.isNoData(obsLineBuffer[icol])){
double kalmanGain=1;
double uncertObs=uncertObs_opt[0];
@@ -520,14 +538,23 @@ int main(int argc,char **argv) {
statobs.setNoDataValues(obsnodata_opt);
double obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;
double difference=obsMeanValue-modValue;
- if(modValue&&deltaObs_opt.size()){
- double relativeDifference=100.0*difference/modValue;
- if(relativeDifference<deltaObs_opt[0])//lower bound
- kalmanGain=0;
- else if(relativeDifference>deltaObs_opt[1])//upper bound
- kalmanGain=0;
- }
- uncertObs=-weight_opt[0]*difference;
+ if(modValue){
+ double relativeDifference=difference/modValue;
+ if(deltaObs_opt.size()){
+ assert(deltaObs_opt.size()>1);
+ if(100*relativeDifference<deltaObs_opt[0])//lower bound
+ kalmanGain=0;
+ else if(100*relativeDifference>deltaObs_opt[1])//upper bound
+ kalmanGain=0;
+ }
+ else if(weight_opt.size()){
+ assert(weight_opt.size()>1);
+ if(obsMeanValue<modValue)
+ uncertObs=weight_opt[0]*relativeDifference;
+ else if(obsMeanValue>modValue)
+ uncertObs=weight_opt[1]*relativeDifference;
+ }
+ }
if(uncertObs<=0)
uncertObs=0;
if(verbose_opt[0]>1)
@@ -564,8 +591,10 @@ int main(int argc,char **argv) {
output=outputfw_opt[modindex];
else{
ostringstream outputstream;
- outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
- // outputstream << output_opt[0] << "_" << modindex+1 << ".tif";
+ outputstream << outputfw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex];
+ outputstream << ".tif";
+ // outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
output=outputstream.str();
}
@@ -598,6 +627,8 @@ int main(int argc,char **argv) {
cout << "Calculating regression for " << imgReaderModel1.getFileName() << " " << imgReaderModel2.getFileName() << endl;
double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,0,0);
+ errMod*=regTime_opt[0];
+
// double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,verbose_opt[0]);
if(verbose_opt[0])
cout << "c0modGlobal, c1modGlobal: " << c0modGlobal << ", " << c1modGlobal << endl;
@@ -620,15 +651,20 @@ int main(int argc,char **argv) {
//calculate regression between model and observation
if(verbose_opt[0])
cout << "Calculating regression for " << imgReaderModel2.getFileName() << " " << imgReaderObs.getFileName() << endl;
- if(regSensor_opt[0])
- errObs=imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(regSensor_opt[0]>0){
+ errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(errObs<0){
+ c0obs=0;
+ c1obs=1;
+ }
+ }
else{
c0obs=0;
c1obs=1;
errObs=0;
}
if(verbose_opt[0])
- cout << "c0obs, c1obs: " << c0obs << ", " << c1obs << endl;
+ cout << "c0obs, c1obs, errObs: " << c0obs << ", " << c1obs << ", " << errObs << endl;
}
//prediction (also to fill cloudy pixels in update mode)
string input;
@@ -636,9 +672,14 @@ int main(int argc,char **argv) {
input=outputfw_opt[modindex-1];
else{
ostringstream outputstream;
- outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex-1] << ".tif";
+ outputstream << outputfw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex-1];
+ outputstream << ".tif";
+ // outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex-1] << ".tif";
input=outputstream.str();
}
+ if(verbose_opt[0])
+ cout << "opening " << input << endl;
ImgReaderGdal imgReaderEst(input);
imgReaderEst.setNoData(obsnodata_opt);
if(obsoffset_opt.size())
@@ -661,16 +702,19 @@ int main(int argc,char **argv) {
vector<double> uncertWriteBuffer(ncol);
// vector<double> lineMask;
- //initialize obsLineVector
- assert(down_opt[0]%2);//window size must be odd
- for(int iline=-down_opt[0]/2+1;iline<down_opt[0]/2+1;++iline){
- if(iline<0)//replicate line 0
- imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);
- else
- imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);
+ //initialize obsLineVector if update
+ if(update){
+ if(verbose_opt[0])
+ cout << "initialize obsLineVector" << endl;
+ assert(down_opt[0]%2);//window size must be odd
+ for(int iline=-down_opt[0]/2;iline<down_opt[0]/2+1;++iline){
+ if(iline<0)//replicate line 0
+ imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);
+ else
+ imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);
+ }
}
for(int irow=0;irow<imgWriterEst.nrOfRow();++irow){
- assert(irow<imgReaderEst.nrOfRow());
//do not read from imgReaderObs, because we read entire window for each pixel...
imgReaderEst.readData(estReadBuffer,GDT_Float64,irow,0);
imgReaderEst.readData(uncertReadBuffer,GDT_Float64,irow,1);
@@ -697,34 +741,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<imgWriterEst.nrOfCol();++icol){
imgReaderEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
-
int minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;
int maxCol=(icol+down_opt[0]/2<imgReaderEst.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderEst.nrOfCol()-1;
int minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;
@@ -797,8 +813,10 @@ int main(int argc,char **argv) {
++it2;
}
}
- if(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0])
+ if(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0]){
errMod=stat.linear_regression_err(model1buffer,model2buffer,c0mod,c1mod);
+ errMod*=regTime_opt[0];
+ }
else{//use global regression...
c0mod=c0modGlobal;
c1mod=c1modGlobal;
@@ -811,11 +829,18 @@ int main(int argc,char **argv) {
double certNorm=(errMod*errMod+errObs*errObs);
double certMod=errObs*errObs/certNorm;
double certObs=errMod*errMod/certNorm;
- double regTime=(c0mod+c1mod*estValue)*certMod;
-
+ double regTime=(c0mod+c1mod*estValue)*certObs;
+ double regSensor=(c0obs+c1obs*modValue)*certMod;
// double regSensor=(c0obs+c1obs*estValue)*certObs;
- double regSensor=(c0obs+c1obs*modValue)*certObs;
estWriteBuffer[icol]=regTime+regSensor;
+ //test
+ // if(regTime<regSensor){
+ // cout << "regTime = (" << c0mod << "+" << c1mod << "*" << estValue << ")*" << certObs << " = " << regTime << endl;
+ // cout << "regSensor = (" << c0obs << "+" << c1obs << "*" << modValue << ")*" << certMod << " = " << regSensor << endl;
+ // assert(regTime+regSensor>0);
+ // assert(regTime+regSensor<=1);
+ // }
+
double totalUncertainty=0;
if(errMod<eps_opt[0])
totalUncertainty=errObs;
@@ -825,30 +850,40 @@ int main(int argc,char **argv) {
totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
totalUncertainty=sqrt(1.0/totalUncertainty);
}
- // uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
- uncertWriteBuffer[icol]=totalUncertainty;
+ uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
}
- //observation update
+ //measurement update
if(update&&!imgReaderObs.isNoData(obsLineBuffer[icol])){
double kalmanGain=1;
double uncertObs=uncertObs_opt[0];
if(uncertObsLineBuffer.size()>icol)
uncertObs=uncertObsLineBuffer[icol];
- else if(weight_opt.size()||deltaObs_opt.size()){
+ else if(weight_opt.size()>1||deltaObs_opt.size()){
statfactory::StatFactory statobs;
statobs.setNoDataValues(obsnodata_opt);
- double obsMeanValue=statobs.mean(obsWindowBuffer);
- double difference=(obsMeanValue-c0obs)/c1obs-modValue;
- if(modValue&&deltaObs_opt.size()){
- double relativeDifference=100.0*difference/modValue;
- if(relativeDifference<deltaObs_opt[0])//lower bound
- kalmanGain=0;
- else if(relativeDifference>deltaObs_opt[1])//upper bound
- kalmanGain=0;
- }
- uncertObs=-weight_opt[0]*difference;
+ double obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;
+ double difference=obsMeanValue-modValue;
+ if(modValue){
+ double relativeDifference=difference/modValue;
+ if(deltaObs_opt.size()){
+ assert(deltaObs_opt.size()>1);
+ if(100*relativeDifference<deltaObs_opt[0])//lower bound
+ kalmanGain=0;
+ else if(100*relativeDifference>deltaObs_opt[1])//upper bound
+ kalmanGain=0;
+ }
+ else if(weight_opt.size()){
+ assert(weight_opt.size()>1);
+ if(obsMeanValue<modValue)
+ uncertObs=weight_opt[0]*relativeDifference;
+ else if(obsMeanValue>modValue)
+ uncertObs=weight_opt[1]*relativeDifference;
+ }
+ }
if(uncertObs<=0)
uncertObs=0;
+ if(verbose_opt[0]>1)
+ cout << "obsMeanValue:" << obsMeanValue << ", modValue: " << modValue << endl;
}
if(kalmanGain>0){
if((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])
@@ -886,7 +921,10 @@ int main(int argc,char **argv) {
output=outputbw_opt.back();
else{
ostringstream outputstream;
- outputstream << outputbw_opt[0] << "_" << tmodel_opt.back() << ".tif";
+ outputstream << outputbw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt.back();
+ outputstream << ".tif";
+ // outputstream << outputbw_opt[0] << "_" << tmodel_opt.back() << ".tif";
output=outputstream.str();
}
if(verbose_opt[0])
@@ -947,36 +985,16 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<imgWriterEst.nrOfCol();++icol){
imgWriterEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
imgReaderModel1.geo2image(geox,geoy,modCol,modRow);
- estWriteBuffer[icol]=estReadBuffer[modCol];
- uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;
+ double modValue=estReadBuffer[modCol];
+ if(imgReaderModel1.isNoData(modValue)){
+ estWriteBuffer[icol]=obsnodata_opt[0];
+ uncertWriteBuffer[icol]=uncertNodata_opt[0];
+ }
+ else{
+ estWriteBuffer[icol]=modValue;
+ uncertWriteBuffer[icol]=uncertModel_opt[0]*stdDev;
+ }
}
imgWriterEst.writeData(estWriteBuffer,GDT_Float64,irow,0);
imgWriterEst.writeData(uncertWriteBuffer,GDT_Float64,irow,1);
@@ -989,9 +1007,9 @@ int main(int argc,char **argv) {
}
}
}
- else{//we have an observation at end time
+ else{//we have an measurement at end time
if(verbose_opt[0])
- cout << "we have an observation at end time" << endl;
+ cout << "we have an measurement at end time" << endl;
imgReaderObs.open(observation_opt.back());
imgReaderObs.getGeoTransform(geotransform);
imgReaderObs.setNoData(obsnodata_opt);
@@ -1000,8 +1018,13 @@ int main(int argc,char **argv) {
if(obsscale_opt.size())
imgReaderObs.setScale(obsscale_opt[0]);
- if(regSensor_opt[0])
- errObs=imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(regSensor_opt[0]>0){
+ errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel1,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(errObs<0){
+ c0obs=0;
+ c1obs=1;
+ }
+ }
else{
c0obs=0;
c1obs=1;
@@ -1029,33 +1052,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<imgWriterEst.nrOfCol();++icol){
imgWriterEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
imgReaderModel1.geo2image(geox,geoy,modCol,modRow);
assert(modRow>=0&&modRow<imgReaderModel1.nrOfRow());
double modValue=estReadBuffer[modCol];
@@ -1072,33 +1068,32 @@ int main(int argc,char **argv) {
}
else{//model is valid: calculate estimate from model
double errMod=uncertModel_opt[0]*stdDev;
- double certNorm=(errMod*errMod+errObs*errObs);
- double certMod=errObs*errObs/certNorm;
- double certObs=errMod*errMod/certNorm;
- double regTime=0;
- double regSensor=(c0obs+c1obs*modValue)*certObs;
- estWriteBuffer[icol]=regTime+regSensor;
- double totalUncertainty=0;
- if(errMod<eps_opt[0])
- totalUncertainty=errObs;
- else if(errObs<eps_opt[0])
- totalUncertainty=errMod;
- else{
- totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
- totalUncertainty=sqrt(1.0/totalUncertainty);
- }
+ errMod*=regTime_opt[0];
+ // double certNorm=(errMod*errMod+errObs*errObs);
+ // double certMod=errObs*errObs/certNorm;
+ // double certObs=errMod*errMod/certNorm;
+ // double regTime=0;
+ // double regSensor=(c0obs+c1obs*modValue)*certMod;
+ // estWriteBuffer[icol]=regTime+regSensor;
+ estWriteBuffer[icol]=modValue;
+ double totalUncertainty=errMod;
+ // if(errMod<eps_opt[0])
+ // totalUncertainty=errObs;
+ // else if(errObs<eps_opt[0])
+ // totalUncertainty=errMod;
+ // else{
+ // totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
+ // totalUncertainty=sqrt(1.0/totalUncertainty);
+ // }
uncertWriteBuffer[icol]=totalUncertainty;//in case observation is not valid
}
- //todo: check with Fernando? (here uncertainty only relates to modeled estimate. In case of observation update, we include uncertainty of observation
- // uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
- //observation update if observation is valid
-
+ //measurement update
if(!imgReaderObs.isNoData(obsLineBuffer[icol])){
double kalmanGain=1;
double uncertObs=uncertObs_opt[0];
if(uncertObsLineBuffer.size()>icol)
uncertObs=uncertObsLineBuffer[icol];
- else if(weight_opt.size()||deltaObs_opt.size()){
+ else if(weight_opt.size()>1||deltaObs_opt.size()){
vector<double> obsWindowBuffer;//buffer for observation to calculate average corresponding to model pixel
int minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;
int maxCol=(icol+down_opt[0]/2<imgReaderObs.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderObs.nrOfCol()-1;
@@ -1110,14 +1105,23 @@ int main(int argc,char **argv) {
statobs.setNoDataValues(obsnodata_opt);
double obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;
double difference=obsMeanValue-modValue;
- if(modValue&&deltaObs_opt.size()){
- double relativeDifference=100.0*difference/modValue;
- if(relativeDifference<deltaObs_opt[0])//lower bound
- kalmanGain=0;
- else if(relativeDifference>deltaObs_opt[1])//upper bound
- kalmanGain=0;
- }
- uncertObs=-weight_opt[0]*difference;
+ if(modValue){
+ double relativeDifference=difference/modValue;
+ if(deltaObs_opt.size()){
+ assert(deltaObs_opt.size()>1);
+ if(100*relativeDifference<deltaObs_opt[0])//lower bound
+ kalmanGain=0;
+ else if(100*relativeDifference>deltaObs_opt[1])//upper bound
+ kalmanGain=0;
+ }
+ else if(weight_opt.size()){
+ assert(weight_opt.size()>1);
+ if(obsMeanValue<modValue)
+ uncertObs=weight_opt[0]*relativeDifference;
+ else if(obsMeanValue>modValue)
+ uncertObs=weight_opt[1]*relativeDifference;
+ }
+ }
if(uncertObs<=0)
uncertObs=0;
if(verbose_opt[0]>1)
@@ -1154,8 +1158,10 @@ int main(int argc,char **argv) {
output=outputbw_opt[modindex];
else{
ostringstream outputstream;
- outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
- // outputstream << output_opt[0] << "_" << modindex+1 << ".tif";
+ outputstream << outputbw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex];
+ outputstream << ".tif";
+ // outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
output=outputstream.str();
}
@@ -1188,6 +1194,8 @@ int main(int argc,char **argv) {
cout << "Calculating regression for " << imgReaderModel1.getFileName() << " " << imgReaderModel2.getFileName() << endl;
double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,0,0);
+ errMod*=regTime_opt[0];
+
// double errMod=imgreg.getRMSE(imgReaderModel1,imgReaderModel2,c0modGlobal,c1modGlobal,verbose_opt[0]);
if(verbose_opt[0])
cout << "c0modGlobal, c1modGlobal: " << c0modGlobal << ", " << c1modGlobal << endl;
@@ -1210,8 +1218,13 @@ int main(int argc,char **argv) {
//calculate regression between model and observation
if(verbose_opt[0])
cout << "Calculating regression for " << imgReaderModel2.getFileName() << " " << imgReaderObs.getFileName() << endl;
- if(regSensor_opt[0])
- errObs=imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(regSensor_opt[0]>0){
+ errObs=regSensor_opt[0]*imgreg.getRMSE(imgReaderModel2,imgReaderObs,c0obs,c1obs,0,0,verbose_opt[0]);
+ if(errObs<0){
+ c0obs=0;
+ c1obs=1;
+ }
+ }
else{
c0obs=0;
c1obs=1;
@@ -1226,7 +1239,10 @@ int main(int argc,char **argv) {
input=outputbw_opt[modindex+1];
else{
ostringstream outputstream;
- outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex+1] << ".tif";
+ outputstream << outputbw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex+1];
+ outputstream << ".tif";
+ // outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex+1] << ".tif";
input=outputstream.str();
}
ImgReaderGdal imgReaderEst(input);
@@ -1252,12 +1268,14 @@ int main(int argc,char **argv) {
// vector<double> lineMask;
//initialize obsLineVector
- assert(down_opt[0]%2);//window size must be odd
- for(int iline=-down_opt[0]/2+1;iline<down_opt[0]/2+1;++iline){
- if(iline<0)//replicate line 0
- imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);
- else
- imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);
+ if(update){
+ assert(down_opt[0]%2);//window size must be odd
+ for(int iline=-down_opt[0]/2;iline<down_opt[0]/2+1;++iline){
+ if(iline<0)//replicate line 0
+ imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,0,0);
+ else
+ imgReaderObs.readData(obsLineVector[iline+down_opt[0]/2],GDT_Float64,iline,0);
+ }
}
for(int irow=0;irow<imgWriterEst.nrOfRow();++irow){
assert(irow<imgReaderEst.nrOfRow());
@@ -1287,33 +1305,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<imgWriterEst.nrOfCol();++icol){
imgReaderEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
int minCol=(icol>down_opt[0]/2) ? icol-down_opt[0]/2 : 0;
int maxCol=(icol+down_opt[0]/2<imgReaderEst.nrOfCol()) ? icol+down_opt[0]/2 : imgReaderEst.nrOfCol()-1;
int minRow=(irow>down_opt[0]/2) ? irow-down_opt[0]/2 : 0;
@@ -1386,8 +1377,10 @@ int main(int argc,char **argv) {
++it2;
}
}
- if(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0])
+ if(model1buffer.size()>minreg_opt[0]&&model2buffer.size()>minreg_opt[0]){
errMod=stat.linear_regression_err(model1buffer,model2buffer,c0mod,c1mod);
+ errMod*=regTime_opt[0];
+ }
else{//use global regression...
c0mod=c0modGlobal;
c1mod=c1modGlobal;
@@ -1400,10 +1393,10 @@ int main(int argc,char **argv) {
double certNorm=(errMod*errMod+errObs*errObs);
double certMod=errObs*errObs/certNorm;
double certObs=errMod*errMod/certNorm;
- double regTime=(c0mod+c1mod*estValue)*certMod;
+ double regTime=(c0mod+c1mod*estValue)*certObs;
// double regSensor=(c0obs+c1obs*estValue)*certObs;
- double regSensor=(c0obs+c1obs*modValue)*certObs;
+ double regSensor=(c0obs+c1obs*modValue)*certMod;
estWriteBuffer[icol]=regTime+regSensor;
double totalUncertainty=0;
if(errMod<eps_opt[0])
@@ -1414,30 +1407,40 @@ int main(int argc,char **argv) {
totalUncertainty=1.0/errMod/errMod+1/errObs/errObs;
totalUncertainty=sqrt(1.0/totalUncertainty);
}
- // uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
- uncertWriteBuffer[icol]=totalUncertainty;
+ uncertWriteBuffer[icol]=totalUncertainty+uncertReadBuffer[icol];
}
- //observation update
+ //measurement update
if(update&&!imgReaderObs.isNoData(obsLineBuffer[icol])){
double kalmanGain=1;
double uncertObs=uncertObs_opt[0];
if(uncertObsLineBuffer.size()>icol)
uncertObs=uncertObsLineBuffer[icol];
- else if(weight_opt.size()||deltaObs_opt.size()){
+ else if(weight_opt.size()>1||deltaObs_opt.size()){
statfactory::StatFactory statobs;
statobs.setNoDataValues(obsnodata_opt);
- double obsMeanValue=statobs.mean(obsWindowBuffer);
- double difference=(obsMeanValue-c0obs)/c1obs-modValue;
- if(modValue&&deltaObs_opt.size()){
- double relativeDifference=100.0*difference/modValue;
- if(relativeDifference<deltaObs_opt[0])//lower bound
- kalmanGain=0;
- else if(relativeDifference>deltaObs_opt[1])//upper bound
- kalmanGain=0;
- }
- uncertObs=-weight_opt[0]*difference;
+ double obsMeanValue=(statobs.mean(obsWindowBuffer)-c0obs)/c1obs;
+ double difference=obsMeanValue-modValue;
+ if(modValue){
+ double relativeDifference=difference/modValue;
+ if(deltaObs_opt.size()){
+ assert(deltaObs_opt.size()>1);
+ if(100*relativeDifference<deltaObs_opt[0])//lower bound
+ kalmanGain=0;
+ else if(100*relativeDifference>deltaObs_opt[1])//upper bound
+ kalmanGain=0;
+ }
+ else if(weight_opt.size()){
+ assert(weight_opt.size()>1);
+ if(obsMeanValue<modValue)
+ uncertObs=weight_opt[0]*relativeDifference;
+ else if(obsMeanValue>modValue)
+ uncertObs=weight_opt[1]*relativeDifference;
+ }
+ }
if(uncertObs<=0)
uncertObs=0;
+ if(verbose_opt[0]>1)
+ cout << "obsMeanValue:" << obsMeanValue << ", modValue: " << modValue << endl;
}
if(kalmanGain>0){
if((uncertWriteBuffer[icol]+uncertObs)>eps_opt[0])
@@ -1482,7 +1485,10 @@ int main(int argc,char **argv) {
output=outputfb_opt[modindex];
else{
ostringstream outputstream;
- outputstream << outputfb_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
+ outputstream << outputfb_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex];
+ outputstream << ".tif";
+ // outputstream << outputfb_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
output=outputstream.str();
}
@@ -1501,14 +1507,20 @@ int main(int argc,char **argv) {
inputfw=outputfw_opt[modindex];
else{
ostringstream outputstream;
- outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
+ outputstream << outputfw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex];
+ outputstream << ".tif";
+ // outputstream << outputfw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
inputfw=outputstream.str();
}
if(outputbw_opt.size()==model_opt.size())
inputbw=outputbw_opt[modindex];
else{
ostringstream outputstream;
- outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
+ outputstream << outputbw_opt[0] << "_";
+ outputstream << setfill('0') << setw(ndigit) << tmodel_opt[modindex];
+ outputstream << ".tif";
+ // outputstream << outputbw_opt[0] << "_" << tmodel_opt[modindex] << ".tif";
inputbw=outputstream.str();
}
ImgReaderGdal imgReaderForward(inputfw);
@@ -1571,33 +1583,6 @@ int main(int argc,char **argv) {
// double oldRowMask=-1;//keep track of row mask to optimize number of line readings
for(int icol=0;icol<imgWriterEst.nrOfCol();++icol){
imgWriterEst.image2geo(icol,irow,geox,geoy);
- // bool masked=false;
- // if(mask_opt.size()){
- // //read mask
- // maskReader.geo2image(geox,geoy,colMask,rowMask);
- // colMask=static_cast<int>(colMask);
- // rowMask=static_cast<int>(rowMask);
- // if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
- // if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
- // try{
- // maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
- // }
- // catch(string errorstring){
- // cerr << errorstring << endl;
- // exit(1);
- // }
- // catch(...){
- // cerr << "error catched" << std::endl;
- // exit(3);
- // }
- // oldRowMask=rowMask;
- // }
- // masked=(maskReader.isNoData(lineMask[colMask]));
- // }
- // estWriteBuffer[icol]=msknodata_opt[0];
- // uncertWriteBuffer[icol]=msknodata_opt[0];
- // continue;//next column
- // }
double A=estForwardBuffer[icol];
double B=estBackwardBuffer[icol];
double C=uncertForwardBuffer[icol]*uncertForwardBuffer[icol];
diff --git a/src/apps/pklas2img.cc b/src/apps/pklas2img.cc
index 134a385..0746df3 100644
--- a/src/apps/pklas2img.cc
+++ b/src/apps/pklas2img.cc
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with pktools. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************/
#include <iostream>
-#include "Optionpk.h"
+#include "base/Optionpk.h"
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
#include "imageclasses/ImgReaderOgr.h"
@@ -26,18 +26,70 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "algorithms/StatFactory.h"
#include "algorithms/Filter2d.h"
+/******************************************************************************/
+/*! \page pklas2img pklas2img
+ Rasterize LAS/LAZ point clouds with filtering/compositing options
+## SYNOPSIS
+
+<code>
+
+</code>
+
+<code>
+
+ Options: [-n attribute] [-comp method] [-fir type] [-a_srs] [-ulx value -uly value -lrx value -lry value] [-dx value -dy value] [-ot type] [-of format] [-ret value]* [-class number]*
+
+ Advanced options: [-nbin value] [-nodata value] [-co option]* [-ct colortable]
+
+</code>
+
+\section pklas2img_description Description
+
+The utility pklas2img converts a las/laz point cloud into a gridded raster dataset. The implementation is based on <a href="www.liblas.org">liblas</a> API. You can define the bounding box, grid cell size and spatial reference set. The composite rule for multiple returns within a single grid cell can be set with the option -comp. The default attribute is z (heiht), but can also be intensity (if available), the return number (-n return) or the total number of returns in that grid cell (-n [...]
+\section pklas2img_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input las file |
+ | n | name | std::string | z |names of the attribute to select: intensity, return, nreturn, z |
+ | ret | ret | unsigned short | |number(s) of returns to include |
+ | class | class | unsigned short | |classes to keep: 0 (created, never classified), 1 (unclassified), 2 (ground), 3 (low vegetation), 4 (medium vegetation), 5 (high vegetation), 6 (building), 7 (low point, noise), 8 (model key-point), 9 (water), 10 (reserved), 11 (reserved), 12 (overlap) |
+ | comp | comp | std::string | last |composite for multiple points in cell (min, max, median, mean, sum, first, last, profile (percentile height values), percentile, number (point density)). Last: overwrite cells with latest point |
+ | fir | filter | std::string | all |filter las points (first,last,single,multiple,all). |
+ | o | output | std::string | |Output image file |
+ | a_srs | a_srs | std::string | |assign the projection for the output file in epsg code, e.g., epsg:3035 for European LAEA projection |
+ | ulx | ulx | double | 0 |Upper left x value bounding box (in geocoordinates if georef is true). 0 is read from input file |
+ | uly | uly | double | 0 |Upper left y value bounding box (in geocoordinates if georef is true). 0 is read from input file |
+ | lrx | lrx | double | 0 |Lower right x value bounding box (in geocoordinates if georef is true). 0 is read from input file |
+ | lry | lry | double | 0 |Lower right y value bounding box (in geocoordinates if georef is true). 0 is read from input file |
+ | ot | otype | std::string | Byte |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | GTiff |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | dx | dx | double | 1 |Output resolution in x (in meter) |
+ | dy | dy | double | 1 |Output resolution in y (in meter) |
+ | nbin | nbin | short | 10 |Number of percentile bins for calculating percentile height value profile (=number of output bands) |
+ | perc | perc | double | 95 |Percentile value used for rule percentile |
+ | nodata | nodata | short | 0 |nodata value to put in image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+
+pklas2img -i lasfile -o output
+
+
+**/
+
using namespace std;
int main(int argc,char **argv) {
Optionpk<string> input_opt("i", "input", "Input las file");
- Optionpk<string> attribute_opt("n", "name", "names of the attribute to select: intensity, return, nreturn, z", "z");
+ Optionpk<string> attribute_opt("n", "name", "names of the point attribute to select: intensity, return, nreturn, z", "z");
// Optionpk<bool> disc_opt("circ", "circular", "circular disc kernel for dilation and erosion", false);
// Optionpk<double> maxSlope_opt("s", "maxSlope", "Maximum slope used for morphological filtering", 0.0);
// Optionpk<double> hThreshold_opt("ht", "maxHeight", "initial and maximum height threshold for progressive morphological filtering (e.g., -ht 0.2 -ht 2.5)", 0.2);
// Optionpk<short> maxIter_opt("maxit", "maxit", "Maximum number of iterations in post filter", 5);
Optionpk<unsigned short> returns_opt("ret", "ret", "number(s) of returns to include");
Optionpk<unsigned short> classes_opt("class", "class", "classes to keep: 0 (created, never classified), 1 (unclassified), 2 (ground), 3 (low vegetation), 4 (medium vegetation), 5 (high vegetation), 6 (building), 7 (low point, noise), 8 (model key-point), 9 (water), 10 (reserved), 11 (reserved), 12 (overlap)");
- Optionpk<string> composite_opt("comp", "comp", "composite for multiple points in cell (min, max, median, mean, sum, first, last, profile (percentile height values), number (point density)). Last: overwrite cells with latest point", "last");
+ Optionpk<string> composite_opt("comp", "comp", "composite for multiple points in cell (min, max, median, mean, sum, first, last, profile (percentile height values), percentile, number (point density)). Last: overwrite cells with latest point", "last");
Optionpk<string> filter_opt("fir", "filter", "filter las points (first,last,single,multiple,all).", "all");
// Optionpk<string> postFilter_opt("pf", "pfilter", "post processing filter (etew_min,promorph (progressive morphological filter),bunting (adapted promorph),open,close,none).", "none");
// Optionpk<short> dimx_opt("dimx", "dimx", "Dimension X of postFilter", 3);
@@ -53,12 +105,14 @@ int main(int argc,char **argv) {
Optionpk<double> dx_opt("dx", "dx", "Output resolution in x (in meter)", 1.0);
Optionpk<double> dy_opt("dy", "dy", "Output resolution in y (in meter)", 1.0);
Optionpk<short> nbin_opt("nbin", "nbin", "Number of percentile bins for calculating percentile height value profile (=number of output bands)", 10.0);
- Optionpk<short> nodata_opt("nodata", "nodata", "nodata value to put in image if not valid", 0);
+ Optionpk<double> percentile_opt("perc","perc","Percentile value used for rule percentile",95);
+ Optionpk<short> nodata_opt("nodata", "nodata", "nodata value to put in image", 0);
Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
Optionpk<short> verbose_opt("v", "verbose", "verbose mode", 0,2);
nbin_opt.setHide(1);
+ percentile_opt.setHide(1);
nodata_opt.setHide(1);
option_opt.setHide(1);
colorTable_opt.setHide(1);
@@ -82,6 +136,7 @@ int main(int argc,char **argv) {
dx_opt.retrieveOption(argc,argv);
dy_opt.retrieveOption(argc,argv);
nbin_opt.retrieveOption(argc,argv);
+ percentile_opt.retrieveOption(argc,argv);
nodata_opt.retrieveOption(argc,argv);
option_opt.retrieveOption(argc,argv);
colorTable_opt.retrieveOption(argc,argv);
@@ -108,7 +163,7 @@ int main(int argc,char **argv) {
GDALProgressFunc pfnProgress=GDALTermProgress;
double progress=0;
- Vector2d<vector<float> > inputData;//row,col,point
+ Vector2d<vector<double> > inputData;//row,col,point
ImgReaderGdal maskReader;
@@ -229,7 +284,7 @@ int main(int argc,char **argv) {
inputData.clear();
inputData.resize(nrow,ncol);
- Vector2d<float> outputData(nrow,ncol);
+ Vector2d<double> outputData(nrow,ncol);
for(int irow=0;irow<nrow;++irow)
for(int icol=0;icol<ncol;++icol)
outputData[irow][icol]=0;
@@ -353,11 +408,11 @@ int main(int argc,char **argv) {
for(int irow=0;irow<nrow;++irow){
if(composite_opt[0]=="number")
continue;//outputData already set
- Vector2d<float> outputProfile(nband,ncol);
+ Vector2d<double> outputProfile(nband,ncol);
for(int icol=0;icol<ncol;++icol){
- std::vector<float> profile;
+ std::vector<double> profile;
if(!inputData[irow][icol].size())
- outputData[irow][icol]=(static_cast<float>((nodata_opt[0])));
+ outputData[irow][icol]=(static_cast<double>((nodata_opt[0])));
else{
statfactory::StatFactory stat;
if(composite_opt[0]=="min")
@@ -366,6 +421,8 @@ int main(int argc,char **argv) {
outputData[irow][icol]=stat.mymax(inputData[irow][icol]);
else if(composite_opt[0]=="median")
outputData[irow][icol]=stat.median(inputData[irow][icol]);
+ else if(composite_opt[0]=="percentile")
+ outputData[irow][icol]=stat.percentile(inputData[irow][icol],inputData[irow][icol].begin(),inputData[irow][icol].end(),percentile_opt[0]);
else if(composite_opt[0]=="mean")
outputData[irow][icol]=stat.mean(inputData[irow][icol]);
else if(composite_opt[0]=="sum")
@@ -377,11 +434,11 @@ int main(int argc,char **argv) {
else if(composite_opt[0]=="profile"){
if(inputData[irow][icol].size()<2){
for(int iband=0;iband<nband;++iband)
- outputProfile[iband][icol]=static_cast<float>(nodata_opt[0]);
+ outputProfile[iband][icol]=static_cast<double>(nodata_opt[0]);
continue;
}
- float min=0;
- float max=0;
+ double min=0;
+ double max=0;
stat.minmax(inputData[irow][icol],inputData[irow][icol].begin(),inputData[irow][icol].end(),min,max);
if(verbose_opt[0])
std::cout << "min,max: " << min << "," << max << std::endl;
@@ -407,7 +464,7 @@ int main(int argc,char **argv) {
// assert(outputProfile[iband].size()==outputWriter.nrOfRow());
assert(outputProfile[iband].size()==outputWriter.nrOfCol());
try{
- outputWriter.writeData(outputProfile[iband],GDT_Float32,irow,iband);
+ outputWriter.writeData(outputProfile[iband],GDT_Float64,irow,iband);
}
catch(std::string errorString){
cout << errorString << endl;
@@ -527,7 +584,7 @@ int main(int argc,char **argv) {
try{
assert(outputData.size()==outputWriter.nrOfRow());
assert(outputData[0].size()==outputWriter.nrOfCol());
- outputWriter.writeData(outputData[irow],GDT_Float32,irow,0);
+ outputWriter.writeData(outputData[irow],GDT_Float64,irow,0);
}
catch(std::string errorString){
cout << errorString << endl;
diff --git a/src/apps/pkndvi.cc b/src/apps/pkndvi.cc
deleted file mode 100644
index 210afd5..0000000
--- a/src/apps/pkndvi.cc
+++ /dev/null
@@ -1,329 +0,0 @@
-/**********************************************************************
-pkndvi.cc: program to calculate vegetation index image
-Copyright (C) 2008-2014 Pieter Kempeneers
-
-This file is part of pktools
-
-pktools is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-pktools is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with pktools. If not, see <http://www.gnu.org/licenses/>.
- ***********************************************************************/
-#include <assert.h>
-#include <vector>
-#include "imageclasses/ImgReaderGdal.h"
-#include "imageclasses/ImgWriterGdal.h"
-#include "base/Optionpk.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
- //command line options
- Optionpk<string> input_opt("i","input","input image file");
- Optionpk<string> output_opt("o","output","output image file containing ndvi");
- Optionpk<short> band_opt("b", "band", "Bands to be used for vegetation index (see rule option)", 0);
- Optionpk<string> rule_opt("r", "rule", "Rule for index. ndvi (b1-b0)/(b1+b0), ndvi2 (b1-b0)/(b2+b3), gvmi (b0+0.1)-(b1+0.02))/((b0+0.1)+(b1+0.02))), vari (b1-b2)/(b1+b2-b0), osavi, mcari, tcari, diff (b1-b0), scale, ratio.", "ndvi");
- Optionpk<double> invalid_opt("t", "invalid", "Mask value where image is invalid.", 0);
- Optionpk<int> nodata_opt("nodata", "nodata", "Flag value to put in image if not valid (0)", 0);
- Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
- Optionpk<string> description_opt("d", "description", "Set image description");
- Optionpk<double> min_opt("min", "min", "minimum value for ndvi after scaling (set all values smaller than min to min)", 0);
- Optionpk<double> max_opt("max", "max", "maximum value for ndvi after scaling (limit all values to max)");
- Optionpk<double> eps_opt("e", "eps", "epsilon, contraint division by zero", 0);
- Optionpk<double> src_scale_opt("src_s", "src_scale", "scale used for input, scale[1] is used for output: DN=scale[1]*ndvi+offset[1]", 1);
- Optionpk<double> dst_scale_opt("dst_s", "src_scale", "scale used for output: DN=dst_s*ndvi+dst_offset", 1);
- Optionpk<double> src_offset_opt("src_o", "src_offset", "offset used for input", 0);
- Optionpk<double> dst_offset_opt("dst_o", "dst_offset", "offset is used for output: DN=dst_s*ndvi+dst_offset", 0);
- Optionpk<string> otype_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image", "Byte");
- Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image", "GTiff");
- Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
- Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
-
- bool doProcess;//stop process when program was invoked with help option (-h --help)
- try{
- doProcess=input_opt.retrieveOption(argc,argv);
- output_opt.retrieveOption(argc,argv);
- band_opt.retrieveOption(argc,argv);
- rule_opt.retrieveOption(argc,argv);
- invalid_opt.retrieveOption(argc,argv);
- nodata_opt.retrieveOption(argc,argv);
- colorTable_opt.retrieveOption(argc,argv);
- description_opt.retrieveOption(argc,argv);
- min_opt.retrieveOption(argc,argv);
- max_opt.retrieveOption(argc,argv);
- eps_opt.retrieveOption(argc,argv);
- src_scale_opt.retrieveOption(argc,argv);
- src_offset_opt.retrieveOption(argc,argv);
- dst_scale_opt.retrieveOption(argc,argv);
- dst_offset_opt.retrieveOption(argc,argv);
- otype_opt.retrieveOption(argc,argv);
- oformat_opt.retrieveOption(argc,argv);
- option_opt.retrieveOption(argc,argv);
- verbose_opt.retrieveOption(argc,argv);
- }
- catch(string predefinedString){
- std::cout << predefinedString << std::endl;
- exit(0);
- }
- if(!doProcess){
- std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
- exit(0);//help was invoked, stop processing
- }
-
- if(input_opt.empty()){
- std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl;
- exit(0);
- }
- if(output_opt.empty()){
- std::cerr << "No output file provided (use option -o). Use --help for help information" << std::endl;
- exit(0);
- }
-
- int reqBand=0;
- if(rule_opt[0]=="scale")
- reqBand=1;
- else if(rule_opt[0]=="vari"||rule_opt[0]=="mcari"||rule_opt[0]=="tcari")
- reqBand=3;
- else if(rule_opt[0]=="ndvi2")
- reqBand=4;
- else
- reqBand=2;
- while(band_opt.size()<reqBand)//bands can be explicitly provided by user or
- band_opt.push_back(band_opt[0]);//default is to use band 0 for each input
- if(verbose_opt[0])
- std::cout << band_opt;
-
- //todo: a bit stupid to duplicate input reader, but it works
- while(input_opt.size()<reqBand)
- input_opt.push_back(input_opt[0]);
- if(verbose_opt[0])
- std::cout << input_opt;
-
- vector<ImgReaderGdal> inputReader(reqBand);
- for(int ifile=0;ifile<reqBand;++ifile){
- inputReader[ifile].open(input_opt[ifile]);
- assert(inputReader[ifile].nrOfBand()>band_opt[ifile]);
- }
-
- if(verbose_opt[0]){
- cout << "opening output image file " << output_opt[0] << endl;
- cout << "data type: " << otype_opt[0] << endl;
- }
- //create output image with user defined data type
- GDALDataType theType=GDT_Unknown;
- if(verbose_opt[0])
- cout << "possible output data types: ";
- for(int iType = 0; iType < GDT_TypeCount; ++iType){
- if(verbose_opt[0])
- cout << " " << GDALGetDataTypeName((GDALDataType)iType);
- if( GDALGetDataTypeName((GDALDataType)iType) != NULL
- && EQUAL(GDALGetDataTypeName((GDALDataType)iType),
- otype_opt[0].c_str()))
- theType=(GDALDataType) iType;
- }
- if(theType==GDT_Unknown)
- theType=inputReader[0].getDataType();
- if(verbose_opt[0])
- cout << endl << "Output pixel type: " << GDALGetDataTypeName(theType) << endl;
-
- ImgWriterGdal outputWriter;
- if(verbose_opt[0])
- cout << "opening output image file " << output_opt[0] << endl;
-
- if(option_opt.findSubstring("INTERLEAVE=")==option_opt.end()){
- string theInterleave="INTERLEAVE=";
- theInterleave+=inputReader[0].getInterleave();
- option_opt.push_back(theInterleave);
- }
- outputWriter.open(output_opt[0],inputReader[0].nrOfCol(),inputReader[0].nrOfRow(),1,theType,oformat_opt[0],option_opt);
- outputWriter.GDALSetNoDataValue(nodata_opt[0]);
-
- if(description_opt.size())
- outputWriter.setImageDescription(description_opt[0]);
- //if input image is georeferenced, copy projection info to output image
-
- outputWriter.setProjection(inputReader[0].getProjection());
- double ulx,uly,lrx,lry;
- inputReader[0].getBoundingBox(ulx,uly,lrx,lry);
- outputWriter.copyGeoTransform(inputReader[0]);
-
- if(colorTable_opt.size()){
- if(colorTable_opt[0]!="none")
- outputWriter.setColorTable(colorTable_opt[0]);
- }
- else if (inputReader[0].getColorTable()!=NULL)//copy colorTable from first input image
- outputWriter.setColorTable(inputReader[0].getColorTable());
-
- Vector2d<double> lineInput(reqBand,inputReader[0].nrOfCol());
- vector<double> lineOutput(outputWriter.nrOfCol());
-
- int irow=0;
- int icol=0;
- const char* pszMessage;
- void* pProgressArg=NULL;
- GDALProgressFunc pfnProgress=GDALTermProgress;
- float progress=0;
- pfnProgress(progress,pszMessage,pProgressArg);
- for(irow=0;irow<inputReader[0].nrOfRow();++irow){
- //read line in lineInput buffer
- try{
- if(rule_opt[0]=="scale")
- inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);
- else if(rule_opt[0]=="vari"||rule_opt[0]=="tcari"){
- inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);
- inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);
- inputReader[2].readData(lineInput[2],GDT_Float64,irow,band_opt[2]);
- }
- else if(rule_opt[0]=="ndvi2"){
- inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);
- inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);
- inputReader[2].readData(lineInput[2],GDT_Float64,irow,band_opt[2]);
- inputReader[3].readData(lineInput[3],GDT_Float64,irow,band_opt[3]);
- }
- else{
- inputReader[0].readData(lineInput[0],GDT_Float64,irow,band_opt[0]);
- inputReader[1].readData(lineInput[1],GDT_Float64,irow,band_opt[1]);
- }
- }
- catch(string errorstring){
- cerr << errorstring << endl;
- exit(1);
- }
- assert(invalid_opt.size()==nodata_opt.size());
- for(icol=0;icol<inputReader[0].nrOfCol();++icol){
- double ndvi=min_opt[0];
- double flagValue=nodata_opt[0];
- bool valid=true;
- for(int iflag=0;valid&&iflag<invalid_opt.size();++iflag){
- for(int iband=0;iband<lineInput.size();++iband){
- if(lineInput[iband][icol]==invalid_opt[iflag]){
- flagValue=nodata_opt[iflag];
- valid=false;
- break;
- }
- }
- }
- double denom;
- double nom;
- if(valid){
- if(rule_opt[0]=="ndvi"){
- //Example of indices addressed by ndvi:
- //structural indices
- //NDVI (Rouse1974): b0=b_680, b1=b_800
- //Chlorophyll indices:
- //Normalized Phaeophytinization index (NPQI Barnes1992): b0=R_435, b1=R_415
- //Photochemical Reflectance index (PRI1 Gamon1992): b0=R_567, b1=R_528
- //Photochemical Reflectance index (PRI2 Gamon1992): b0=R_570, b1=R_531
- //Normalized Phaeophytinization index (NPQI Barnes1992): b0=R_435, b1=R_415
- //Normalized Pigment Chlorophyll index (NPCI Penuelas1994): b0=R_430, b1=R_680
- //Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800
- //Lichtenthaler index 1 (Lic1 Lichtenthaler1996): b0=R_680, b2=R_800
- denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else if(rule_opt[0]=="ndvi2"){//normalized difference with different wavelengths used in denom and nom
- //Example of indices addressed by ndvi2
- //Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800, b2=R_650, b=R_800
- //Vogelmann index 2 (Vog2 Vogelmann1993): b0=R_747, b1=R_735, b2=R_715, b3=R_726
- //Vogelmann index 3 (Vog3 Vogelmann1993): b0=R_747, b1=R_734, b2=R_715, b3=R_720
- denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[3][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else if(rule_opt[0]=="gvmi"){
- denom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)-((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02);
- nom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)+((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02);
- }
- else if(rule_opt[0]=="vari"){
- denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else if(rule_opt[0]=="osavi"){//structural index (Rondeaux1996): //b0=R_670, b1=R_800
- denom=(1.0+0.16)*(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.16;
- }
- else if(rule_opt[0]=="mcari"){//chlorophyll index (Daughtry2000): b0=R_550, b1=R_670, b2=R_700
- denom=((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]))*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else if(rule_opt[0]=="tcari"){//chlorophyll index (Haboudane2002): b0=R_550, b1=R_670, B2=R_700
- denom=3*((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0])*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]);
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else if(rule_opt[0]=="diff"){
- denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=1.0;
- }
- else if(rule_opt[0]=="scale"){
- denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=1.0;
- }
- else if(rule_opt[0]=="ratio"){
- //Examples of indices addressed by ratio:
- //structural indices:
- //Simple Ratio Index (SR Jordan1969, Rouse1974): b0=R_NIR/R_RED
- //chlorophyll indices:
- //Greenness Index: b0=R_554, b1=R_677;
- //Zarco-Tejada&Miller (Zarco2001): b0=R_750,b1=R_710
- //Simple Red Pigment Index (SRPI Penuelas1995): b0=R_430, b1=R_680
- //Carter index 1 (Ctr1 Carter1994): b0=R_695, b1=R_420
- //Carter index 2 (Ctr2 Carter1994): b0=R_695, b1=R_760
- //Lichtenthaler index 2 (Lic2 Lichtenthaler1996): b0=R_440, b2=R_690
- //Vogelmann index 1 (Vog1 Vogelmann1993): b0=R_740, b1=R_720
- //Gitelson and Merzlyak 1 (GM1 Gitelson1997): b0=R_750 b1=R_550
- //Gitelson and Merzlyak (GM2 Gitelson1997) b0=R_750 b1=R_700
- denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0];
- nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0];
- }
- else{
- std::cout << "Error: rule " << rule_opt[0] << " not supported" << std::endl;
- exit(1);
- }
- if(nom>eps_opt[0]||nom<-eps_opt[0])
- ndvi=denom/nom;
- switch(theType){
- case(GDT_Byte):
- case(GDT_Int16):
- case(GDT_UInt16):
- case(GDT_UInt32):
- case(GDT_Int32):
- lineOutput[icol]=static_cast<int>(0.5+ndvi*dst_scale_opt[0]+dst_offset_opt[0]);
- break;
- default:
- lineOutput[icol]=ndvi*dst_scale_opt[0]+dst_offset_opt[0];
- break;
- }
- if(lineOutput[icol]<min_opt[0])
- lineOutput[icol]=min_opt[0];
- else if(max_opt.size()){
- if(lineOutput[icol]>max_opt[0])
- lineOutput[icol]=max_opt[0];
- }
- }
- else
- lineOutput[icol]=flagValue;
- }
- //write buffer lineOutput to output file
- try{
- outputWriter.writeData(lineOutput,GDT_Float64,irow);
- }
- catch(string errorstring){
- cerr << errorstring << endl;
- exit(1);
- }
- //progress bar
- progress=static_cast<float>(irow+1.0)/outputWriter.nrOfRow();
- pfnProgress(progress,pszMessage,pProgressArg);
- }
- for(int ifile=0;ifile<inputReader.size();++ifile)
- inputReader[ifile].close();
- outputWriter.close();
-}
diff --git a/src/apps/pkoptsvm.cc b/src/apps/pkoptsvm.cc
index a01c249..f17dcbd 100644
--- a/src/apps/pkoptsvm.cc
+++ b/src/apps/pkoptsvm.cc
@@ -36,6 +36,71 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pkoptsvm pkoptsvm
+ program to optimize parameters for support vector machine classifier pksvm
+## SYNOPSIS
+
+<code>
+ Usage: pkoptsvm -t training
+</code>
+
+<code>
+
+ Options: [-cc startvalue -cc endvalue] [-g startvalue -g endvalue] [-stepcc stepsize] [-stepg stepsize]
+
+ Advanced options:
+</code>
+
+\section pkoptsvm_description Description
+
+The support vector machine depends on several parameters. Ideally, these parameters should be optimized for each classification problem. In case of a radial basis kernel function, two important parameters are \em{cost} and \em{gamma}. The utility pkoptsvm can optimize these two parameters, based on an accuracy assessment (the Kappa value). If an input test set (-i) is provided, it is used for the accuracy assessment. If not, the accuracy assessment is based on a cross validation (-cv) of [...]
+
+The optimization routine uses a grid search. The initial and final values of the parameters can be set with -cc startvalue -cc endvalue and -g startvalue -g endvalue for cost and gamma respectively. The search uses a multiplicative step for iterating the parameters (set with the options -stepcc and -stepg). An often used approach is to define a relatively large multiplicative step first (e.g 10) to obtain an initial estimate for both parameters. The estimate can then be optimized by defi [...]
+
+\section pkoptsvm_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | t | training | std::string | |training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option). |
+ | cc | ccost | float | 1 |min and max boundaries the parameter C of C-SVC, epsilon-SVR, and nu-SVR (optional: initial value) |
+ | g | gamma | float | 0 |min max boundaries for gamma in kernel function (optional: initial value) |
+ | stepcc | stepcc | double | 2 |multiplicative step for ccost in GRID search |
+ | stepg | stepg | double | 2 |multiplicative step for gamma in GRID search |
+ | i | input | std::string | |input test vector file |
+ | tln | tln | std::string | |training layer name(s) |
+ | label | label | std::string | label |identifier for class label in training vector file. |
+ | bal | balance | unsigned int | 0 |balance the input data to this number of samples for each class |
+ | random | random | bool | true |in case of balance, randomize input data |
+ | min | min | int | 0 |if number of training pixels is less then min, do not take this class into account |
+ | b | band | short | |band index (starting from 0, either use band option or use start to end) |
+ | s | start | double | 0 |start band sequence number |
+ | e | end | double | 0 |end band sequence number (set to 0 to include all bands) |
+ | | offset | double | 0 |offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | svmt | svmtype | std::string | C_SVC |type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) |
+ | kt | kerneltype | std::string | radial |type of kernel function (linear,polynomial,radial,sigmoid) |
+ | kd | kd | unsigned short | 3 |degree in kernel function |
+ | c0 | coef0 | float | 0 |coef0 in kernel function |
+ | nu | nu | float | 0.5 |the parameter nu of nu-SVC, one-class SVM, and nu-SVR |
+ | eloss | eloss | float | 0.1 |the epsilon in loss function of epsilon-SVR |
+ | cache | cache | int | 100 |cache memory size in MB |
+ | etol | etol | float | 0.001 |the tolerance of termination criterion |
+ | shrink | shrink | bool | false |whether to use the shrinking heuristics |
+ | pe | probest | bool | true |whether to train a SVC or SVR model for probability estimates |
+ | cv | cv | unsigned short | 2 |n-fold cross validation mode |
+ | cf | cf | bool | false |use Overall Accuracy instead of kappa |
+ | maxit | maxit | unsigned int | 500 |maximum number of iterations |
+ | tol | tolerance | double | 0.0001 |relative tolerance for stopping criterion |
+ | c | class | std::string | |list of class names. |
+ | r | reclass | short | |list of class values (use same order as in class opt). |
+
+Usage: pkoptsvm -t training
+
+
+**/
+
using namespace std;
#define Malloc(type,n) (type *)malloc((n)*sizeof(type))
@@ -104,154 +169,6 @@ double objFunction(const std::vector<double> &x, std::vector<double> &grad, void
kappa=costfactory.getCost(*tf);
return(kappa);
-
- // std::map<std::string, svm::SVM_TYPE> svmMap;
-
- // svmMap["C_SVC"]=svm::C_SVC;
- // svmMap["nu_SVC"]=svm::nu_SVC;
- // svmMap["one_class"]=svm::one_class;
- // svmMap["epsilon_SVR"]=svm::epsilon_SVR;
- // svmMap["nu_SVR"]=svm::nu_SVR;
-
- // std::map<std::string, svm::KERNEL_TYPE> kernelMap;
-
- // kernelMap["linear"]=svm::linear;
- // kernelMap["polynomial"]=svm::polynomial;
- // kernelMap["radial"]=svm::radial;
- // kernelMap["sigmoid;"]=svm::sigmoid;
-
- // unsigned short nclass=tf->size();
- // unsigned int ntraining=0;
- // unsigned int ntest=0;
- // for(int iclass=0;iclass<nclass;++iclass){
- // ntraining+=nctraining[iclass];
- // ntest+=nctest[iclass];
- // }
- // if(ntest)
- // cv_opt[0]=0;
- // if(!cv_opt[0])
- // assert(ntest);
-
- // unsigned short nFeatures=(*tf)[0][0].size();
- // struct svm_parameter param;
- // param.svm_type = svmMap[svm_type_opt[0]];
- // param.kernel_type = kernelMap[kernel_type_opt[0]];
- // param.degree = kernel_degree_opt[0];
- // param.gamma = gamma;
- // param.coef0 = coef0_opt[0];
- // param.nu = nu_opt[0];
- // param.cache_size = cache_opt[0];
- // param.C = ccost;
- // param.eps = epsilon_tol_opt[0];
- // param.p = epsilon_loss_opt[0];
- // param.shrinking = (shrinking_opt[0])? 1 : 0;
- // param.probability = (prob_est_opt[0])? 1 : 0;
- // param.nr_weight = 0;//not used: I use priors and balancing
- // param.weight_label = NULL;
- // param.weight = NULL;
- // param.verbose=(verbose_opt[0]>2)? true:false;
- // struct svm_model* svm;
- // struct svm_problem prob;
- // struct svm_node* x_space;
-
- // prob.l=ntraining;
- // prob.y = Malloc(double,prob.l);
- // prob.x = Malloc(struct svm_node *,prob.l);
- // x_space = Malloc(struct svm_node,(nFeatures+1)*ntraining);
- // unsigned long int spaceIndex=0;
- // int lIndex=0;
- // for(int iclass=0;iclass<nclass;++iclass){
- // // for(int isample=0;isample<(*tf)[iclass].size();++isample){
- // for(int isample=0;isample<nctraining[iclass];++isample){
- // prob.x[lIndex]=&(x_space[spaceIndex]);
- // for(int ifeature=0;ifeature<nFeatures;++ifeature){
- // x_space[spaceIndex].index=ifeature+1;
- // x_space[spaceIndex].value=(*tf)[iclass][isample][ifeature];
- // ++spaceIndex;
- // }
- // x_space[spaceIndex++].index=-1;
- // prob.y[lIndex]=iclass;
- // ++lIndex;
- // }
- // }
-
- // assert(lIndex==prob.l);
- // if(verbose_opt[0]>2)
- // std::cout << "checking parameters" << std::endl;
- // svm_check_parameter(&prob,¶m);
- // if(verbose_opt[0]>2)
- // std::cout << "parameters ok, training" << std::endl;
- // svm=svm_train(&prob,¶m);
- // if(verbose_opt[0]>2)
- // std::cout << "SVM is now trained" << std::endl;
-
- // ConfusionMatrix cm;
- // //set names in confusion matrix using nameVector
- // for(int iname=0;iname<nameVector.size();++iname){
- // if(classValueMap.empty())
- // cm.pushBackClassName(nameVector[iname]);
- // else if(cm.getClassIndex(type2string<short>(classValueMap[nameVector[iname]]))<0)
- // cm.pushBackClassName(type2string<short>(classValueMap[nameVector[iname]]));
- // }
- // if(cv_opt[0]>1){
- // double *target = Malloc(double,prob.l);
- // svm_cross_validation(&prob,¶m,cv_opt[0],target);
- // assert(param.svm_type != EPSILON_SVR&¶m.svm_type != NU_SVR);//only for regression
- // for(int i=0;i<prob.l;i++){
- // string refClassName=nameVector[prob.y[i]];
- // string className=nameVector[target[i]];
- // if(classValueMap.size())
- // cm.incrementResult(type2string<short>(classValueMap[refClassName]),type2string<short>(classValueMap[className]),1.0);
- // else
- // cm.incrementResult(cm.getClass(prob.y[i]),cm.getClass(target[i]),1.0);
- // }
- // free(target);
- // }
- // else{
- // struct svm_node *x_test;
- // x_test = Malloc(struct svm_node,(nFeatures+1));
- // for(int iclass=0;iclass<nclass;++iclass){
- // for(int isample=0;isample<nctest[iclass];++isample){
- // for(int ifeature=0;ifeature<nFeatures;++ifeature){
- // x_test[ifeature].index=ifeature+1;
- // x_test[ifeature].value=(*tf)[iclass][nctraining[iclass]+isample][ifeature];
- // }
- // x_test[nFeatures].index=-1;
- // double predict_label=0;
- // //todo: make distinction between svm_predict and svm_predict_probability?
- // predict_label = svm_predict(svm,x_test);
- // string refClassName=nameVector[iclass];
- // string className=nameVector[static_cast<short>(predict_label)];
- // if(classValueMap.size())
- // cm.incrementResult(type2string<short>(classValueMap[refClassName]),type2string<short>(classValueMap[className]),1.0);
- // else
- // cm.incrementResult(refClassName,className,1.0);
- // }
- // }
- // free(x_test);
- // }
- // if(verbose_opt[0]>1)
- // std::cout << cm << std::endl;
- // assert(cm.nReference());
- // free(prob.y);
- // free(prob.x);
- // free(x_space);
- // svm_free_and_destroy_model(&(svm));
- // if(verbose_opt[0]>2)
- // std::cout << cm << std::endl;
- // kappa=cm.kappa();
- // oa=cm.oa();
- // if(verbose_opt[0]>1){
- // std::cout << " --ccost " << x[0];
- // std::cout << " --gamma " << x[1];
- // std::cout << std::endl;
- // std::cout << "oa: " << oa << std::endl;
- // std::cout << "kappa: " << kappa << std::endl;
- // }
- // double cost=(costfunction_opt[0])? oa : kappa;
- // if(cost>0)
- // error=1.0/cost;
- // return(error);
}
int main(int argc, char *argv[])
@@ -276,7 +193,7 @@ int main(int argc, char *argv[])
Optionpk<double> offset_opt("\0", "offset", "offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band]", 0.0);
Optionpk<double> scale_opt("\0", "scale", "scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0)", 0.0);
Optionpk<unsigned int> maxit_opt("maxit","maxit","maximum number of iterations",500);
- Optionpk<string> algorithm_opt("a", "algorithm", "GRID, or any optimization algorithm from http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms","GRID");
+//Optionpk<string> algorithm_opt("a", "algorithm", "GRID, or any optimization algorithm from http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms","GRID");
Optionpk<double> tolerance_opt("tol","tolerance","relative tolerance for stopping criterion",0.0001);
input_opt.setHide(1);
@@ -304,7 +221,7 @@ int main(int argc, char *argv[])
costfunction_opt.setHide(1);
maxit_opt.setHide(1);
tolerance_opt.setHide(1);
- algorithm_opt.setHide(1);
+// algorithm_opt.setHide(1);
classname_opt.setHide(1);
classvalue_opt.setHide(1);
@@ -340,7 +257,7 @@ int main(int argc, char *argv[])
costfunction_opt.retrieveOption(argc,argv);
maxit_opt.retrieveOption(argc,argv);
tolerance_opt.retrieveOption(argc,argv);
- algorithm_opt.retrieveOption(argc,argv);
+// algorithm_opt.retrieveOption(argc,argv);
classname_opt.retrieveOption(argc,argv);
classvalue_opt.retrieveOption(argc,argv);
verbose_opt.retrieveOption(argc,argv);
@@ -657,7 +574,8 @@ int main(int argc, char *argv[])
assert(ccost_opt[2]<ccost_opt[1]);
std::vector<double> x(2);
- if(algorithm_opt[0]=="GRID"){
+// if(algorithm_opt[0]=="GRID"){
+ if (1){
// double minError=1000;
// double minCost=0;
// double minGamma=0;
@@ -697,53 +615,53 @@ int main(int argc, char *argv[])
x[0]=maxCost;
x[1]=maxGamma;
}
- else{
- nlopt::opt optimizer=OptFactory::getOptimizer(algorithm_opt[0],2);
- if(verbose_opt[0]>1)
- std::cout << "optimization algorithm: " << optimizer.get_algorithm_name() << "..." << std::endl;
- std::vector<double> lb(2);
- std::vector<double> init(2);
- std::vector<double> ub(2);
-
- lb[0]=ccost_opt[0];
- lb[1]=(gamma_opt[0]>0)? gamma_opt[0] : 1.0/trainingFeatures[0][0].size();
- init[0]=ccost_opt[2];
- init[1]=(gamma_opt[2]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();
- ub[0]=ccost_opt[1];
- ub[1]=(gamma_opt[1]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();
- // optimizer.set_min_objective(objFunction, &trainingFeatures);
- optimizer.set_max_objective(objFunction, &trainingFeatures);
- optimizer.set_lower_bounds(lb);
- optimizer.set_upper_bounds(ub);
- if(verbose_opt[0]>1)
- std::cout << "set stopping criteria" << std::endl;
- //set stopping criteria
- if(maxit_opt[0])
- optimizer.set_maxeval(maxit_opt[0]);
- else
- optimizer.set_xtol_rel(tolerance_opt[0]);
- double minf=0;
- x=init;
- try{
- optimizer.optimize(x, minf);
- }
- catch(string error){
- cerr << error << std::endl;
- exit(1);
- }
- catch (exception& e){
- cout << e.what() << endl;
- }
- catch(...){
- cerr << "error catched" << std::endl;
- exit(1);
- }
-
- double ccost=x[0];
- double gamma=x[1];
- if(verbose_opt[0])
- std::cout << "optimized with " << optimizer.get_algorithm_name() << "..." << std::endl;
- }
+ //else{
+ // nlopt::opt optimizer=OptFactory::getOptimizer(algorithm_opt[0],2);
+ // if(verbose_opt[0]>1)
+ // std::cout << "optimization algorithm: " << optimizer.get_algorithm_name() << "..." << std::endl;
+ // std::vector<double> lb(2);
+ // std::vector<double> init(2);
+ // std::vector<double> ub(2);
+
+ // lb[0]=ccost_opt[0];
+ // lb[1]=(gamma_opt[0]>0)? gamma_opt[0] : 1.0/trainingFeatures[0][0].size();
+ // init[0]=ccost_opt[2];
+ // init[1]=(gamma_opt[2]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();
+ // ub[0]=ccost_opt[1];
+ // ub[1]=(gamma_opt[1]>0)? gamma_opt[1] : 1.0/trainingFeatures[0][0].size();
+ // // optimizer.set_min_objective(objFunction, &trainingFeatures);
+ // optimizer.set_max_objective(objFunction, &trainingFeatures);
+ // optimizer.set_lower_bounds(lb);
+ // optimizer.set_upper_bounds(ub);
+ // if(verbose_opt[0]>1)
+ // std::cout << "set stopping criteria" << std::endl;
+ // //set stopping criteria
+ // if(maxit_opt[0])
+ // optimizer.set_maxeval(maxit_opt[0]);
+ // else
+ // optimizer.set_xtol_rel(tolerance_opt[0]);
+ // double minf=0;
+ // x=init;
+ // try{
+ // optimizer.optimize(x, minf);
+ // }
+ // catch(string error){
+ // cerr << error << std::endl;
+ // exit(1);
+ // }
+ // catch (exception& e){
+ // cout << e.what() << endl;
+ // }
+ // catch(...){
+ // cerr << "error catched" << std::endl;
+ // exit(1);
+ // }
+
+ // double ccost=x[0];
+ // double gamma=x[1];
+ // if(verbose_opt[0])
+ // std::cout << "optimized with " << optimizer.get_algorithm_name() << "..." << std::endl;
+ //}
std::cout << " --ccost " << x[0];
std::cout << " --gamma " << x[1];
std::cout << std::endl;
diff --git a/src/apps/pkpolygonize.cc b/src/apps/pkpolygonize.cc
index a60d96c..14da9eb 100644
--- a/src/apps/pkpolygonize.cc
+++ b/src/apps/pkpolygonize.cc
@@ -34,6 +34,45 @@ extern "C" {
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pkpolygonize pkpolygonize
+ program to make vector file from raster image
+## SYNOPSIS
+
+<code>
+ Usage: pkpolygonize -i input [-m mask] -o output
+</code>
+
+<code>
+
+ Options: [-f format] [-b band] [-n fieldname] [-nodata value]
+
+</code>
+
+\section pkpolygonize_description Description
+
+The utility pkpolygonize converts a raster to a vector dataset. All pixels in the mask band with a value other than zero will be considered suitable for collection as polygons. Use the same input file as mask to remove the background polygon (recommended).
+\section pkpolygonize_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file |
+ | m | mask | std::string | |All pixels in the mask band with a value other than zero will be considered suitable for collection as polygons. Use input file as mask to remove background polygon! |
+ | o | output | std::string | |Output vector file |
+ | f | f | std::string | SQLite |Output OGR file format |
+ | b | band | int | 0 |the band to be used from input file |
+ | nodata | nodata | double | |Disgard this nodata value when creating polygons. |
+ | n | name | std::string | DN |the field name of the output layer |
+
+Usage: pkpolygonize -i input [-m mask] -o output
+
+
+Examples
+========
+Some examples how to use pkpolygonize can be found \ref examples_pkpolygonize "here"
+**/
+
using namespace std;
int main(int argc,char **argv) {
diff --git a/src/apps/pkreclass.cc b/src/apps/pkreclass.cc
index b51e13c..d091b9c 100644
--- a/src/apps/pkreclass.cc
+++ b/src/apps/pkreclass.cc
@@ -25,6 +25,44 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
+/******************************************************************************/
+/*! \page pkreclass pkreclass
+ program to replace pixel values in raster image
+## SYNOPSIS
+
+<code>
+ Usage: pkreclass -i input [-c from -r to]* -o output
+</code>
+
+\section pkreclass_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image |
+ | m | mask | std::string | |Mask image(s) |
+ | msknodata | msknodata | unsigned short | 1 |Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask. |
+ | nodata | nodata | int | 0 |nodata value to put in image if not valid (0) |
+ | code | code | std::string | |Recode text file (2 colums: from to) |
+ | c | class | std::string | |list of classes to reclass (in combination with reclass option) |
+ | r | reclass | std::string | |list of recoded classes (in combination with class option) |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | o | output | std::string | |Output mask file |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | b | band | unsigned short | 0 |band index(es) to replace (other bands are copied to output) |
+ | n | fname | std::string | label |field name of the shape file to be replaced |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | d | description | std::string | |Set image description |
+ | v | verbose | short | 0 |verbose |
+
+Usage: pkreclass -i input [-c from -r to]* -o output
+
+
+Examples
+========
+Some examples how to use pkreclass can be found \ref examples_pkreclass "here"
+**/
+
using namespace std;
int main(int argc, char *argv[])
@@ -35,11 +73,11 @@ int main(int argc, char *argv[])
Optionpk<unsigned short> masknodata_opt("msknodata", "msknodata", "Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask.", 1);
Optionpk<int> nodata_opt("nodata", "nodata", "nodata value to put in image if not valid (0)", 0);
Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
- Optionpk<unsigned short> band_opt("b", "band", "band index to replace (other bands are copied to output)", 0);
+ Optionpk<unsigned short> band_opt("b", "band", "band index(es) to replace (other bands are copied to output)", 0);
Optionpk<string> type_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image", "");
Optionpk<string> code_opt("code", "code", "Recode text file (2 colums: from to)");
Optionpk<string> class_opt("c", "class", "list of classes to reclass (in combination with reclass option)");
- Optionpk<string> reclass_opt("r", "reclass", "list of recoded class(es) (in combination with class option)");
+ Optionpk<string> reclass_opt("r", "reclass", "list of recoded classes (in combination with class option)");
Optionpk<string> fieldname_opt("n", "fname", "field name of the shape file to be replaced", "label");
Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
Optionpk<string> description_opt("d", "description", "Set image description");
@@ -68,9 +106,13 @@ int main(int argc, char *argv[])
exit(0);
}
if(!doProcess){
+ cout << endl;
+ cout << "Usage: pkreclass -i input [-c from -r to]* -o output" << endl;
+ cout << endl;
std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
exit(0);//help was invoked, stop processing
}
+
if(input_opt.empty()){
std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl;
exit(0);
@@ -228,6 +270,7 @@ int main(int argc, char *argv[])
for(int imask=0;imask<mask_opt.size();++imask)
assert(maskReader[imask].isGeoRef());
}
+ outputWriter.copyGeoTransform(inputReader);
outputWriter.setProjection(inputReader.getProjection());
double ulx,uly,lrx,lry;
inputReader.getBoundingBox(ulx,uly,lrx,lry);
diff --git a/src/apps/pkregann.cc b/src/apps/pkregann.cc
index b350077..78aaa66 100644
--- a/src/apps/pkregann.cc
+++ b/src/apps/pkregann.cc
@@ -23,6 +23,50 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "fileclasses/FileReaderAscii.h"
#include "floatfann.h"
#include "algorithms/myfann_cpp.h"
+/******************************************************************************/
+/*! \page pkregann pkregann
+ regression with artificial neural network (multi-layer perceptron)
+## SYNOPSIS
+
+<code>
+ Usage: pkregann -i input -t training [-ic col]* [-oc col]* -o output
+</code>
+
+<code>
+
+ Options: [-from row] [-to row] [-cv size] [-nn number]
+
+ Advanced options: [--offset value] [--scale value] [--connection rate] [--learning rate] [--maxit number]
+</code>
+
+\section pkregann_description Description
+
+The utility pkregann performs a regression based on an artificial neural network. The regression is trained from the input (-ic) and output (-oc) columns in a training text file. Each row in the training file represents one sampling unit. Multi-dimensional input features can be defined with multiple input options (e.g., -ic 0 -ic 1 -ic 2 for three dimensional features).
+\section pkregann_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |input ASCII file |
+ | t | training | std::string | |training ASCII file (each row represents one sampling unit. Input features should be provided as columns, followed by output) |
+ | ic | inputCols | int | |input columns (e.g., for three dimensional input data in first three columns use: -ic 0 -ic 1 -ic 2 |
+ | oc | outputCols | int | |output columns (e.g., for two dimensional output in columns 3 and 4 (starting from 0) use: -oc 3 -oc 4 |
+ | o | output | std::string | |output ASCII file for result |
+ | from | from | double | 0 |start from this row in training file (start from 0) |
+ | to | to | double | 0 |read until this row in training file (start from 0 or set leave 0 as default to read until end of file) |
+ | cv | cv | unsigned short | 0 |n-fold cross validation mode |
+ | nn | nneuron | unsigned int | 5 |number of neurons in hidden layers in neural network (multiple hidden layers are set by defining multiple number of neurons: -n 15 -n 1, default is one hidden layer with 5 neurons) |
+ | | offset | double | 0 |offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | | connection | float | 1 |connection reate (default: 1.0 for a fully connected network) |
+ | l | learning | float | 0.7 |learning rate (default: 0.7) |
+ | | maxit | unsigned int | 500 |number of maximum iterations (epoch) (default: 500) |
+
+Usage: pkregann -i input -t training [-ic col]* [-oc col]* -o output
+
+
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pksetmask.cc b/src/apps/pksetmask.cc
index cc6f5a2..17587f6 100644
--- a/src/apps/pksetmask.cc
+++ b/src/apps/pksetmask.cc
@@ -22,6 +22,52 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "imageclasses/ImgReaderGdal.h"
#include "imageclasses/ImgWriterGdal.h"
#include "base/Optionpk.h"
+/******************************************************************************/
+/*! \page pksetmask pksetmask
+ program to apply mask image (set invalid values) to raster image
+## SYNOPSIS
+
+<code>
+ Usage: pksetmask -i input -m mask [-msknodata value] -o output
+</code>
+
+<code>
+
+ Options: [-min value]* [-max value]* [-data value]* [-nodata value]*
+
+ Advanced options: [-b band]* [--operator '<'|'='|'<'] [-ot type] [-of format] [-co option]* [-ct table]
+
+</code>
+
+\section pksetmask_description Description
+
+The utility pksetmask sets a mask provided with option -m to an input raster dataset. The default operator is '='. Values in the input raster data where the mask has a nodata value (set with the option -msknodata) will then be set to nodata (set with -nodata). Other operators are less than (--operator '<') and larger than (--operator '>').\section pksetmask_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image |
+ | m | mask | std::string | |Mask image(s) |
+ | msknodata | msknodata | int | 1 |Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask. |
+ | mskband | mskband | short | 0 |Mask band to read (0 indexed). Provide band for each mask. |
+ | o | output | std::string | |Output mask file |
+ | nodata | nodata | int | 0 |nodata value to put in image if not valid |
+ | p | operator | char | = |Operator: < = > !. Use operator for each msknodata option |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+
+Usage: pksetmask -i input -m mask [-msknodata value] -o output
+
+
+Examples
+========
+Some examples how to use pksetmask can be found \ref examples_pksetmask "here"
+FAQ
+========
+Frequently asked questions on pksetmask can be found \ref faq_pksetmask "here"
+**/
using namespace std;
@@ -35,6 +81,7 @@ int main(int argc, char *argv[])
Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image");
Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified.");
Optionpk<int> msknodata_opt("msknodata", "msknodata", "Mask value(s) where image has nodata. Use one value for each mask, or multiple values for a single mask.", 1);
+ Optionpk<short> mskband_opt("mskband", "mskband", "Mask band to read (0 indexed). Provide band for each mask.", 0);
Optionpk<char> operator_opt("p", "operator", "Operator: < = > !. Use operator for each msknodata option", '=');
Optionpk<int> nodata_opt("nodata", "nodata", "nodata value to put in image if not valid", 0);
Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
@@ -44,12 +91,14 @@ int main(int argc, char *argv[])
oformat_opt.setHide(1);
option_opt.setHide(1);
colorTable_opt.setHide(1);
+ mskband_opt.setHide(1);
bool doProcess;//stop process when program was invoked with help option (-h --help)
try{
doProcess=input_opt.retrieveOption(argc,argv);
mask_opt.retrieveOption(argc,argv);
msknodata_opt.retrieveOption(argc,argv);
+ mskband_opt.retrieveOption(argc,argv);
output_opt.retrieveOption(argc,argv);
nodata_opt.retrieveOption(argc,argv);
operator_opt.retrieveOption(argc,argv);
@@ -73,6 +122,11 @@ int main(int argc, char *argv[])
if(verbose_opt[0])
cout << "number of mask images: " << mask_opt.size() << endl;
+
+ //duplicate band used for mask if not explicitly provided
+ while(mskband_opt.size()<mask_opt.size())
+ mskband_opt.push_back(mskband_opt[0]);
+
vector<ImgReaderGdal> maskReader(mask_opt.size());
for(int imask=0;imask<mask_opt.size();++imask){
if(verbose_opt[0])
@@ -197,7 +251,7 @@ int main(int argc, char *argv[])
assert(rowMask>=0&&rowMask<maskReader[imask].nrOfRow());
try{
// maskReader[imask].readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));
- maskReader[imask].readData(lineMask[imask],GDT_Float64,static_cast<int>(rowMask));
+ maskReader[imask].readData(lineMask[imask],GDT_Float64,static_cast<int>(rowMask),mskband_opt[imask]);
}
catch(string errorstring){
cerr << errorstring << endl;
@@ -258,7 +312,7 @@ int main(int argc, char *argv[])
assert(rowMask>=0&&rowMask<maskReader[0].nrOfRow());
try{
// maskReader[0].readData(lineMask[0],GDT_Int32,static_cast<int>(rowMask));
- maskReader[0].readData(lineMask[0],GDT_Float64,static_cast<int>(rowMask));
+ maskReader[0].readData(lineMask[0],GDT_Float64,static_cast<int>(rowMask),mskband_opt[0]);
}
catch(string errorstring){
cerr << errorstring << endl;
diff --git a/src/apps/pksieve.cc b/src/apps/pksieve.cc
index 6dbf0de..12ffad0 100644
--- a/src/apps/pksieve.cc
+++ b/src/apps/pksieve.cc
@@ -29,6 +29,45 @@ extern "C" {
#include "gdal_alg.h"
#include "ogr_api.h"
}
+/******************************************************************************/
+/*! \page pksieve pksieve
+ program to sieve filter raster image
+## SYNOPSIS
+
+<code>
+ Usage: pksieve -i input [-s size] -o output
+</code>
+
+<code>
+
+ Options: [-c 4|8] [-b band] [-m mask] [-ot type] [-of format] [-co option]* [-ct table]
+
+</code>
+
+\section pksieve_description Description
+
+The utility pksieve filters small objects (maximum size defined with the option -s) in a raster by replacing them to the largest neighbor object. In this context, objects are defined as pixels of the same value that are also connected. The connection can be defined in four directions (N-S and W-E: set option -c 4) or eight directions (N-S, W-E and diagonals NW-SE, NE-SW: set option -c 8).\section pksieve_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input image file |
+ | s | size | int | 0 |raster polygons with sizes smaller than this will be merged into their largest neighbour. No sieve is performed if size = 0 |
+ | o | output | std::string | |Output image file |
+ | c | connect | int | 8 |the connectedness: 4 directions or 8 directions |
+ | b | band | int | 0 |the band to be used from input file |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask (zero is invalid, non-zero is valid). |
+ | ot | otype | std::string | |Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ct | ct | std::string | |color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+
+Usage: pksieve -i input [-s size] -o output
+
+
+Examples
+========
+Some examples how to use pksieve can be found \ref examples_pksieve "here"
+**/
using namespace std;
diff --git a/src/apps/pkstat.cc b/src/apps/pkstat.cc
index 5caa40a..9bf5eef 100644
--- a/src/apps/pkstat.cc
+++ b/src/apps/pkstat.cc
@@ -23,6 +23,58 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "algorithms/StatFactory.h"
#include "algorithms/ImgRegression.h"
+/******************************************************************************/
+/*! \page pkstat pkstat
+ program to calculate basic statistics from raster dataset
+## SYNOPSIS
+
+<code>
+ Usage: pkstat -i input
+</code>
+
+\section pkstat_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |name of the input raster dataset |
+ | b | band | unsigned short | 0 |band(s) on which to calculate statistics |
+ | f | filename | bool | false |Shows image filename |
+ | stats | statistics | bool | false |Shows basic statistics (min,max, mean and stdDev of the raster datasets) |
+ | nodata | nodata | double | |Set nodata value(s) |
+ | mean | mean | bool | false |calculate mean |
+ | median | median | bool | false |calculate median |
+ | var | var | bool | false |calculate variance |
+ | stdev | stdev | bool | false |calculate standard deviation |
+ | mm | minmax | bool | false |calculate minimum and maximum value |
+ | min | min | bool | false |calculate minimum value |
+ | max | max | bool | false |calculate maximum value |
+ | hist | hist | bool | false |calculate histogram |
+ | nbin | nbin | short | |number of bins to calculate histogram |
+ | rel | relative | bool | false |use percentiles for histogram to calculate histogram |
+ | hist2d | hist2d | bool | false |calculate 2-dimensional histogram based on two images |
+ | cor | correlation | bool | false |calculate Pearson produc-moment correlation coefficient between two raster datasets (defined by -c <col1> -c <col2>) |
+ | rmse | rmse | bool | false |calculate root mean square error between two raster datasets |
+ | reg | regression | bool | false |calculate linear regression between two raster datasets and get correlation coefficient |
+ | regerr | regerr | bool | false |calculate linear regression between two raster datasets and get root mean square error |
+ | preg | preg | bool | false |calculate perpendicular regression between two raster datasets and get correlation coefficient |
+ | ulx | ulx | double | |Upper left x value bounding box |
+ | uly | uly | double | |Upper left y value bounding box |
+ | lrx | lrx | double | |Lower right x value bounding box |
+ | lry | lry | double | |Lower right y value bounding box |
+ | down | down | short | 1 |Down sampling factor (for raster sample datasets only). Can be used to create grid points |
+ | rnd | rnd | unsigned int | 0 |generate random numbers |
+ | scale | scale | double | |Scale(s) for reading input image(s) |
+ | offset | offset | double | |Offset(s) for reading input image(s) |
+ | src_min | src_min | double | |start reading source from this minimum value |
+ | src_max | src_max | double | |stop reading source from this maximum value |
+ | kde | kde | bool | false |Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb |
+
+Usage: pkstat -i input
+
+
+**/
+
using namespace std;
int main(int argc, char *argv[])
@@ -38,12 +90,14 @@ int main(int argc, char *argv[])
Optionpk<double> nodata_opt("nodata","nodata","Set nodata value(s)");
Optionpk<short> down_opt("down", "down", "Down sampling factor (for raster sample datasets only). Can be used to create grid points", 1);
Optionpk<unsigned int> random_opt("rnd", "rnd", "generate random numbers", 0);
+ Optionpk<double> scale_opt("scale", "scale", "Scale(s) for reading input image(s)");
+ Optionpk<double> offset_opt("offset", "offset", "Offset(s) for reading input image(s)");
// Optionpk<bool> transpose_opt("t","transpose","transpose output",false);
// Optionpk<std::string> randdist_opt("dist", "dist", "distribution for generating random numbers, see http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320 (only uniform and Gaussian supported yet)", "gaussian");
// Optionpk<double> randa_opt("rnda", "rnda", "first parameter for random distribution (mean value in case of Gaussian)", 0);
// Optionpk<double> randb_opt("rndb", "rndb", "second parameter for random distribution (standard deviation in case of Gaussian)", 1);
- Optionpk<bool> mean_opt("mean","mean","calculate median",false);
+ Optionpk<bool> mean_opt("mean","mean","calculate mean",false);
Optionpk<bool> median_opt("median","median","calculate median",false);
Optionpk<bool> var_opt("var","var","calculate variance",false);
Optionpk<bool> skewness_opt("skew","skewness","calculate skewness",false);
@@ -60,16 +114,23 @@ int main(int argc, char *argv[])
Optionpk<short> nbin_opt("nbin","nbin","number of bins to calculate histogram");
Optionpk<bool> relative_opt("rel","relative","use percentiles for histogram to calculate histogram",false);
Optionpk<bool> kde_opt("kde","kde","Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb",false);
- Optionpk<bool> correlation_opt("cor","correlation","calculate Pearson produc-moment correlation coefficient between two raster datasets (defined by -c <col1> -c <col2>",false);
Optionpk<bool> rmse_opt("rmse","rmse","calculate root mean square error between two raster datasets",false);
Optionpk<bool> reg_opt("reg","regression","calculate linear regression between two raster datasets and get correlation coefficient",false);
Optionpk<bool> regerr_opt("regerr","regerr","calculate linear regression between two raster datasets and get root mean square error",false);
Optionpk<bool> preg_opt("preg","preg","calculate perpendicular regression between two raster datasets and get correlation coefficient",false);
- Optionpk<bool> pregerr_opt("pregerr","pregerr","calculate perpendicular regression between two raster datasets and get root mean square error",false);
Optionpk<short> verbose_opt("v", "verbose", "verbose mode when positive", 0,2);
-
+ ulx_opt.setHide(1);
+ uly_opt.setHide(1);
+ lrx_opt.setHide(1);
+ lry_opt.setHide(1);
+ down_opt.setHide(1);
+ random_opt.setHide(1);
+ scale_opt.setHide(1);
+ offset_opt.setHide(1);
src_min_opt.setHide(1);
src_max_opt.setHide(1);
+ kde_opt.setHide(1);
+
// range_opt.setHide(1);
// transpose_opt.setHide(1);
@@ -81,43 +142,34 @@ int main(int argc, char *argv[])
band_opt.retrieveOption(argc,argv);
filename_opt.retrieveOption(argc,argv);
stat_opt.retrieveOption(argc,argv);
- ulx_opt.retrieveOption(argc,argv);
- uly_opt.retrieveOption(argc,argv);
- lrx_opt.retrieveOption(argc,argv);
- lry_opt.retrieveOption(argc,argv);
nodata_opt.retrieveOption(argc,argv);
- down_opt.retrieveOption(argc,argv);
- random_opt.retrieveOption(argc,argv);
- // randdist_opt.retrieveOption(argc,argv);
- // randa_opt.retrieveOption(argc,argv);
- // randb_opt.retrieveOption(argc,argv);
mean_opt.retrieveOption(argc,argv);
median_opt.retrieveOption(argc,argv);
var_opt.retrieveOption(argc,argv);
stdev_opt.retrieveOption(argc,argv);
- // skewness_opt.retrieveOption(argc,argv);
- // kurtosis_opt.retrieveOption(argc,argv);
- // sum_opt.retrieveOption(argc,argv);
minmax_opt.retrieveOption(argc,argv);
min_opt.retrieveOption(argc,argv);
max_opt.retrieveOption(argc,argv);
histogram_opt.retrieveOption(argc,argv);
nbin_opt.retrieveOption(argc,argv);
relative_opt.retrieveOption(argc,argv);
- kde_opt.retrieveOption(argc,argv);
histogram2d_opt.retrieveOption(argc,argv);
- correlation_opt.retrieveOption(argc,argv);
rmse_opt.retrieveOption(argc,argv);
reg_opt.retrieveOption(argc,argv);
regerr_opt.retrieveOption(argc,argv);
preg_opt.retrieveOption(argc,argv);
- pregerr_opt.retrieveOption(argc,argv);
//advanced options
+ ulx_opt.retrieveOption(argc,argv);
+ uly_opt.retrieveOption(argc,argv);
+ lrx_opt.retrieveOption(argc,argv);
+ lry_opt.retrieveOption(argc,argv);
+ down_opt.retrieveOption(argc,argv);
+ random_opt.retrieveOption(argc,argv);
+ scale_opt.retrieveOption(argc,argv);
+ offset_opt.retrieveOption(argc,argv);
src_min_opt.retrieveOption(argc,argv);
src_max_opt.retrieveOption(argc,argv);
- // range_opt.retrieveOption(argc,argv);
- // transpose_opt.retrieveOption(argc,argv);
- // comment_opt.retrieveOption(argc,argv);
+ kde_opt.retrieveOption(argc,argv);
verbose_opt.retrieveOption(argc,argv);
}
catch(string predefinedString){
@@ -126,7 +178,7 @@ int main(int argc, char *argv[])
}
if(!doProcess){
cout << endl;
- cout << "Usage: pkstat -i input [-c column]*" << endl;
+ cout << "Usage: pkstat -i input" << endl;
cout << endl;
std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
exit(0);//help was invoked, stop processing
@@ -159,8 +211,19 @@ int main(int argc, char *argv[])
statfactory::StatFactory stat;
imgregression::ImgRegression imgreg;
+ std::vector<double> histogramOutput;
+ double nsample=0;
ImgReaderGdal imgReader;
+
+ if(scale_opt.size()){
+ while(scale_opt.size()<input_opt.size())
+ scale_opt.push_back(scale_opt[0]);
+ }
+ if(offset_opt.size()){
+ while(offset_opt.size()<input_opt.size())
+ offset_opt.push_back(offset_opt[0]);
+ }
if(input_opt.empty()){
std::cerr << "No image dataset provided (use option -i). Use --help for help information";
exit(0);
@@ -173,43 +236,56 @@ int main(int argc, char *argv[])
std::cout << errorstring << std::endl;
exit(0);
}
- for(int inodata=0;inodata<nodata_opt.size();++inodata){
- if(!inodata)
- imgReader.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
- imgReader.pushNoDataValue(nodata_opt[inodata]);
- }
+
if(filename_opt[0])
std::cout << " --input " << input_opt[ifile] << " ";
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata)
+ imgReader.pushNoDataValue(nodata_opt[inodata]);
+
int nband=band_opt.size();
for(int iband=0;iband<nband;++iband){
- if(stat_opt[0]||mean_opt[0]||var_opt[0]||stdev_opt[0]){
- assert(band_opt[iband]<imgReader.nrOfBand());
- GDALProgressFunc pfnProgress;
- void* pProgressData;
- GDALRasterBand* rasterBand;
-
- rasterBand=imgReader.getRasterBand(band_opt[iband]);
- rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);
- if(mean_opt[0])
- std::cout << "--mean " << meanValue << " ";
- if(stdev_opt[0])
- std::cout << "--stdDev " << stdDev << " ";
- if(var_opt[0])
- std::cout << "--var " << stdDev*stdDev << " ";
- if(stat_opt[0])
- std::cout << "-min " << minValue << " -max " << maxValue << " --mean " << meanValue << " --stdDev " << stdDev << " ";
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata){
+ if(!inodata)
+ imgReader.GDALSetNoDataValue(nodata_opt[0],band_opt[iband]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
}
+ if(offset_opt.size()>ifile)
+ imgReader.setOffset(offset_opt[ifile],band_opt[iband]);
+ if(scale_opt.size()>ifile)
+ imgReader.setScale(scale_opt[ifile],band_opt[iband]);
+
+ // if(stat_opt[0]||mean_opt[0]||var_opt[0]||stdev_opt[0]){
+ // assert(band_opt[iband]<imgReader.nrOfBand());
+ // GDALProgressFunc pfnProgress;
+ // void* pProgressData;
+ // GDALRasterBand* rasterBand;
+ // rasterBand=imgReader.getRasterBand(band_opt[iband]);
+ // rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);
+
+ // if(mean_opt[0])
+ // std::cout << "--mean " << meanValue << " ";
+ // if(stdev_opt[0])
+ // std::cout << "--stdDev " << stdDev << " ";
+ // if(var_opt[0])
+ // std::cout << "--var " << stdDev*stdDev << " ";
+ // if(stat_opt[0])
+ // std::cout << "-min " << minValue << " -max " << maxValue << " --mean " << meanValue << " --stdDev " << stdDev << " ";
+ // }
+
if(minmax_opt[0]||min_opt[0]||max_opt[0]){
assert(band_opt[iband]<imgReader.nrOfBand());
+
if((ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size())&&(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){
double uli,ulj,lri,lrj;
imgReader.geo2image(ulx_opt[0],uly_opt[0],uli,ulj);
imgReader.geo2image(lrx_opt[0],lry_opt[0],lri,lrj);
imgReader.getMinMax(static_cast<int>(uli),static_cast<int>(lri),static_cast<int>(ulj),static_cast<int>(lrj),band_opt[iband],minValue,maxValue);
}
- else
+ else{
imgReader.getMinMax(minValue,maxValue,band_opt[iband],true);
+ }
if(minmax_opt[0])
std::cout << "-min " << minValue << " -max " << maxValue << " ";
else{
@@ -220,7 +296,7 @@ int main(int argc, char *argv[])
}
}
}
- if(histogram_opt[0]){//only for first selected band
+ if(histogram_opt[0]){//aggregate results from multiple inputs, but only calculate for first selected band
assert(band_opt[0]<imgReader.nrOfBand());
nbin=(nbin_opt.size())? nbin_opt[0]:0;
@@ -234,26 +310,28 @@ int main(int argc, char *argv[])
if(verbose_opt[0])
cout << "number of valid pixels in image: " << imgReader.getNvalid(band_opt[0]) << endl;
- std::vector<double> output;
- double nsample=imgReader.getHistogram(output,minValue,maxValue,nbin,band_opt[0],kde_opt[0]);
-
- std::cout.precision(10);
- for(int bin=0;bin<nbin;++bin){
- double binValue=0;
- if(nbin==maxValue-minValue+1)
- binValue=minValue+bin;
- else
- binValue=minValue+static_cast<double>(maxValue-minValue)*(bin+0.5)/nbin;
- std::cout << binValue << " ";
- if(relative_opt[0]||kde_opt[0])
- std::cout << 100.0*static_cast<double>(output[bin])/static_cast<double>(nsample) << std::endl;
- else
- std::cout << static_cast<double>(output[bin]) << std::endl;
+
+ nsample+=imgReader.getHistogram(histogramOutput,minValue,maxValue,nbin,band_opt[0],kde_opt[0]);
+
+ //only output for last input file
+ if(ifile==input_opt.size()-1){
+ std::cout.precision(10);
+ for(int bin=0;bin<nbin;++bin){
+ double binValue=0;
+ if(nbin==maxValue-minValue+1)
+ binValue=minValue+bin;
+ else
+ binValue=minValue+static_cast<double>(maxValue-minValue)*(bin+0.5)/nbin;
+ std::cout << binValue << " ";
+ if(relative_opt[0]||kde_opt[0])
+ std::cout << 100.0*static_cast<double>(histogramOutput[bin])/static_cast<double>(nsample) << std::endl;
+ else
+ std::cout << static_cast<double>(histogramOutput[bin]) << std::endl;
+ }
}
}
- if(histogram2d_opt[0]){
- if(band_opt.size()<2)
- continue;
+ if(histogram2d_opt[0]&&input_opt.size()<2){
+ assert(band_opt.size()>1);
imgReader.getMinMax(minX,maxX,band_opt[0]);
imgReader.getMinMax(minY,maxY,band_opt[1]);
if(src_min_opt.size()){
@@ -418,7 +496,7 @@ int main(int argc, char *argv[])
}
}
}
- if(reg_opt[0]){
+ if(reg_opt[0]&&input_opt.size()<2){
if(band_opt.size()<2)
continue;
imgreg.setDown(down_opt[0]);
@@ -428,7 +506,7 @@ int main(int argc, char *argv[])
double r2=imgreg.getR2(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);
std::cout << "-c0 " << c0 << " -c1 " << c1 << " -r2 " << r2 << std::endl;
}
- if(regerr_opt[0]){
+ if(regerr_opt[0]&&input_opt.size()<2){
if(band_opt.size()<2)
continue;
imgreg.setDown(down_opt[0]);
@@ -438,7 +516,7 @@ int main(int argc, char *argv[])
double err=imgreg.getRMSE(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);
std::cout << "-c0 " << c0 << " -c1 " << c1 << " -rmse " << err << std::endl;
}
- if(rmse_opt[0]){
+ if(rmse_opt[0]&&input_opt.size()<2){
if(band_opt.size()<2)
continue;
imgreg.setDown(down_opt[0]);
@@ -448,7 +526,7 @@ int main(int argc, char *argv[])
double err=imgreg.getRMSE(imgReader,band_opt[0],band_opt[1],c0,c1,verbose_opt[0]);
std::cout << " -rmse " << err << std::endl;
}
- if(preg_opt[0]){
+ if(preg_opt[0]&&input_opt.size()<2){
if(band_opt.size()<2)
continue;
imgreg.setDown(down_opt[0]);
@@ -461,64 +539,172 @@ int main(int argc, char *argv[])
imgReader.close();
}
if(reg_opt[0]&&(input_opt.size()>1)){
- while(band_opt.size()<input_opt.size())
- band_opt.push_back(band_opt[0]);
imgreg.setDown(down_opt[0]);
imgreg.setThreshold(random_opt[0]);
double c0=0;//offset
double c1=1;//scale
+ while(band_opt.size()<input_opt.size())
+ band_opt.push_back(band_opt[0]);
+ if(src_min_opt.size()){
+ while(src_min_opt.size()<input_opt.size())
+ src_min_opt.push_back(src_min_opt[0]);
+ }
+ if(src_max_opt.size()){
+ while(src_max_opt.size()<input_opt.size())
+ src_max_opt.push_back(src_max_opt[0]);
+ }
ImgReaderGdal imgReader1(input_opt[0]);
ImgReaderGdal imgReader2(input_opt[1]);
+
+ if(offset_opt.size())
+ imgReader1.setOffset(offset_opt[0],band_opt[0]);
+ if(scale_opt.size())
+ imgReader1.setScale(scale_opt[0],band_opt[0]);
+ if(offset_opt.size()>1)
+ imgReader2.setOffset(offset_opt[1],band_opt[1]);
+ if(scale_opt.size()>1)
+ imgReader2.setScale(scale_opt[1],band_opt[1]);
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata){
+ if(!inodata){
+ imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ }
+ imgReader1.pushNoDataValue(nodata_opt[inodata]);
+ imgReader2.pushNoDataValue(nodata_opt[inodata]);
+ }
+
double r2=imgreg.getR2(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);
std::cout << "-c0 " << c0 << " -c1 " << c1 << " -r2 " << r2 << std::endl;
imgReader1.close();
imgReader2.close();
}
if(preg_opt[0]&&(input_opt.size()>1)){
- while(band_opt.size()<input_opt.size())
- band_opt.push_back(band_opt[0]);
imgreg.setDown(down_opt[0]);
imgreg.setThreshold(random_opt[0]);
double c0=0;//offset
double c1=1;//scale
+ while(band_opt.size()<input_opt.size())
+ band_opt.push_back(band_opt[0]);
+ if(src_min_opt.size()){
+ while(src_min_opt.size()<input_opt.size())
+ src_min_opt.push_back(src_min_opt[0]);
+ }
+ if(src_max_opt.size()){
+ while(src_max_opt.size()<input_opt.size())
+ src_max_opt.push_back(src_max_opt[0]);
+ }
ImgReaderGdal imgReader1(input_opt[0]);
ImgReaderGdal imgReader2(input_opt[1]);
+
+ if(offset_opt.size())
+ imgReader1.setOffset(offset_opt[0],band_opt[0]);
+ if(scale_opt.size())
+ imgReader1.setScale(scale_opt[0],band_opt[0]);
+ if(offset_opt.size()>1)
+ imgReader2.setOffset(offset_opt[1],band_opt[1]);
+ if(scale_opt.size()>1)
+ imgReader2.setScale(scale_opt[1],band_opt[1]);
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata){
+ if(!inodata){
+ imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ }
+ imgReader1.pushNoDataValue(nodata_opt[inodata]);
+ imgReader2.pushNoDataValue(nodata_opt[inodata]);
+ }
+
double r2=imgreg.pgetR2(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);
std::cout << "-c0 " << c0 << " -c1 " << c1 << " -r2 " << r2 << std::endl;
imgReader1.close();
imgReader2.close();
}
if(regerr_opt[0]&&(input_opt.size()>1)){
- while(band_opt.size()<input_opt.size())
- band_opt.push_back(band_opt[0]);
imgreg.setDown(down_opt[0]);
imgreg.setThreshold(random_opt[0]);
double c0=0;//offset
double c1=1;//scale
+ while(band_opt.size()<input_opt.size())
+ band_opt.push_back(band_opt[0]);
+ if(src_min_opt.size()){
+ while(src_min_opt.size()<input_opt.size())
+ src_min_opt.push_back(src_min_opt[0]);
+ }
+ if(src_max_opt.size()){
+ while(src_max_opt.size()<input_opt.size())
+ src_max_opt.push_back(src_max_opt[0]);
+ }
ImgReaderGdal imgReader1(input_opt[0]);
ImgReaderGdal imgReader2(input_opt[1]);
+
+ if(offset_opt.size())
+ imgReader1.setOffset(offset_opt[0],band_opt[0]);
+ if(scale_opt.size())
+ imgReader1.setScale(scale_opt[0],band_opt[0]);
+ if(offset_opt.size()>1)
+ imgReader2.setOffset(offset_opt[1],band_opt[1]);
+ if(scale_opt.size()>1)
+ imgReader2.setScale(scale_opt[1],band_opt[1]);
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata){
+ if(!inodata){
+ imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ }
+ imgReader1.pushNoDataValue(nodata_opt[inodata]);
+ imgReader2.pushNoDataValue(nodata_opt[inodata]);
+ }
+
double err=imgreg.getRMSE(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);
std::cout << "-c0 " << c0 << " -c1 " << c1 << " -rmse " << err << std::endl;
imgReader1.close();
imgReader2.close();
}
if(rmse_opt[0]&&(input_opt.size()>1)){
- while(band_opt.size()<input_opt.size())
- band_opt.push_back(band_opt[0]);
imgreg.setDown(down_opt[0]);
imgreg.setThreshold(random_opt[0]);
double c0=0;//offset
double c1=1;//scale
+ while(band_opt.size()<input_opt.size())
+ band_opt.push_back(band_opt[0]);
+ if(src_min_opt.size()){
+ while(src_min_opt.size()<input_opt.size())
+ src_min_opt.push_back(src_min_opt[0]);
+ }
+ if(src_max_opt.size()){
+ while(src_max_opt.size()<input_opt.size())
+ src_max_opt.push_back(src_max_opt[0]);
+ }
ImgReaderGdal imgReader1(input_opt[0]);
ImgReaderGdal imgReader2(input_opt[1]);
+
+ if(offset_opt.size())
+ imgReader1.setOffset(offset_opt[0],band_opt[0]);
+ if(scale_opt.size())
+ imgReader1.setScale(scale_opt[0],band_opt[0]);
+ if(offset_opt.size()>1)
+ imgReader2.setOffset(offset_opt[1],band_opt[1]);
+ if(scale_opt.size()>1)
+ imgReader2.setScale(scale_opt[1],band_opt[1]);
+
+ for(int inodata=0;inodata<nodata_opt.size();++inodata){
+ if(!inodata){
+ imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ }
+ imgReader1.pushNoDataValue(nodata_opt[inodata]);
+ imgReader2.pushNoDataValue(nodata_opt[inodata]);
+ }
+
double err=imgreg.getRMSE(imgReader1,imgReader2,c0,c1,band_opt[0],band_opt[1],verbose_opt[0]);
std::cout << "-rmse " << err << std::endl;
imgReader1.close();
imgReader2.close();
}
if(histogram2d_opt[0]&&(input_opt.size()>1)){
- imgReader.getMinMax(minX,maxX,band_opt[0]);
- imgReader.getMinMax(minY,maxY,band_opt[1]);
+ while(band_opt.size()<input_opt.size())
+ band_opt.push_back(band_opt[0]);
if(src_min_opt.size()){
while(src_min_opt.size()<input_opt.size())
src_min_opt.push_back(src_min_opt[0]);
@@ -527,25 +713,47 @@ int main(int argc, char *argv[])
while(src_max_opt.size()<input_opt.size())
src_max_opt.push_back(src_max_opt[0]);
}
- if(src_min_opt.size()){
- minX=src_min_opt[0];
- minY=src_min_opt[1];
- }
- if(src_max_opt.size()){
- maxX=src_max_opt[0];
- maxY=src_max_opt[1];
- }
- nbin=(nbin_opt.size())? nbin_opt[0]:0;
ImgReaderGdal imgReader1(input_opt[0]);
ImgReaderGdal imgReader2(input_opt[1]);
+
+ if(offset_opt.size())
+ imgReader1.setOffset(offset_opt[0],band_opt[0]);
+ if(scale_opt.size())
+ imgReader1.setScale(scale_opt[0],band_opt[0]);
+ if(offset_opt.size()>1)
+ imgReader2.setOffset(offset_opt[1],band_opt[1]);
+ if(scale_opt.size()>1)
+ imgReader2.setScale(scale_opt[1],band_opt[1]);
+
for(int inodata=0;inodata<nodata_opt.size();++inodata){
if(!inodata){
imgReader1.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
- imgReader2.GDALSetNoDataValue(nodata_opt[0],band_opt[0]);//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
+ imgReader2.GDALSetNoDataValue(nodata_opt[0]),band_opt[1];//only single no data can be set in GDALRasterBand (used for ComputeStatistics)
}
imgReader1.pushNoDataValue(nodata_opt[inodata]);
imgReader2.pushNoDataValue(nodata_opt[inodata]);
}
+
+ imgReader1.getMinMax(minX,maxX,band_opt[0]);
+ imgReader2.getMinMax(minY,maxY,band_opt[1]);
+
+ if(verbose_opt[0]){
+ cout << "minX: " << minX << endl;
+ cout << "maxX: " << maxX << endl;
+ cout << "minY: " << minY << endl;
+ cout << "maxY: " << maxY << endl;
+ }
+
+ if(src_min_opt.size()){
+ minX=src_min_opt[0];
+ minY=src_min_opt[1];
+ }
+ if(src_max_opt.size()){
+ maxX=src_max_opt[0];
+ maxY=src_max_opt[1];
+ }
+
+ nbin=(nbin_opt.size())? nbin_opt[0]:0;
if(nbin<=1){
std::cerr << "Warning: number of bins not defined, calculating bins from min and max value" << std::endl;
// imgReader1.getMinMax(minX,maxX,band_opt[0]);
@@ -574,7 +782,7 @@ int main(int argc, char *argv[])
rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev1,pfnProgress,pProgressData);
rasterBand=imgReader2.getRasterBand(band_opt[0]);
rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev2,pfnProgress,pProgressData);
-
+
//todo: think of smarter way how to estimate size (nodata!)
double estimatedSize=1.0*imgReader.getNvalid(band_opt[0])/down_opt[0]/down_opt[0];
if(random_opt[0]>0)
@@ -595,7 +803,7 @@ int main(int argc, char *argv[])
if(maxX<=minX)
imgReader1.getMinMax(minX,maxX,band_opt[0]);
if(maxY<=minY)
- imgReader2.getMinMax(minY,maxY,band_opt[0]);
+ imgReader2.getMinMax(minY,maxY,band_opt[1]);
if(maxX<=minX){
std::ostringstream s;
@@ -638,7 +846,7 @@ int main(int argc, char *argv[])
imgReader2.geo2image(geoX,geoY,icol2,irow2);
irow2=static_cast<int>(irow2);
imgReader1.readData(inputX,GDT_Float64,irow1,band_opt[0]);
- imgReader2.readData(inputY,GDT_Float64,irow2,band_opt[0]);
+ imgReader2.readData(inputY,GDT_Float64,irow2,band_opt[1]);
for(int icol=0;icol<imgReader.nrOfCol();++icol){
if(icol%down_opt[0])
continue;
diff --git a/src/apps/pkstatascii.cc b/src/apps/pkstatascii.cc
index 5e5e0aa..d7ae18d 100644
--- a/src/apps/pkstatascii.cc
+++ b/src/apps/pkstatascii.cc
@@ -24,6 +24,69 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "fileclasses/FileReaderAscii.h"
#include "algorithms/StatFactory.h"
+/******************************************************************************/
+/*! \page pkstatascii pkstatascii
+ program to calculate basic statistics from text file
+## SYNOPSIS
+
+<code>
+ Usage: pkstatascii -i input [-c column]*
+</code>
+
+<code>
+
+ Options: [-size] [-rnd number [-dist function] [-rnda value -rndb value]] [-mean] [-median] [-var] [-skew] [-stdev] [-sum] [-mm] [-min] [-max] [-hist [-nbin value] [-rel] [-kde]] [-hist2d [-nbin value] [-rel] [-kde]] [-cor] [-rmse] [-reg] [-regerr]
+
+ Advanced options: [-srcmin value] [-srcmax value] [-fs separator] [-r startrow [-r endrow]] [-o [-t]] [--comment character]
+
+</code>
+
+\section pkstatascii_description Description
+
+The utility pkstatascii calculates basic statistics of a data series in a text file.\section pkstatascii_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |name of the input text file |
+ | c | column | int | 0 |column nr, starting from 0 |
+ | size | size | bool | false |sample size |
+ | rnd | rnd | unsigned int | 0 |generate random numbers |
+ | dist | dist | std::string | gaussian |distribution for generating random numbers, see http://www.gn/software/gsl/manual/gsl-ref_toc.html#TOC320 (only uniform and Gaussian supported yet) |
+ | rnda | rnda | double | 0 |first parameter for random distribution (mean value in case of Gaussian) |
+ | rndb | rndb | double | 1 |second parameter for random distribution (standard deviation in case of Gaussian) |
+ | mean | mean | bool | false |calculate median |
+ | median | median | bool | false |calculate median |
+ | var | var | bool | false |calculate variance |
+ | stdev | stdev | bool | false |calculate standard deviation |
+ | skew | skewness | bool | false |calculate skewness |
+ | kurt | kurtosis | bool | false |calculate kurtosis |
+ | sum | sum | bool | false |calculate sum of column |
+ | mm | minmax | bool | false |calculate minimum and maximum value |
+ | min | min | bool | false |calculate minimum value |
+ | max | max | bool | false |calculate maximum value |
+ | hist | hist | bool | false |calculate histogram |
+ | nbin | nbin | short | |number of bins to calculate histogram |
+ | rel | relative | bool | false |use percentiles for histogram to calculate histogram |
+ | kde | kde | bool | false |Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb |
+ | hist2d | hist2d | bool | false |calculate 2-dimensional histogram based on two columns |
+ | cor | correlation | bool | false |calculate Pearson produc-moment correlation coefficient between two columns (defined by -c <col1> -c <col2> |
+ | rmse | rmse | bool | false |calculate root mean square error between two columns (defined by -c <col1> -c <col2> |
+ | reg | regression | bool | false |calculate linear regression between two columns and get correlation coefficient (defined by -c <col1> -c <col2> |
+ | regerr | regerr | bool | false |calculate linear regression between two columns and get root mean square error (defined by -c <col1> -c <col2> |
+ | src_min | src_min | double | |start reading source from this minimum value |
+ | src_max | src_max | double | |stop reading source from this maximum value |
+ | fs | fs | char | |field separator. |
+ | r | range | int | 0 |rows to start/end reading. Use -r 1 -r 10 to read first 10 rows where first row is header. Use 0 to read all rows with no header. |
+ | o | output | bool | false |output the selected columns |
+ | t | transpose | bool | false |transpose input ascii vector (use in combination with --output) |
+ | comment | comment | char | # |comment character |
+
+Usage: pkstatascii -i input [-c column]*
+
+
+**/
+
using namespace std;
int main(int argc, char *argv[])
diff --git a/src/apps/pkstatogr.cc b/src/apps/pkstatogr.cc
index c646d07..28e7c96 100644
--- a/src/apps/pkstatogr.cc
+++ b/src/apps/pkstatogr.cc
@@ -24,6 +24,53 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "base/Optionpk.h"
#include "imageclasses/ImgReaderOgr.h"
#include "algorithms/StatFactory.h"
+/******************************************************************************/
+/*! \page pkstatogr pkstatogr
+ program to calculate basic statistics from vector file
+## SYNOPSIS
+
+<code>
+ Usage: pkstatogr -i input [-n attribute]*
+</code>
+
+<code>
+
+ Options: [-ln layer]* [-n attribute]* [srcnodata]* [src_min] [src_max] [-s] [-mm] [-min] [-max] [-mean] [-median] [-stdev] [-hist] [-nbin] [-rel] [-kde]
+</code>
+
+\section pkstatogr_description Description
+
+The utility pkstatogr calculates basic statistics on attributes of a vector file. Examples of the basic statistics include: minimum, maximum, median, mean and standard deviation. Histograms (in percentage or absolute values) can also be calculated. The attribute of interest can be selected using the option -n|--fname. Values defined by the -nodata option, or not withing the limits set by the options -src_min and -src_max are ignored for the statistics.
+\section pkstatogr_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | i | input | std::string | |Input OGR vector file |
+ | n | fname | std::string | |Fields on which to calculate statistics |
+ | ln | lname | std::string | |Layer name(s) in sample (leave empty to select all) |
+ | nodata | nodata | double | |Set nodata value(s) |
+ | src_min | src_min | double | |Set minimum value for histogram |
+ | src_max | src_max | double | |Set maximum value for histogram |
+ | s | size | bool | false |Sample size (number of points) |
+ | mm | minmax | bool | false |Calculate minimum and maximum value |
+ | min | min | bool | false |Calculate minimum value |
+ | max | max | bool | false |Calculate maximum value |
+ | mean | mean | bool | false |Calculate mean value |
+ | median | median | bool | false |Calculate median value |
+ | stdev | stdev | bool | false |Calculate standard deviation |
+ | hist | hist | bool | false |Calculate histogram |
+ | nbin | nbin | unsigned int | |Number of bins |
+ | rel | relative | bool | false |Use percentiles for histogram to calculate histogram |
+ | kde | kde | bool | false |Use Kernel density estimation when producing histogram. The standard deviation is estimated based on Silverman's rule of thumb |
+
+Usage: pkstatogr -i input [-n attribute]*
+
+
+Examples
+========
+Some examples how to use pkstatogr can be found \ref examples_pkstatogr "here"
+**/
using namespace std;
diff --git a/src/apps/pksvm.cc b/src/apps/pksvm.cc
index 3126b17..b6e9ff4 100644
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@ -33,6 +33,88 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
+/******************************************************************************/
+/*! \page pksvm pksvm
+ classify raster image using Support Vector Machine
+## SYNOPSIS
+
+<code>
+ Usage: pksvm -t training [-i input -o output] [-cv value]
+</code>
+
+<code>
+
+ Options: [-tln layer]* [-c name -r value]* [-of GDALformat|-f OGRformat] [-co NAME=VALUE]* [-ct filename] [-label attribute] [-prior value]* [-g gamma] [-cc cost] [-m filename [-msknodata value]*] [-nodata value]
+
+ Advanced options:
+ [-b band] [-s band] [-e band] [-bal size]* [-min] [-bag value] [-bs value] [-comb rule] [-cb filename] [-prob filename] [-pim priorimage] [--offset value] [--scale value] [-svmt type] [-kt type] [-kd value] [-c0 value] [-nu value] [-eloss value] [-cache value] [-etol value] [-shrink] [-extent vector]
+</code>
+
+\section pksvm_description Description
+
+The utility pksvm implements a support vector machine (SVM) to solve a supervised classification problem. The implementation is based on the open source C++ library libSVM (http://www.csie.ntu.edu.tw/~cjlin/libsvm).
+Both raster and vector files are supported as input. The output will contain the classification result, either in raster or vector format, corresponding to the format of the input. A training sample must be provided as an OGR vector dataset that contains the class labels and the features for each training point. The point locations are not considered in the training step. You can use the same training sample for classifying different images, provided the number of bands of the images are [...]
+
+\section pksvm_options Options
+ - use either `-short` or `--long` options (both `--long=value` and `--long value` are supported)
+ - short option `-h` shows basic options only, long option `--help` shows all options
+|short|long|type|default|description|
+|-----|----|----|-------|-----------|
+ | t | training | std::string | |Training vector file. A single vector file contains all training features (must be set as: b0, b1, b2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file) |
+ | i | input | std::string | |input image |
+ | o | output | std::string | |Output classification image |
+ | cv | cv | unsigned short | 0 |N-fold cross validation mode |
+ | cmf | cmf | std::string | ascii |Format for confusion matrix (ascii or latex) |
+ | tln | tln | std::string | |Training layer name(s) |
+ | c | class | std::string | |List of class names. |
+ | r | reclass | short | |List of class values (use same order as in class opt). |
+ | of | oformat | std::string | |Output image format (see also gdal_translate). Empty string: inherit from input image |
+ | f | f | std::string | SQLite |Output ogr format for active training sample |
+ | co | co | std::string | |Creation option for output file. Multiple options can be specified. |
+ | ct | ct | std::string | |Color table in ASCII format having 5 columns: id R G B ALFA (0: transparent, 255: solid) |
+ | label | label | std::string | label |Attribute name for class label in training vector file. |
+ | prior | prior | double | 0 |Prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ). Used for input only (ignored for cross validation) |
+ | g | gamma | float | 1 |Gamma in kernel function |
+ | cc | ccost | float | 1000 |The parameter C of C_SVC, epsilon_SVR, and nu_SVR |
+ | m | mask | std::string | |Use the first band of the specified file as a validity mask. Nodata values can be set with the option msknodata. |
+ | msknodata | msknodata | short | 0 |Mask value(s) not to consider for classification (use negative values if only these values should be taken into account). Values will be taken over in classification image. |
+ | nodata | nodata | unsigned short | 0 |Nodata value to put where image is masked as nodata |
+ | b | band | short | |Band index (starting from 0, either use band option or use start to end) |
+ | s | start | double | 0 |Start band sequence number |
+ | e | end | double | 0 |End band sequence number (set to 0 to include all bands) |
+ | bal | balance | unsigned int | 0 |Balance the input data to this number of samples for each class |
+ | min | min | int | 0 |If number of training pixels is less then min, do not take this class into account (0: consider all classes) |
+ | bag | bag | unsigned short | 1 |Number of bootstrap aggregations |
+ | bagsize | bagsize | int | 100 |Percentage of features used from available training features for each bootstrap aggregation (one size for all classes, or a different size for each class respectively |
+ | comb | comb | unsigned short | 0 |How to combine bootstrap aggregation classifiers (0: sum rule, 1: product rule, 2: max rule). Also used to aggregate classes with rc option. |
+ | cb | classbag | std::string | |Output for each individual bootstrap aggregation |
+ | prob | prob | std::string | |Probability image. |
+ | pim | priorimg | std::string | |Prior probability image (multi-band img with band for each class |
+ | | offset | double | 0 |Offset value for each spectral band input features: refl[band]=(DN[band]-offset[band])/scale[band] |
+ | | scale | double | 0 |Scale value for each spectral band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale min and max in each band to -1.0 and 1.0) |
+ | svmt | svmtype | std::string | C_SVC |Type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR) |
+ | kt | kerneltype | std::string | radial |Type of kernel function (linear,polynomial,radial,sigmoid) |
+ | kd | kd | unsigned short | 3 |Degree in kernel function |
+ | c0 | coef0 | float | 0 |Coef0 in kernel function |
+ | nu | nu | float | 0.5 |The parameter nu of nu_SVC, one_class SVM, and nu_SVR |
+ | eloss | eloss | float | 0.1 |The epsilon in loss function of epsilon_SVR |
+ | cache | cache | int | 100 |Cache memory size in MB |
+ | etol | etol | float | 0.001 |The tolerance of termination criterion |
+ | shrink | shrink | bool | false |Whether to use the shrinking heuristics |
+ | pe | probest | bool | true |Whether to train a SVC or SVR model for probability estimates |
+ | entropy | entropy | std::string | |Entropy image (measure for uncertainty of classifier output |
+ | active | active | std::string | |Ogr output for active training sample. |
+ | na | nactive | unsigned int | 1 |Number of active training points |
+ | random | random | bool | true |Randomize training data for balancing and bagging |
+ | e | extent | std::string | |get boundary to classify from extent from polygons in vector file |
+
+Usage: pksvm -t training [-i input -o output] [-cv value]
+
+
+Examples
+========
+Some examples how to use pksvm can be found \ref examples_pksvm "here"
+**/
namespace svm{
enum SVM_TYPE {C_SVC=0, nu_SVC=1,one_class=2, epsilon_SVR=3, nu_SVR=4};
@@ -63,6 +145,7 @@ int main(int argc, char *argv[])
Optionpk<double> priors_opt("prior", "prior", "Prior probabilities for each class (e.g., -p 0.3 -p 0.3 -p 0.2 ). Used for input only (ignored for cross validation)", 0.0);
Optionpk<string> priorimg_opt("pim", "priorimg", "Prior probability image (multi-band img with band for each class","",2);
Optionpk<unsigned short> cv_opt("cv", "cv", "N-fold cross validation mode",0);
+ Optionpk<string> cmformat_opt("cmf","cmf","Format for confusion matrix (ascii or latex)","ascii");
Optionpk<std::string> svm_type_opt("svmt", "svmtype", "Type of SVM (C_SVC, nu_SVC,one_class, epsilon_SVR, nu_SVR)","C_SVC");
Optionpk<std::string> kernel_type_opt("kt", "kerneltype", "Type of kernel function (linear,polynomial,radial,sigmoid) ","radial");
Optionpk<unsigned short> kernel_degree_opt("kd", "kd", "Degree in kernel function",3);
@@ -94,6 +177,7 @@ int main(int argc, char *argv[])
Optionpk<unsigned int> nactive_opt("na", "nactive", "Number of active training points",1);
Optionpk<string> classname_opt("c", "class", "List of class names.");
Optionpk<short> classvalue_opt("r", "reclass", "List of class values (use same order as in class opt).");
+ Optionpk<string> extent_opt("extent", "extent", "get boundary to classify from extent from polygons in vector file");
Optionpk<short> verbose_opt("v", "verbose", "Verbose level",0,2);
band_opt.setHide(1);
@@ -122,8 +206,10 @@ int main(int argc, char *argv[])
entropy_opt.setHide(1);
active_opt.setHide(1);
nactive_opt.setHide(1);
- verbose_opt.setHide(1);
random_opt.setHide(1);
+ extent_opt.setHide(1);
+
+ verbose_opt.setHide(2);
bool doProcess;//stop process when program was invoked with help option (-h --help)
try{
@@ -131,6 +217,7 @@ int main(int argc, char *argv[])
input_opt.retrieveOption(argc,argv);
output_opt.retrieveOption(argc,argv);
cv_opt.retrieveOption(argc,argv);
+ cmformat_opt.retrieveOption(argc,argv);
tlayer_opt.retrieveOption(argc,argv);
classname_opt.retrieveOption(argc,argv);
classvalue_opt.retrieveOption(argc,argv);
@@ -174,6 +261,7 @@ int main(int argc, char *argv[])
nactive_opt.retrieveOption(argc,argv);
verbose_opt.retrieveOption(argc,argv);
random_opt.retrieveOption(argc,argv);
+ extent_opt.retrieveOption(argc,argv);
}
catch(string predefinedString){
std::cout << predefinedString << std::endl;
@@ -226,6 +314,22 @@ int main(int argc, char *argv[])
if(verbose_opt[0]>=1)
std::cout << "number of bootstrap aggregations: " << nbag << std::endl;
+ ImgReaderOgr extentReader;
+ OGRLayer *readLayer;
+
+ double ulx=0;
+ double uly=0;
+ double lrx=0;
+ double lry=0;
+ if(extent_opt.size()){
+ extentReader.open(extent_opt[0]);
+ readLayer = extentReader.getDataSource()->GetLayer(0);
+ if(!(extentReader.getExtent(ulx,uly,lrx,lry))){
+ cerr << "Error: could not get extent from " << extent_opt[0] << endl;
+ exit(1);
+ }
+ }
+
ImgWriterOgr activeWriter;
if(active_opt.size()){
prob_est_opt[0]=true;
@@ -276,7 +380,7 @@ int main(int argc, char *argv[])
}
//----------------------------------- Training -------------------------------
- ConfusionMatrix cm;
+ confusionmatrix::ConfusionMatrix cm;
vector< vector<double> > offset(nbag);
vector< vector<double> > scale(nbag);
map<string,Vector2d<float> > trainingMap;
@@ -587,22 +691,24 @@ int main(int argc, char *argv[])
}//for ibag
if(cv_opt[0]>1){
assert(cm.nReference());
+ cm.setFormat(cmformat_opt[0]);
+ cm.reportSE95(false);
std::cout << cm << std::endl;
- cout << "class #samples userAcc prodAcc" << endl;
- double se95_ua=0;
- double se95_pa=0;
- double se95_oa=0;
- double dua=0;
- double dpa=0;
- double doa=0;
- for(short iclass=0;iclass<cm.nClasses();++iclass){
- dua=cm.ua(cm.getClass(iclass),&se95_ua);
- dpa=cm.pa(cm.getClass(iclass),&se95_pa);
- cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
- }
- std::cout << "Kappa: " << cm.kappa() << std::endl;
- doa=cm.oa(&se95_oa);
- std::cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << std::endl;
+ // cout << "class #samples userAcc prodAcc" << endl;
+ // double se95_ua=0;
+ // double se95_pa=0;
+ // double se95_oa=0;
+ // double dua=0;
+ // double dpa=0;
+ // double doa=0;
+ // for(short iclass=0;iclass<cm.nClasses();++iclass){
+ // dua=cm.ua(cm.getClass(iclass),&se95_ua);
+ // dpa=cm.pa(cm.getClass(iclass),&se95_pa);
+ // cout << cm.getClass(iclass) << " " << cm.nReference(cm.getClass(iclass)) << " " << dua << " (" << se95_ua << ")" << " " << dpa << " (" << se95_pa << ")" << endl;
+ // }
+ // std::cout << "Kappa: " << cm.kappa() << std::endl;
+ // doa=cm.oa(&se95_oa);
+ // std::cout << "Overall Accuracy: " << 100*doa << " (" << 100*se95_oa << ")" << std::endl;
}
//--------------------------------- end of training -----------------------------------
@@ -636,22 +742,6 @@ int main(int argc, char *argv[])
cerr << error << std::endl;
exit(2);
}
- ImgReaderGdal maskReader;
- if(mask_opt.size()){
- try{
- if(verbose_opt[0]>=1)
- std::cout << "opening mask image file " << mask_opt[0] << std::endl;
- maskReader.open(mask_opt[0]);
- }
- catch(string error){
- cerr << error << std::endl;
- exit(2);
- }
- catch(...){
- cerr << "error catched" << std::endl;
- exit(1);
- }
- }
ImgReaderGdal priorReader;
if(priorimg_opt.size()){
try{
@@ -722,6 +812,45 @@ int main(int argc, char *argv[])
cerr << error << std::endl;
}
+ ImgWriterGdal maskWriter;
+ if(extent_opt.size()){
+ try{
+ maskWriter.open("/vsimem/mask.tif",ncol,nrow,1,GDT_Float32,imageType,option_opt);
+ maskWriter.GDALSetNoDataValue(nodata_opt[0]);
+ maskWriter.copyGeoTransform(testImage);
+ maskWriter.setProjection(testImage.getProjection());
+ vector<double> burnValues(1,1);//burn value is 1 (single band)
+ maskWriter.rasterizeOgr(extentReader,burnValues);
+ maskWriter.close();
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ mask_opt.clear();
+ mask_opt.push_back("/vsimem/mask.tif");
+ }
+ ImgReaderGdal maskReader;
+ if(mask_opt.size()){
+ try{
+ if(verbose_opt[0]>=1)
+ std::cout << "opening mask image file " << mask_opt[0] << std::endl;
+ maskReader.open(mask_opt[0]);
+ }
+ catch(string error){
+ cerr << error << std::endl;
+ exit(2);
+ }
+ catch(...){
+ cerr << "error catched" << std::endl;
+ exit(1);
+ }
+ }
+
for(int iline=0;iline<nrow;++iline){
vector<float> buffer(ncol);
vector<short> lineMask;
@@ -791,13 +920,22 @@ int main(int argc, char *argv[])
//process per pixel
for(int icol=0;icol<ncol;++icol){
assert(hpixel[icol].size()==nband);
+ bool doClassify=true;
bool masked=false;
+ double geox=0;
+ double geoy=0;
+ if(extent_opt.size()){
+ doClassify=false;
+ testImage.image2geo(icol,iline,geox,geoy);
+ //check enveloppe first
+ if(uly>=geoy&&lry<=geoy&&ulx<=geox&&lrx>=geox){
+ doClassify=true;
+ }
+ }
if(mask_opt.size()){
//read mask
double colMask=0;
double rowMask=0;
- double geox=0;
- double geoy=0;
testImage.image2geo(icol,iline,geox,geoy);
maskReader.geo2image(geox,geoy,colMask,rowMask);
@@ -826,7 +964,7 @@ int main(int argc, char *argv[])
if(lineMask[colMask]==msknodata_opt[ivalue]){
theMask=lineMask[colMask];
masked=true;
- break;
+ break;
}
}
else{//only values set in msknodata_opt are valid
@@ -855,16 +993,18 @@ int main(int argc, char *argv[])
break;
}
}
- if(!valid){
- if(classBag_opt.size())
- for(int ibag=0;ibag<nbag;++ibag)
- classBag[ibag][icol]=nodata_opt[0];
- classOut[icol]=nodata_opt[0];
- continue;//next column
- }
+ if(!valid)
+ doClassify=false;
}
for(short iclass=0;iclass<nclass;++iclass)
probOut[iclass][icol]=0;
+ if(!doClassify){
+ if(classBag_opt.size())
+ for(int ibag=0;ibag<nbag;++ibag)
+ classBag[ibag][icol]=nodata_opt[0];
+ classOut[icol]=nodata_opt[0];
+ continue;//next column
+ }
if(verbose_opt[0]>1)
std::cout << "begin classification " << std::endl;
//----------------------------------- classification -------------------
@@ -1221,6 +1361,8 @@ int main(int argc, char *argv[])
try{
if(active_opt.size())
activeWriter.close();
+ if(extent_opt.size())
+ extentReader.close();
}
catch(string errorString){
std::cerr << "Error: errorString" << std::endl;
diff --git a/src/base/Optionpk.h b/src/base/Optionpk.h
index 23fdcbe..45af285 100644
--- a/src/base/Optionpk.h
+++ b/src/base/Optionpk.h
@@ -116,20 +116,30 @@ public:
~Optionpk();
///set help information
void setHelp(const std::string& helpInfo){m_help=helpInfo;};
+ ///hide option from short help -h (1) or make invisible to short and long help --help (2)
void setHide(short hide){m_hide=hide;};
+ ///read option from command line (use for all options!)
bool retrieveOption(int argc, char ** argv);
+ ///print values for this option
template<class T1> friend std::ostream& operator<<(std::ostream & os, const Optionpk<T1>& theOption);
-
+ ///set all attributes of the option, except default and hide
void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo);
+ ///set all attributes of the option
void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide);
+ ///set a default value for the option
void setDefault(const T& defaultValue);
std::string getDefaultValue() const {return m_defaultValue;};
+ ///set the short name to be used as -shortName
void setShortName(const std::string& shortName);
+ ///set the long name to be used as --longName
void setLongName(const std::string& longName);
+ ///get the short name to be used as -shortName
std::string getShortName() const {return m_shortName;};
+ ///get the long name to be used as --longName
std::string getLongName() const {return m_longName;};
-
+ ///get help info stored in m_help
std::string getHelp() const {return m_help;};
+ ///get license info
static std::string getGPLv3License(){
return static_cast<std::string>("\n\
This program is free software: you can redistribute it and/or modify\n\
@@ -145,22 +155,34 @@ public:
You should have received a copy of the GNU General Public License\n\
along with this program. If not, see <http://www.gnu.org/licenses/>.\n");};
- //this function only makes sense for T=std::string (will need a specialization)
+ ///find substring in options of type string (e.g., -co INTERLEAVE=BAND)
+ ///this template function only makes sense for T=std::string (implemented via a specialization)
typename std::vector<T>::const_iterator findSubstring(const T& argument) const {std::string errorString="Error: findSubstring only defined for options of type std::string"; throw(errorString);};
private:
- bool hasArgument() const {return m_hasArgument;};//all options except bools should have arguments
+ ///all options except bools should have arguments
+ bool hasArgument() const {return m_hasArgument;};
+ ///true unless option was defined with \0 as short option
bool hasShortOption() const {return m_shortName.compare("\0");};
+ ///true unless option was defined with \0 as long option
bool hasLongOption() const {return m_longName.compare("\0");};
+ ///report the use of the option (called when utility is run with -h or --help)
std::string usage() const;
+ ///used to generate help with in Doxygen style (used for web documentation)
std::string usageDoxygen() const;
-
+ ///short name to be used as -shortName
std::string m_shortName;
+ ///long name to be used as --longName
std::string m_longName;
+ ///string with help information
std::string m_help;
+ ///all options except bools should have arguments
bool m_hasArgument;
+ ///default value of the option
T m_defaultValue;
+ ///has the default been defined
bool m_hasDefault;
+ ///0: always show; 1: only show with --help; 2: invisible option
short m_hide;
};
diff --git a/src/imageclasses/ImgReaderGdal.cc b/src/imageclasses/ImgReaderGdal.cc
index 40ae36a..dec3f55 100644
--- a/src/imageclasses/ImgReaderGdal.cc
+++ b/src/imageclasses/ImgReaderGdal.cc
@@ -425,18 +425,18 @@ double ImgReaderGdal::getMax(int& x, int& y, int band) const{
void ImgReaderGdal::getMinMax(int startCol, int endCol, int startRow, int endRow, int band, double& minValue, double& maxValue) const
{
- GDALRasterBand *poBand;
- int bGotMin, bGotMax;
- double adfMinMax[2];
+ // GDALRasterBand *poBand;
+ // int bGotMin, bGotMax;
+ // double adfMinMax[2];
- poBand = m_gds->GetRasterBand(band+1);
- adfMinMax[0] = poBand->GetMinimum( &bGotMin );
- adfMinMax[1] = poBand->GetMaximum( &bGotMax );
- if( ! (bGotMin && bGotMax) )
- GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);
- // GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
- minValue=adfMinMax[0];
- maxValue=adfMinMax[1];
+ // poBand = m_gds->GetRasterBand(band+1);
+ // adfMinMax[0] = poBand->GetMinimum( &bGotMin );
+ // adfMinMax[1] = poBand->GetMaximum( &bGotMax );
+ // if( ! (bGotMin && bGotMax) )
+ // GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);
+ // // GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
+ // minValue=adfMinMax[0];
+ // maxValue=adfMinMax[1];
std::vector<double> lineBuffer(endCol-startCol+1);
bool init=false;
@@ -444,8 +444,6 @@ void ImgReaderGdal::getMinMax(int startCol, int endCol, int startRow, int endRow
for(int irow=startCol;irow<endRow+1;++irow){
readData(lineBuffer,GDT_Float64,startCol,endCol,irow,band);
for(int icol=0;icol<lineBuffer.size();++icol){
- // bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());
- // if(valid){
if(!isNoData(lineBuffer[icol])){
if(!init){
minValue=lineBuffer[icol];
@@ -467,18 +465,6 @@ void ImgReaderGdal::getMinMax(int startCol, int endCol, int startRow, int endRow
void ImgReaderGdal::getMinMax(double& minValue, double& maxValue, int band, bool exhaustiveSearch) const
{
- GDALRasterBand *poBand;
- int bGotMin, bGotMax;
- double adfMinMax[2];
-
- poBand = m_gds->GetRasterBand(band+1);
- adfMinMax[0] = poBand->GetMinimum( &bGotMin );
- adfMinMax[1] = poBand->GetMaximum( &bGotMax );
- if( ! (bGotMin && bGotMax) )
- GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);
- // GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
- minValue=adfMinMax[0];
- maxValue=adfMinMax[1];
if(exhaustiveSearch){//force exhaustive search
std::vector<double> lineBuffer(nrOfCol());
bool init=false;
@@ -505,35 +491,64 @@ void ImgReaderGdal::getMinMax(double& minValue, double& maxValue, int band, bool
if(!init)
throw(static_cast<std::string>("Warning: not initialized"));
}
+ else{
+ GDALRasterBand *poBand;
+ int bGotMin, bGotMax;
+ double adfMinMax[2];
+
+ poBand = m_gds->GetRasterBand(band+1);
+ adfMinMax[0] = poBand->GetMinimum( &bGotMin );
+ adfMinMax[1] = poBand->GetMaximum( &bGotMax );
+ if( ! (bGotMin && bGotMax) )
+ GDALComputeRasterMinMax((GDALRasterBandH)poBand, FALSE, adfMinMax);
+ minValue=adfMinMax[0];
+ maxValue=adfMinMax[1];
+ if(m_scale.size()>band){
+ minValue*=m_scale[band];
+ maxValue*=m_scale[band];
+ }
+ if(m_offset.size()>band){
+ minValue+=m_offset[band];
+ maxValue+=m_offset[band];
+ }
+ }
}
double ImgReaderGdal::getHistogram(std::vector<double>& histvector, double& min, double& max, unsigned int& nbin, int theBand, bool kde){
double minValue=0;
double maxValue=0;
- double meanValue=0;
- double stdDev=0;
- GDALProgressFunc pfnProgress;
- void* pProgressData;
- GDALRasterBand* rasterBand;
- rasterBand=getRasterBand(theBand);
- rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);
-
+
if(min>=max)
getMinMax(minValue,maxValue,theBand);
else{
minValue=min;
maxValue=max;
}
- // if(min<max&&min>minValue)
- // minValue=min;
- // if(min<max&&max<maxValue)
- // maxValue=max;
+ if(min<max&&min>minValue)
+ minValue=min;
+ if(min<max&&max<maxValue)
+ maxValue=max;
min=minValue;
max=maxValue;
double sigma=0;
- if(kde)
+ if(kde){
+ double meanValue=0;
+ double stdDev=0;
+ GDALProgressFunc pfnProgress;
+ void* pProgressData;
+ GDALRasterBand* rasterBand;
+ rasterBand=getRasterBand(theBand);
+ rasterBand->ComputeStatistics(0,&minValue,&maxValue,&meanValue,&stdDev,pfnProgress,pProgressData);
+ //rest minvalue and MaxValue as ComputeStatistics does not account for nodata, scale and offset
+ minValue=min;
+ maxValue=max;
+
+ if(m_scale.size()>theBand){
+ stdDev*=m_scale[theBand];
+ }
sigma=1.06*stdDev*pow(getNvalid(theBand),-0.2);
+ }
double scale=0;
if(maxValue>minValue){
@@ -544,12 +559,14 @@ double ImgReaderGdal::getHistogram(std::vector<double>& histvector, double& min,
else
nbin=1;
assert(nbin>0);
- histvector.resize(nbin);
+ if(histvector.size()!=nbin){
+ histvector.resize(nbin);
+ for(int i=0;i<nbin;histvector[i++]=0);
+ }
double nvalid=0;
unsigned long int nsample=0;
unsigned long int ninvalid=0;
std::vector<double> lineBuffer(nrOfCol());
- for(int i=0;i<nbin;histvector[i++]=0);
for(int irow=0;irow<nrOfRow();++irow){
readData(lineBuffer,GDT_Float64,irow,theBand);
for(int icol=0;icol<nrOfCol();++icol){
@@ -610,7 +627,7 @@ unsigned long int ImgReaderGdal::getNvalid(int band) const
{
unsigned long int nvalid=0;
if(m_noDataValues.size()){
- std::vector<short> lineBuffer(nrOfCol());
+ std::vector<double> lineBuffer(nrOfCol());
for(int irow=0;irow<nrOfRow();++irow){
readData(lineBuffer,GDT_Float64,irow,band);
for(int icol=0;icol<nrOfCol();++icol){
diff --git a/src/imageclasses/ImgReaderGdal.h b/src/imageclasses/ImgReaderGdal.h
index 2d037e7..b0e523f 100644
--- a/src/imageclasses/ImgReaderGdal.h
+++ b/src/imageclasses/ImgReaderGdal.h
@@ -97,7 +97,7 @@ public:
template<typename T> void readData(std::vector<T>& buffer, const GDALDataType& dataType, int row, int band=0) const;
template<typename T> void readData(std::vector<T>& buffer, const GDALDataType& dataType, double row, int band=0, RESAMPLE resample=NEAR) const;
void getMinMax(int startCol, int endCol, int startRow, int endRow, int band, double& minValue, double& maxValue) const;
- void getMinMax(double& minValue, double& maxValue, int band=0, bool exhaustiveSearch=false) const;
+ void getMinMax(double& minValue, double& maxValue, int band=0, bool exhaustiveSearch=true) const;
double getMin(int& col, int& row, int band=0) const;
double getHistogram(std::vector<double>& histvector, double& min, double& max,unsigned int& nbin, int theBand=0, bool kde=false);
double getMax(int& col, int& row, int band=0) const;
diff --git a/src/imageclasses/ImgReaderOgr.cc b/src/imageclasses/ImgReaderOgr.cc
index 84028ce..a303005 100644
--- a/src/imageclasses/ImgReaderOgr.cc
+++ b/src/imageclasses/ImgReaderOgr.cc
@@ -24,6 +24,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include "cpl_string.h"
//---------------------------------------------------------------------------
ImgReaderOgr::ImgReaderOgr(void)
+ : m_fs(' ')
{}
ImgReaderOgr::ImgReaderOgr(const std::string& filename)
@@ -39,6 +40,7 @@ ImgReaderOgr::~ImgReaderOgr(void)
void ImgReaderOgr::open(const std::string& filename)
{
+ m_fs=' ';
m_filename = filename;
setCodec();
}
@@ -75,6 +77,36 @@ bool ImgReaderOgr::getExtent(double& ulx, double& uly, double& lrx, double& lry,
return false;
}
+bool ImgReaderOgr::getExtent(double& ulx, double& uly, double& lrx, double& lry)
+{
+ bool success=false;
+ OGREnvelope oExt;
+ for(int ilayer=0;ilayer<getLayerCount();++ilayer){
+ if(getLayer(ilayer)->GetExtent(&oExt,TRUE)==OGRERR_NONE){
+ if(!ilayer){
+ ulx=oExt.MinX;
+ uly=oExt.MaxY;
+ lrx=oExt.MaxX;
+ lry=oExt.MinY;
+ }
+ else{
+ if(ulx>oExt.MinX)
+ ulx=oExt.MinX;
+ if(uly<oExt.MaxY)
+ uly=oExt.MaxY;
+ if(lrx<oExt.MaxX)
+ lrx=oExt.MaxX;
+ if(lry>oExt.MinY)
+ lry=oExt.MinY;
+ }
+ success=true;
+ }
+ else
+ success=false;
+ }
+ return success;
+}
+
unsigned long int ImgReaderOgr::getFeatureCount(int layer) const
{
return(m_datasource->GetLayer(layer)->GetFeatureCount());
@@ -155,50 +187,51 @@ std::ostream& operator<<(std::ostream& theOstream, ImgReaderOgr& theImageReader)
//An OGRDataSource can potentially have many layers associated with it. The number of layers available can be queried with OGRDataSource::GetLayerCount() and individual layers fetched by index using OGRDataSource::GetLayer(). However, we wil just fetch the layer by name.
//todo: try to open and catch if failure...
// ofstream fpoints(filename.c_str(),ios::out);
- OGRLayer *poLayer;
- poLayer = theImageReader.getDataSource()->GetLayer(0);
- OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
- poLayer->ResetReading();
+ int nlayerRead=theImageReader.getDataSource()->GetLayerCount();
+
+ for(int ilayer=0;ilayer<nlayerRead;++ilayer){
+ OGRLayer *readLayer=theImageReader.getLayer(ilayer);
+ OGRFeatureDefn *poFDefn = readLayer->GetLayerDefn();
- theOstream << "#";
- int iField=0;
- // theOstream << "X" << " " << "Y" << " ";
- for(int iField=0;iField<poFDefn->GetFieldCount();++iField){
+ theOstream << "#";
+ int iField=0;
+ for(int iField=0;iField<poFDefn->GetFieldCount();++iField){
OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
std::string fieldname=poFieldDefn->GetNameRef();
- theOstream << fieldname << " ";
- }
- theOstream << std::endl;
+ theOstream << fieldname << theImageReader.getFieldSeparator();
+ }
+ theOstream << std::endl;
- poLayer->ResetReading();
+ readLayer->ResetReading();
- //start reading features from the layer
- OGRFeature *poFeature;
- unsigned long int ifeature=0;
- while( (poFeature = poLayer->GetNextFeature()) != NULL ){
- OGRGeometry *poGeometry;
- poGeometry = poFeature->GetGeometryRef();
- assert(poGeometry != NULL);
- double x,y;
- if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){
- OGRPoint *poPoint = (OGRPoint *) poGeometry;
- x=poPoint->getX();
- y=poPoint->getY();
- }
- std::vector<std::string> vfields(poFDefn->GetFieldCount());
- std::string featurename;
- std::vector<std::string>::iterator fit=vfields.begin();
- for(int iField=0;iField<poFDefn->GetFieldCount();++iField){
- *(fit++)=poFeature->GetFieldAsString(iField);
+ //start reading features from the layer
+ OGRFeature *poFeature;
+ unsigned long int ifeature=0;
+ while( (poFeature = readLayer->GetNextFeature()) != NULL ){
+ OGRGeometry *poGeometry;
+ poGeometry = poFeature->GetGeometryRef();
+ assert(poGeometry != NULL);
+ double x,y;
+ if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){
+ OGRPoint *poPoint = (OGRPoint *) poGeometry;
+ x=poPoint->getX();
+ y=poPoint->getY();
+ }
+ std::vector<std::string> vfields(poFDefn->GetFieldCount());
+ std::string featurename;
+ std::vector<std::string>::iterator fit=vfields.begin();
+ for(int iField=0;iField<poFDefn->GetFieldCount();++iField){
+ *(fit++)=poFeature->GetFieldAsString(iField);
+ }
+ theOstream.precision(12);
+ if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint)
+ theOstream << x << theImageReader.getFieldSeparator() << y;
+ for(fit=vfields.begin();fit!=vfields.end();++fit)
+ theOstream << theImageReader.getFieldSeparator() << *fit;
+ theOstream << std::endl;
+ ++ifeature;
}
- theOstream.precision(12);
- if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint)
- theOstream << x << " " << y;
- for(fit=vfields.begin();fit!=vfields.end();++fit)
- theOstream << " " << *fit;
- theOstream << std::endl;
- ++ifeature;
}
return(theOstream);
}
diff --git a/src/imageclasses/ImgReaderOgr.h b/src/imageclasses/ImgReaderOgr.h
index 408627b..ffb3515 100644
--- a/src/imageclasses/ImgReaderOgr.h
+++ b/src/imageclasses/ImgReaderOgr.h
@@ -79,8 +79,11 @@ public:
// OGRLayer *executeSql(const std::string& output,const std::string& sqlStatement, OGRGeometry* spatialFilter=NULL);
template<typename T> int readSql(Vector2d<T>& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, const std::string& sqlStatement, OGRGeometry* spatialFilter=NULL, int layer=0, bool pos=false, bool verbose=false);
template<typename T> int readSql(std::map<int,Vector2d<T> >& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, const std::string& label, const std::string& sqlStatement, OGRGeometry* spatialFilter, int layer=0, bool pos=false, bool verbose=false);
- bool getExtent(double& ulx, double& uly, double& lrx, double& lry, int layer=0);
+ bool getExtent(double& ulx, double& uly, double& lrx, double& lry, int layer);
+ bool getExtent(double& ulx, double& uly, double& lrx, double& lry);
+ void setFieldSeparator(const char fs){ m_fs=fs;};
+ char getFieldSeparator() const { return m_fs;};
friend std::ostream& operator<<(std::ostream& theOstream, ImgReaderOgr& theImageReader);
protected:
@@ -88,6 +91,7 @@ protected:
std::string m_filename;
OGRDataSource *m_datasource;
+ char m_fs;
};
//read data from all features in a map, organized by classes
diff --git a/src/imageclasses/ImgWriterGdal.cc b/src/imageclasses/ImgWriterGdal.cc
index f5f9bc0..035b3a8 100644
--- a/src/imageclasses/ImgWriterGdal.cc
+++ b/src/imageclasses/ImgWriterGdal.cc
@@ -20,7 +20,11 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <iostream>
#include <iomanip>
#include <time.h>
+#include <algorithm>
#include "ogr_spatialref.h"
+extern "C" {
+#include "gdal_alg.h"
+}
#include "ImgWriterGdal.h"
#ifdef HAVE_CONFIG_H
@@ -605,3 +609,46 @@ bool ImgWriterGdal::writeData(void* pdata, const GDALDataType& dataType, int ban
poBand->RasterIO(GF_Write,0,0,nrOfCol(),nrOfRow(),pdata,nrOfCol(),nrOfRow(),dataType,0,0);
return true;
}
+
+void ImgWriterGdal::rasterizeOgr(ImgReaderOgr& ogrReader, const std::vector<double>& burnValues, const std::vector<std::string>& layernames ){
+ std::vector<int> bands;
+ std::vector<double> burnBands;//burn values for all bands in a single layer
+ std::vector<double> burnLayers;//burn values for all bands and all layers
+ if(burnValues.empty()){
+ std::string errorString="Error: burn values not provided";
+ throw(errorString);
+ }
+ burnBands=burnValues;
+ while(burnBands.size()<nrOfBand())
+ burnBands.push_back(burnValues[0]);
+ for(int iband=0;iband<nrOfBand();++iband)
+ bands.push_back(iband+1);
+ std::vector<OGRLayerH> layers;
+ int nlayer=0;
+ for(int ilayer=0;ilayer<ogrReader.getLayerCount();++ilayer){
+ std::string currentLayername=ogrReader.getLayer(ilayer)->GetName();
+ if(layernames.size())
+ if(find(layernames.begin(),layernames.end(),currentLayername)==layernames.end())
+ continue;
+ std::cout << "processing layer " << currentLayername << std::endl;
+ layers.push_back((OGRLayerH)ogrReader.getLayer(ilayer));
+ ++nlayer;
+ for(int iband=0;iband<nrOfBand();++iband)
+ burnLayers.insert(burnLayers.end(),burnBands.begin(),burnBands.end());
+ }
+ void *pTransformArg;
+ char **papszOptions;
+ double dfComplete=0.0;
+ const char* pszMessage;
+ void* pProgressArg=NULL;
+ GDALProgressFunc pfnProgress=GDALTermProgress;
+ pfnProgress(dfComplete,pszMessage,pProgressArg);
+ if(GDALRasterizeLayers( (GDALDatasetH)m_gds,nrOfBand(),&(bands[0]),layers.size(),&(layers[0]),NULL,pTransformArg,&(burnLayers[0]),papszOptions,pfnProgress,pProgressArg)!=CE_None){
+ std::cerr << CPLGetLastErrorMsg() << std::endl;
+ exit(1);
+ }
+ else{
+ dfComplete=1.0;
+ pfnProgress(dfComplete,pszMessage,pProgressArg);
+ }
+}
diff --git a/src/imageclasses/ImgWriterGdal.h b/src/imageclasses/ImgWriterGdal.h
index 9cfc9a0..01ef60d 100644
--- a/src/imageclasses/ImgWriterGdal.h
+++ b/src/imageclasses/ImgWriterGdal.h
@@ -26,7 +26,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>.
#include <sstream>
#include "gdal_priv.h"
#include "ImgReaderGdal.h"
-
+#include "ImgReaderOgr.h"
//--------------------------------------------------------------------------
class ImgWriterGdal
@@ -77,6 +77,7 @@ public:
void setColorTable(const std::string& filename, int band=0);
void setColorTable(GDALColorTable* colorTable, int band=0);
void setMetadata(char** metadata);
+ void rasterizeOgr(ImgReaderOgr& ogrReader, const std::vector<double>& burnValues=std::vector<double>(), const std::vector<std::string>& layernames=std::vector<std::string>());
protected:
void setCodec(const std::string& imageType);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git
More information about the Pkg-grass-devel
mailing list